Rocksolid Light

Welcome to novaBBS (click a section below)

mail  files  register  newsreader  groups  login

Message-ID:  

AUTHOR FvwmAuto just appeared one day, nobody knows how. -- FvwmAuto(1x)


devel / comp.arch.embedded / Re: Makefile or IDE?

SubjectAuthor
* Makefile or IDE?pozz
+* Re: Makefile or IDE?Grant Edwards
|`* Re: Makefile or IDE?pozz
| `- Re: Makefile or IDE?Tauno Voipio
+- Re: Makefile or IDE?Don Y
+* Re: Makefile or IDE?Stefan Reuther
|+* Re: Makefile or IDE?pozz
||`- Re: Makefile or IDE?Stefan Reuther
|`- Re: Makefile or IDE?George Neuner
+* Re: Makefile or IDE?Theo
|`* Re: Makefile or IDE?Grant Edwards
| `* Re: Makefile or IDE?George Neuner
|  +* Re: Makefile or IDE?David Brown
|  |`* Re: Makefile or IDE?Stefan Reuther
|  | `- Re: Makefile or IDE?David Brown
|  `* Re: Makefile or IDE?Grant Edwards
|   `- Re: Makefile or IDE?chris
+* Re: Makefile or IDE?pozz
|`* Re: Makefile or IDE?Stefan Reuther
| `* Re: Makefile or IDE?pozz
|  +* Re: Makefile or IDE?David Brown
|  |+* Re: Makefile or IDE?Tauno Voipio
|  ||`* Re: Makefile or IDE?David Brown
|  || `* Re: Makefile or IDE?Tauno Voipio
|  ||  `* Re: Makefile or IDE?David Brown
|  ||   `* Re: Makefile or IDE?Grant Edwards
|  ||    `* Re: Makefile or IDE?David Brown
|  ||     `- Re: Makefile or IDE?Grant Edwards
|  |`* Re: Makefile or IDE?pozz
|  | `* Re: Makefile or IDE?Hans-Bernhard Bröker
|  |  +* Re: Makefile or IDE?David Brown
|  |  |+* Re: Makefile or IDE?pozz
|  |  ||`* Re: Makefile or IDE?David Brown
|  |  || `- Re: Makefile or IDE?Grant Edwards
|  |  |`* Re: Makefile or IDE?Hans-Bernhard Bröker
|  |  | `- Re: Makefile or IDE?David Brown
|  |  `* Re: Makefile or IDE?Stefan Reuther
|  |   `* Re: Makefile or IDE?Hans-Bernhard Bröker
|  |    `- Re: Makefile or IDE?Stefan Reuther
|  `* Re: Makefile or IDE?Stefan Reuther
|   `- Re: Makefile or IDE?David Brown
+- Re: Makefile or IDE?Dave Nadler
+- Re: Makefile or IDE?pozz
+- Re: Makefile or IDE?Johann Klammer
`* Re: Makefile or IDE?chris
 `* Re: Makefile or IDE?StateMachineCOM
  +- Re: Makefile or IDE?chris
  `* Re: Makefile or IDE?Jim Jackson
   `- Re: Makefile or IDE?StateMachineCOM

Pages:12
Makefile or IDE?

<soabn8$b4e$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=744&group=comp.arch.embedded#744

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: pozzu...@gmail.com (pozz)
Newsgroups: comp.arch.embedded
Subject: Makefile or IDE?
Date: Thu, 2 Dec 2021 12:46:48 +0100
Organization: A noiseless patient Spider
Lines: 31
Message-ID: <soabn8$b4e$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Thu, 2 Dec 2021 11:46:48 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="b01b32ca9109727b888f1143f32e6b9a";
logging-data="11406"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+YuQGn7kvOO/A2g68B3XaGZhVufJPGQKw="
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
Thunderbird/91.3.2
Cancel-Lock: sha1:4kEIyjRLEQN14dQ9fFwdRR14Sck=
 by: pozz - Thu, 2 Dec 2021 11:46 UTC

When I download C source code (for example for Linux), most of the time
I need to use make (or autoconf).

In embedded world (no Linux embedded), we use MCUs produced by a silicon
vendor that give you at least a ready-to-use IDE (Elipse based or Visual
Studio based or proprietary). Recently it give you a full set of
libraries, middlewares, tools to create a complex project from scratch
in a couple of minutes that is compatibile and buildable with its IDE.

Ok, it's a good thing to start with a minimal effort and make some tests
on EVB and new chips. However I'm wondering if a good quality
commercial/industrial grade software is maintained under the IDE of the
silicon vendor or it is maintained with a Makefile (or similar).

I'm asking this, because I just started to add some unit tests (to run
on the host machine) on one of my projects that is built under the IDE.
Without a Makefile is very difficult to add a series of tests: do I
create a different IDE project for each module test?

Moreover, the build process of a project maintained under an IDE is
manual (click on a button). Most of the time there isn't the possibility
to build by a command line and when it is possible, it isn't the
"normal" way.

Many times in the past I tried to write a Makefile for my projects, but
sincerely for me make tool is very criptic (tabs instead of spaces?).
Dependencies are a mess.

Do you use IDE or Makefile? Is there a recent and much better
alternative to make (such as cmake or SCons)?

Re: Makefile or IDE?

<soaobs$nc3$1@reader1.panix.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=745&group=comp.arch.embedded#745

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!weretis.net!feeder6.news.weretis.net!panix!.POSTED.::1!not-for-mail
From: inva...@invalid.invalid (Grant Edwards)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Thu, 2 Dec 2021 15:22:36 -0000 (UTC)
Organization: PANIX Public Access Internet and UNIX, NYC
Message-ID: <soaobs$nc3$1@reader1.panix.com>
References: <soabn8$b4e$1@dont-email.me>
Injection-Date: Thu, 2 Dec 2021 15:22:36 -0000 (UTC)
Injection-Info: reader1.panix.com; posting-host="::1";
logging-data="23939"; mail-complaints-to="abuse@panix.com"
User-Agent: slrn/1.0.3 (Linux)
 by: Grant Edwards - Thu, 2 Dec 2021 15:22 UTC

On 2021-12-02, pozz <pozzugno@gmail.com> wrote:

> Ok, it's a good thing to start with a minimal effort and make some tests
> on EVB and new chips. However I'm wondering if a good quality
> commercial/industrial grade software is maintained under the IDE of the
> silicon vendor or it is maintained with a Makefile (or similar).

We always use makefiles. Some people do their editing and "make"ing in
an IDE like eclipse. Others use emacs or whatever other environment
they like.

In my experience, software provided by silicon vendors has always,
been utter crap. That's been true for IDEs, libraries, header files,
debuggers -- _everything_. And it's been true for 40 years.

Recently I tried to use the Silicon vendor's IDE and demo
project/libraries to build the simple app that prints "hello world" on
a serial port. This is an application, IDE, and libraries the silicon
vendor provided _with_the_evaluation_board_.

Following the instructions, step-by-step, did allow me to build an
executable. It was far too large for the MCU's flash. I threw out the
silicon vendor's "drivers" (which were absurdly bloated) and C library
(also huge). I wrote my own bare-metal drivers and substituted the
printf() implementation I had been using for years. The exectuable
size was reduced by over 75%.

We've also tried to use non-silicon-vendor IDEs (eclipse), and using
the IDE's concept of "projects" is always a complete mess. The
"project" always ends up with lot's of hard-coded paths and
host-specific junk in it. This means you can't check the project into
git/subversion, check it out on another machine, and build it without
days of "fixing" the project to work on the new host.

--
Grant

Re: Makefile or IDE?

<soasj4$5s8$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=746&group=comp.arch.embedded#746

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: pozzu...@gmail.com (pozz)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Thu, 2 Dec 2021 17:34:46 +0100
Organization: A noiseless patient Spider
Lines: 39
Message-ID: <soasj4$5s8$1@dont-email.me>
References: <soabn8$b4e$1@dont-email.me> <soaobs$nc3$1@reader1.panix.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Thu, 2 Dec 2021 16:34:44 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="b01b32ca9109727b888f1143f32e6b9a";
logging-data="6024"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1948SSnuwVNyFZ9XHtUQkRW4CkcxbZQQAE="
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
Thunderbird/91.3.2
Cancel-Lock: sha1:W1nanSDfLqU3hcvwPvfk9DLWEp4=
In-Reply-To: <soaobs$nc3$1@reader1.panix.com>
 by: pozz - Thu, 2 Dec 2021 16:34 UTC

Il 02/12/2021 16:22, Grant Edwards ha scritto:
> On 2021-12-02, pozz <pozzugno@gmail.com> wrote:
>
>> Ok, it's a good thing to start with a minimal effort and make some tests
>> on EVB and new chips. However I'm wondering if a good quality
>> commercial/industrial grade software is maintained under the IDE of the
>> silicon vendor or it is maintained with a Makefile (or similar).
>
> We always use makefiles. Some people do their editing and "make"ing in
> an IDE like eclipse. Others use emacs or whatever other environment
> they like.
>
> In my experience, software provided by silicon vendors has always,
> been utter crap. That's been true for IDEs, libraries, header files,
> debuggers -- _everything_. And it's been true for 40 years.
>
> Recently I tried to use the Silicon vendor's IDE and demo
> project/libraries to build the simple app that prints "hello world" on
> a serial port. This is an application, IDE, and libraries the silicon
> vendor provided _with_the_evaluation_board_.
>
> Following the instructions, step-by-step, did allow me to build an
> executable. It was far too large for the MCU's flash. I threw out the
> silicon vendor's "drivers" (which were absurdly bloated) and C library
> (also huge). I wrote my own bare-metal drivers and substituted the
> printf() implementation I had been using for years. The exectuable
> size was reduced by over 75%.
>
> We've also tried to use non-silicon-vendor IDEs (eclipse), and using
> the IDE's concept of "projects" is always a complete mess. The
> "project" always ends up with lot's of hard-coded paths and
> host-specific junk in it. This means you can't check the project into
> git/subversion, check it out on another machine, and build it without
> days of "fixing" the project to work on the new host.

Thank you for sharing your experiences. Anyway my post wasn't related to
the quality (size/speed efficiency...) of source code provided by
silicon vendors, but to the build process: IDE vs Makefile.

Re: Makefile or IDE?

<soatd5$cet$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=748&group=comp.arch.embedded#748

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: blockedo...@foo.invalid (Don Y)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Thu, 2 Dec 2021 09:48:27 -0700
Organization: A noiseless patient Spider
Lines: 54
Message-ID: <soatd5$cet$1@dont-email.me>
References: <soabn8$b4e$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Thu, 2 Dec 2021 16:48:37 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="97338051e9042b5541a3e6f2ec31e7f9";
logging-data="12765"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+f/j0LEZdQKNx919QaL0Vy"
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101
Thunderbird/52.1.1
Cancel-Lock: sha1:YM7n05HBtMoNcdovHVAnOBSRuhg=
In-Reply-To: <soabn8$b4e$1@dont-email.me>
Content-Language: en-US
 by: Don Y - Thu, 2 Dec 2021 16:48 UTC

On 12/2/2021 4:46 AM, pozz wrote:
> When I download C source code (for example for Linux), most of the time I need
> to use make (or autoconf).
>
> In embedded world (no Linux embedded), we use MCUs produced by a silicon vendor
> that give you at least a ready-to-use IDE (Elipse based or Visual Studio based
> or proprietary). Recently it give you a full set of libraries, middlewares,
> tools to create a complex project from scratch in a couple of minutes that is
> compatibile and buildable with its IDE.
>
> Ok, it's a good thing to start with a minimal effort and make some tests on EVB
> and new chips. However I'm wondering if a good quality commercial/industrial
> grade software is maintained under the IDE of the silicon vendor or it is
> maintained with a Makefile (or similar).
>
> I'm asking this, because I just started to add some unit tests (to run on the
> host machine) on one of my projects that is built under the IDE. Without a
> Makefile is very difficult to add a series of tests: do I create a different
> IDE project for each module test?
>
> Moreover, the build process of a project maintained under an IDE is manual
> (click on a button). Most of the time there isn't the possibility to build by a
> command line and when it is possible, it isn't the "normal" way.
>
> Many times in the past I tried to write a Makefile for my projects, but
> sincerely for me make tool is very criptic (tabs instead of spaces?).
> Dependencies are a mess.
>
> Do you use IDE or Makefile? Is there a recent and much better alternative to
> make (such as cmake or SCons)?

Makefiles give you more control over the build/test/document process.
They're "code" of a different sort (and purpose).

Otherwise, you are left at the mercy of whoever designed/implemented
the tool(chain) you are using.

[I have makefiles that ship my sources off to other machines and
start builds, there, to verify that my code at least compiles
without warnings on different architectures -- before getting
to "invested" in the current state of the code]

There are tools that will help you create makefiles.
The biggest problem (with inheritted codebases) will be if you
have to use a particular "flavor" of make. Or, some oddball
build *system*. (converting from something like that to
a more "standardized" build environment can often be a
significant effort. So, if the foreign codebase is something
that is still actively being maintained, you may choose to adopt
its oddball way of doing things to save yourself from having to
keep "porting" the build mechanism(s) over to "your" way of
doing things -- even if that is a friendlier environment!

Re: Makefile or IDE?

<sob040.4rs.1@stefan.msgid.phost.de>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=749&group=comp.arch.embedded#749

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: stefan.n...@arcor.de (Stefan Reuther)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Thu, 2 Dec 2021 17:34:55 +0100
Lines: 32
Message-ID: <sob040.4rs.1@stefan.msgid.phost.de>
References: <soabn8$b4e$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
X-Trace: individual.net 9xuWOmwloprBRDvLyAuQRg9QR1v41BO86qcZmD8akBXkxY7Jtm
Cancel-Lock: sha1:xxnXMc+xHRRZtCoIzOTC6FBTJZs=
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101
Thunderbird/68.12.1 Hamster/2.1.0.1538
In-Reply-To: <soabn8$b4e$1@dont-email.me>
 by: Stefan Reuther - Thu, 2 Dec 2021 16:34 UTC

Am 02.12.2021 um 12:46 schrieb pozz:
> Moreover, the build process of a project maintained under an IDE is
> manual (click on a button). Most of the time there isn't the possibility
> to build by a command line and when it is possible, it isn't the
> "normal" way.

So far, all the IDEs I have encountered this century use some variation
of make under the hood, and have a somewhat standard compiler (i.e.
responds to `whatevercc -c file.c -o file.o`).

> Many times in the past I tried to write a Makefile for my projects, but
> sincerely for me make tool is very criptic (tabs instead of spaces?).
> Dependencies are a mess.
>
> Do you use IDE or Makefile? Is there a recent and much better
> alternative to make (such as cmake or SCons)?

Think of make (or ninja) as some sort of (macro-) assembler language of
build systems, and add a high-level language on top.

CMake seems to be a popular (the most popular?) choice for that language
on top, although reasons why it sucks are abundant; the most prominent
for me being that the Makefiles it generates violate pretty much every
best practice and therefore are slow. Other than that, it can build
embedded software of course.

You'll eventually need another meta-build system on top to build the
projects that form your system image (busybox? openssl? dropbear?
linux?), you'll not port their build systems into yours.

Stefan

Re: Makefile or IDE?

<socsnd$4bh$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=750&group=comp.arch.embedded#750

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: pozzu...@gmail.com (pozz)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Fri, 3 Dec 2021 11:49:17 +0100
Organization: A noiseless patient Spider
Lines: 46
Message-ID: <socsnd$4bh$1@dont-email.me>
References: <soabn8$b4e$1@dont-email.me> <sob040.4rs.1@stefan.msgid.phost.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Fri, 3 Dec 2021 10:49:17 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="860e5b700fd3a979fef91a2b4b7b56fd";
logging-data="4465"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19MiDqiHLtb7o5af6EqTPQQOAJcO0hLOyE="
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
Thunderbird/91.3.2
Cancel-Lock: sha1:GISN8hRpIIxLP8j3uC+BhBLdxMM=
In-Reply-To: <sob040.4rs.1@stefan.msgid.phost.de>
 by: pozz - Fri, 3 Dec 2021 10:49 UTC

Il 02/12/2021 17:34, Stefan Reuther ha scritto:
> Am 02.12.2021 um 12:46 schrieb pozz:
>> Moreover, the build process of a project maintained under an IDE is
>> manual (click on a button). Most of the time there isn't the possibility
>> to build by a command line and when it is possible, it isn't the
>> "normal" way.
>
> So far, all the IDEs I have encountered this century use some variation
> of make under the hood, and have a somewhat standard compiler (i.e.
> responds to `whatevercc -c file.c -o file.o`).
>
>> Many times in the past I tried to write a Makefile for my projects, but
>> sincerely for me make tool is very criptic (tabs instead of spaces?).
>> Dependencies are a mess.
>>
>> Do you use IDE or Makefile? Is there a recent and much better
>> alternative to make (such as cmake or SCons)?
>
> Think of make (or ninja) as some sort of (macro-) assembler language of
> build systems, and add a high-level language on top.
>
> CMake seems to be a popular (the most popular?) choice for that language
> on top, although reasons why it sucks are abundant; the most prominent
> for me being that the Makefiles it generates violate pretty much every
> best practice and therefore are slow. Other than that, it can build
> embedded software of course.
>
> You'll eventually need another meta-build system on top to build the
> projects that form your system image (busybox? openssl? dropbear?
> linux?), you'll not port their build systems into yours.

It's very difficult to choose the build system today to study and use.

make, Cmake/make, Cmake/ninja, Meson, Scons, ...

What do you suggest for embedded projects? Of course I use
cross-compiler for the target (mainly arm-gcc), but also host native
compiler (mingw on Windows and gcc on Linux) for testing and simulation.

Re: Makefile or IDE?

<socu9h$ejj$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=751&group=comp.arch.embedded#751

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: tauno.vo...@notused.fi.invalid (Tauno Voipio)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Fri, 3 Dec 2021 13:15:58 +0200
Organization: A noiseless patient Spider
Lines: 65
Message-ID: <socu9h$ejj$1@dont-email.me>
References: <soabn8$b4e$1@dont-email.me> <soaobs$nc3$1@reader1.panix.com>
<soasj4$5s8$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Fri, 3 Dec 2021 11:16:01 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="881583743debd58c0e6044a0485d467e";
logging-data="14963"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18XruqjlvdvZQpf6VbqXWr4iz9Niszz9Nc="
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0)
Gecko/20100101 Thunderbird/91.3.2
Cancel-Lock: sha1:cydAQVvGTguRqHkZPMuOQPsfu0I=
In-Reply-To: <soasj4$5s8$1@dont-email.me>
 by: Tauno Voipio - Fri, 3 Dec 2021 11:15 UTC

On 2.12.21 18.34, pozz wrote:
> Il 02/12/2021 16:22, Grant Edwards ha scritto:
>> On 2021-12-02, pozz <pozzugno@gmail.com> wrote:
>>
>>> Ok, it's a good thing to start with a minimal effort and make some tests
>>> on EVB and new chips. However I'm wondering if a good quality
>>> commercial/industrial grade software is maintained under the IDE of the
>>> silicon vendor or it is maintained with a Makefile (or similar).
>>
>> We always use makefiles. Some people do their editing and "make"ing in
>> an IDE like eclipse. Others use emacs or whatever other environment
>> they like.
>>
>> In my experience, software provided by silicon vendors has always,
>> been utter crap. That's been true for IDEs, libraries, header files,
>> debuggers -- _everything_. And it's been true for 40 years.
>>
>> Recently I tried to use the Silicon vendor's IDE and demo
>> project/libraries to build the simple app that prints "hello world" on
>> a serial port. This is an application, IDE, and libraries the silicon
>> vendor provided _with_the_evaluation_board_.
>>
>> Following the instructions, step-by-step, did allow me to build an
>> executable. It was far too large for the MCU's flash. I threw out the
>> silicon vendor's "drivers" (which were absurdly bloated) and C library
>> (also huge). I wrote my own bare-metal drivers and substituted the
>> printf() implementation I had been using for years. The exectuable
>> size was reduced by over 75%.
>>
>> We've also tried to use non-silicon-vendor IDEs (eclipse), and using
>> the IDE's concept of "projects" is always a complete mess. The
>> "project" always ends up with lot's of hard-coded paths and
>> host-specific junk in it. This means you can't check the project into
>> git/subversion, check it out on another machine, and build it without
>> days of "fixing" the project to work on the new host.
>
> Thank you for sharing your experiences. Anyway my post wasn't related to
> the quality (size/speed efficiency...) of source code provided by
> silicon vendors, but to the build process: IDE vs Makefile.

They are not complete opposites For example, the Eclipse CDT uses make
at the tool to perform the build. There is a difference whether the
user wirites the makefiles or the IDE creates them. Most IDEs create
makefiles for running the generated code on the same computer which
houses the IDE, and it is more difficult to cross-compile for embedded
targets.

I agree on the silicon manufacturers' code, it should be jettisoned.

I have abandoned the code from both Atmel and ST after fighting some
weeks to make them perform. Instead, the manufacturers should
concentrate on documenting the hardware properly. I had to dis-assemble
Atmel's start-up code to get the fact that SAM4 processor clock controls
must be changed only one field at a time, even if the fields occupy
the same register. If multiple fields were changed, the clock set-up
did never get ready. This is a serious problem, as ARM breaks the JTAG
standard and requires the processor clock running to respond to JTAG.
The JTAG standard assumes that the only clocking needed comes from the
JTAG clock.

--

-TV

Re: Makefile or IDE?

<sodnhq.4o0.1@stefan.msgid.phost.de>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=752&group=comp.arch.embedded#752

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: stefan.n...@arcor.de (Stefan Reuther)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Fri, 3 Dec 2021 18:27:05 +0100
Lines: 54
Message-ID: <sodnhq.4o0.1@stefan.msgid.phost.de>
References: <soabn8$b4e$1@dont-email.me> <sob040.4rs.1@stefan.msgid.phost.de>
<socsnd$4bh$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
X-Trace: individual.net P55qK3gTGZ7kKDcuWjFvwgNmlNi0RgkB6wYcxhwymfNhduBIy8
Cancel-Lock: sha1:5cD0pp+w2Zwgp3/MHTVyVuCFmkc=
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101
Thunderbird/68.12.1 Hamster/2.1.0.1538
In-Reply-To: <socsnd$4bh$1@dont-email.me>
 by: Stefan Reuther - Fri, 3 Dec 2021 17:27 UTC

Am 03.12.2021 um 11:49 schrieb pozz:
> Il 02/12/2021 17:34, Stefan Reuther ha scritto:
>> Think of make (or ninja) as some sort of (macro-) assembler language of
>> build systems, and add a high-level language on top.
>>
>> CMake seems to be a popular (the most popular?) choice for that language
>> on top, although reasons why it sucks are abundant; the most prominent
>> for me being that the Makefiles it generates violate pretty much every
>> best practice and therefore are slow. Other than that, it can build
>> embedded software of course.
>>
>> You'll eventually need another meta-build system on top to build the
>> projects that form your system image (busybox? openssl? dropbear?
>> linux?), you'll not port their build systems into yours.
>
> It's very difficult to choose the build system today to study and use.
>
> make, Cmake/make, Cmake/ninja, Meson, Scons, ...
>
> What do you suggest for embedded projects? Of course I use
> cross-compiler for the target (mainly arm-gcc), but also host native
> compiler (mingw on Windows and gcc on Linux) for testing and simulation.

Same here.

At work, we use cmake/make for building (but if you have cmake, it
doesn't matter whether there's make or ninja below it). That's pretty
ok'ish for turning a bunch of source code files into an executable;
probably not so good for doing something else (e.g. rendering images for
documentation and your device's UI).

Personally, I generate my Makefiles (or build.ninja files) with a
homegrown script; again, based on the assumption that make is an
assembler that needs a high-level language on top.

However, building your code isn't the whole story. Unless you have a
huge monorepo containing everything you ever did, you'll have to check
out different things, and you will have dependencies between projects,
some even conditional (maybe you don't want to build your unit test
infrastructure when you make a release build for your target? maybe you
want a different kernel version when building an image for a v2 board
vs. a v1 board?).

I use a tool called 'bob' <https://github.com/BobBuildTool/bob> as the
meta-build system for that, at work and personally. It started out as an
in-house tool so it surely isn't industry standard, needs some planning,
and then gets the job done nicely. It invokes the original build process
of the original subprojects, be it cmake-based or autotools-based. The
people who build (desktop or embedded) Linux distributions all have some
meta-build system to do things like that, and I would assume neither of
them is easy to set up, just because the problem domain is pretty complex.

Stefan

Re: Makefile or IDE?

<cPf*AdQAy@news.chiark.greenend.org.uk>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=753&group=comp.arch.embedded#753

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!aioe.org!nntp.terraraq.uk!nntp-feed.chiark.greenend.org.uk!ewrotcd!.POSTED!not-for-mail
From: theom+n...@chiark.greenend.org.uk (Theo)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: 03 Dec 2021 20:51:54 +0000 (GMT)
Organization: University of Cambridge, England
Lines: 46
Message-ID: <cPf*AdQAy@news.chiark.greenend.org.uk>
References: <soabn8$b4e$1@dont-email.me>
NNTP-Posting-Host: chiark.greenend.org.uk
X-Trace: chiark.greenend.org.uk 1638564716 12961 212.13.197.229 (3 Dec 2021 20:51:56 GMT)
X-Complaints-To: abuse@chiark.greenend.org.uk
NNTP-Posting-Date: Fri, 3 Dec 2021 20:51:56 +0000 (UTC)
User-Agent: tin/1.8.3-20070201 ("Scotasay") (UNIX) (Linux/3.16.0-11-amd64 (x86_64))
Originator: theom@chiark.greenend.org.uk ([212.13.197.229])
 by: Theo - Fri, 3 Dec 2021 20:51 UTC

pozz <pozzugno@gmail.com> wrote:
> Do you use IDE or Makefile? Is there a recent and much better
> alternative to make (such as cmake or SCons)?

ISTM that IDEs start off as cover for the woeful state of the command line
environment on Windows.

On Unix, when you want to target a different platform, all you need is a new
compiler. Just grab arm-unknown-gnueabi-gcc and you're done. Maybe you
need some libraries as well, but that's easy. Debugging tools are all there
- based on gdb or one of numerous frontends. Then you use the environment
you already have - your own editor, shell, scripting language, version
control, etc are all there.

On Windows[*], few people develop like that because cmd.exe is an awful
shell to work in, all this C:\Program Files\blah tends to get in the way of
Unixy build tools like make, and command line editors etc aren't very good.
Windows also makes it awkward to mix and match GUI tools (eg separate
editor, compiler, debugger GUI apps).

So instead people expect an IDE with its own editor, that does everything in
house and lives in a single maximised window, and orchestrates the build
pipeline.

But then it starts bloating - the debugger gets brought in, then the
programmer, then sometimes it starts growing its own idea of a version
control client. And eventually you end up with something extremely
complicated and somewhat flaky just to build a few kilobytes of code.

Not to say that there aren't some useful features of IDEs - one thing is
explicit library integration into the editor (so you get documentation and
expansion as you type), another is special dialogues for configuration
options in your particular chip (eg pin mapping or initial clock setup)
rather than expecting you to configure all these things from code. The
first is something that existing editors can do given sufficient
information of the API, and the second is generally something you only do
once per project.

But for the basic edit-build-run-test cycle, the GUI seems mostly to get in
the way.

Theo

[*] Powershell and WSL have been trying to improve this. But I've not seen
any build flows that make much use of them, beyond simply taking Linux flows
and running them in WSL.

Re: Makefile or IDE?

<soe26m$78i$1@reader1.panix.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=754&group=comp.arch.embedded#754

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!weretis.net!feeder6.news.weretis.net!panix!.POSTED.::1!not-for-mail
From: inva...@invalid.invalid (Grant Edwards)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Fri, 3 Dec 2021 21:28:54 -0000 (UTC)
Organization: PANIX Public Access Internet and UNIX, NYC
Message-ID: <soe26m$78i$1@reader1.panix.com>
References: <soabn8$b4e$1@dont-email.me>
<cPf*AdQAy@news.chiark.greenend.org.uk>
Injection-Date: Fri, 3 Dec 2021 21:28:54 -0000 (UTC)
Injection-Info: reader1.panix.com; posting-host="::1";
logging-data="7442"; mail-complaints-to="abuse@panix.com"
User-Agent: slrn/1.0.3 (Linux)
 by: Grant Edwards - Fri, 3 Dec 2021 21:28 UTC

On 2021-12-03, Theo <theom+news@chiark.greenend.org.uk> wrote:

> [*] Powershell and WSL have been trying to improve this. But I've not seen
> any build flows that make much use of them, beyond simply taking Linux flows
> and running them in WSL.

I always had good luck using Cygwin and gnu "make" on Windows to run
various Win32 .exe command line compilers (e.g. IAR). I (thankfully)
haven't needed to do that for several years now...

--
Grant

Re: Makefile or IDE?

<soe6rf$brb$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=755&group=comp.arch.embedded#755

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: pozzu...@gmail.com (pozz)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Fri, 3 Dec 2021 23:48:16 +0100
Organization: A noiseless patient Spider
Lines: 68
Message-ID: <soe6rf$brb$1@dont-email.me>
References: <soabn8$b4e$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Fri, 3 Dec 2021 22:48:16 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="860e5b700fd3a979fef91a2b4b7b56fd";
logging-data="12139"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18whVwO8iEeuIn7bNUCpwrCbxIFwC48JGk="
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
Thunderbird/91.3.2
Cancel-Lock: sha1:QTTphIC24L92JACNRllm2pDbG9M=
In-Reply-To: <soabn8$b4e$1@dont-email.me>
 by: pozz - Fri, 3 Dec 2021 22:48 UTC

Il 02/12/2021 12:46, pozz ha scritto:
> When I download C source code (for example for Linux), most of the time
> I need to use make (or autoconf).
>
> In embedded world (no Linux embedded), we use MCUs produced by a silicon
> vendor that give you at least a ready-to-use IDE (Elipse based or Visual
> Studio based or proprietary). Recently it give you a full set of
> libraries, middlewares, tools to create a complex project from scratch
> in a couple of minutes that is compatibile and buildable with its IDE.
>
> Ok, it's a good thing to start with a minimal effort and make some tests
> on EVB and new chips. However I'm wondering if a good quality
> commercial/industrial grade software is maintained under the IDE of the
> silicon vendor or it is maintained with a Makefile (or similar).
>
> I'm asking this, because I just started to add some unit tests (to run
> on the host machine) on one of my projects that is built under the IDE.
> Without a Makefile is very difficult to add a series of tests: do I
> create a different IDE project for each module test?
>
> Moreover, the build process of a project maintained under an IDE is
> manual (click on a button). Most of the time there isn't the possibility
> to build by a command line and when it is possible, it isn't the
> "normal" way.
>
> Many times in the past I tried to write a Makefile for my projects, but
> sincerely for me make tool is very criptic (tabs instead of spaces?).
> Dependencies are a mess.
>
> Do you use IDE or Makefile? Is there a recent and much better
> alternative to make (such as cmake or SCons)?
>

It's absurd how difficult is to create a Makefile for a simple project
with the following tree:

Makefile
src/
file1.c
module1/
file2.c
module2/
file3.c
target1/
Release/
src/
file1.o
file1.d
module1/
file2.o
file2.d
module2/
file3.o
file3.d
Debug/
src/
file1.o
file1.d
...

Just to create directories for output files (objects and dependencies)
is a mess: precious rule, cheating make adding a dot after trailing
slash, second expansion, order-only prerequisite!!!

Dependencies must be created as a side effect of compilation with
esoteric -M options for gcc.

Is cmake simpler to configure?

Re: Makefile or IDE?

<sofg1s.13g.1@stefan.msgid.phost.de>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=756&group=comp.arch.embedded#756

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: stefan.n...@arcor.de (Stefan Reuther)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sat, 4 Dec 2021 10:31:23 +0100
Lines: 56
Message-ID: <sofg1s.13g.1@stefan.msgid.phost.de>
References: <soabn8$b4e$1@dont-email.me> <soe6rf$brb$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Trace: individual.net k5CFDTtMSJDlP4KbxsVQfA01mRMXvD/T5q8mgF9237BnzFncHu
Cancel-Lock: sha1:gpvaAbKpkcg8JBn+YtO6G+WfFIA=
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101
Thunderbird/68.12.1 Hamster/2.1.0.1538
In-Reply-To: <soe6rf$brb$1@dont-email.me>
 by: Stefan Reuther - Sat, 4 Dec 2021 09:31 UTC

Am 03.12.2021 um 23:48 schrieb pozz:
> It's absurd how difficult is to create a Makefile for a simple project
> with the following tree:
>
> Makefile
> src/
>   file1.c
>   module1/
>     file2.c
>   module2/
>     file3.c
> target1/
>   Release/
[...]
>   Debug/
>     src/
>       file1.o
>       file1.d
>       ...
>
> Just to create directories for output files (objects and dependencies)
> is a mess: precious rule, cheating make adding a dot after trailing
> slash, second expansion, order-only prerequisite!!!

Hypothesis: a single Makefile that does all this is not a good idea.
Better: make a single Makefile that turns your source code into one
instance of object code, and give it some configuration options that say
whether you want target1/Release, target2/Release, or host/Debug.

I'm not sure what you need order-only dependencies for. For a project
like this, with GNU make I'd most likely just do something like

OBJ = file1.o module1/file2.o module2/file3.o
main: $(OBJ)
$(CC) -o $@ $(OBJ)
$(OBJ): %.o: $(SRCDIR)/%.c
mkdir $(dir $@)
$(CC) $(CFLAGS) -c $< -o $@

> Dependencies must be created as a side effect of compilation with
> esoteric -M options for gcc.

It's not too bad with sufficiently current versions.

CFLAGS += -MMD -MP
-include $(OBJ:.o=.d)

> Is cmake simpler to configure?

CMake does one-configuration-per-invocation type builds like sketched
above, i.e. to build target1/Release and target1/Debug, you invoke CMake
on two different workspaces, once with -DCMAKE_BUILD_TYPE=Release and
once with -DCMAKE_BUILD_TYPE=Debug.

Stefan

Re: Makefile or IDE?

<sog15s$uj0$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=757&group=comp.arch.embedded#757

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: pozzu...@gmail.com (pozz)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sat, 4 Dec 2021 16:23:41 +0100
Organization: A noiseless patient Spider
Lines: 90
Message-ID: <sog15s$uj0$1@dont-email.me>
References: <soabn8$b4e$1@dont-email.me> <soe6rf$brb$1@dont-email.me>
<sofg1s.13g.1@stefan.msgid.phost.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 4 Dec 2021 15:23:41 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="014f36299e2ddd4df357a4762d62153e";
logging-data="31328"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/RdpBoiCOCMeQGtfLWc9JHsgurSXvzq+U="
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
Thunderbird/91.3.2
Cancel-Lock: sha1:YU3ZI85RbhDLRQWANtaQTwsucvA=
In-Reply-To: <sofg1s.13g.1@stefan.msgid.phost.de>
 by: pozz - Sat, 4 Dec 2021 15:23 UTC

Il 04/12/2021 10:31, Stefan Reuther ha scritto:
> Am 03.12.2021 um 23:48 schrieb pozz:
>> It's absurd how difficult is to create a Makefile for a simple project
>> with the following tree:
>>
>> Makefile
>> src/
>>   file1.c
>>   module1/
>>     file2.c
>>   module2/
>>     file3.c
>> target1/
>>   Release/
> [...]
>>   Debug/
>>     src/
>>       file1.o
>>       file1.d
>>       ...
>>
>> Just to create directories for output files (objects and dependencies)
>> is a mess: precious rule, cheating make adding a dot after trailing
>> slash, second expansion, order-only prerequisite!!!
>
> Hypothesis: a single Makefile that does all this is not a good idea.
> Better: make a single Makefile that turns your source code into one
> instance of object code, and give it some configuration options that say
> whether you want target1/Release, target2/Release, or host/Debug.

Oh yes, I'm using three make variables:

CONF=rls|dbg
TARGET=target1|target2

I also have

MODEL=model1|model2

because the same source code can be compiler to produce firmware for two
types of products.

Anyway, even using these three variables, the Makefile is difficult to
write and understand (at least for me).

> I'm not sure what you need order-only dependencies for. For a project
> like this, with GNU make I'd most likely just do something like
>
> OBJ = file1.o module1/file2.o module2/file3.o
> main: $(OBJ)
> $(CC) -o $@ $(OBJ)
> $(OBJ): %.o: $(SRCDIR)/%.c
> mkdir $(dir $@)
> $(CC) $(CFLAGS) -c $< -o $@

This is suboptimal. Every time one object file is created (because it is
not present or because prerequisites aren't satisfied), mkdir command is
executed, even if $(dir $@) is already created.

A better approach is to use a dedicated rule for directories, but it's
very complex and tricky[1].

I think your approach is better, only because is much more
understandable, not because is more efficient.

>> Dependencies must be created as a side effect of compilation with
>> esoteric -M options for gcc.
>
> It's not too bad with sufficiently current versions.
>
> CFLAGS += -MMD -MP
> -include $(OBJ:.o=.d)

Are you sure you don't need -MT too, to specify exactly the target rule?

>> Is cmake simpler to configure?
>
> CMake does one-configuration-per-invocation type builds like sketched
> above, i.e. to build target1/Release and target1/Debug, you invoke CMake
> on two different workspaces, once with -DCMAKE_BUILD_TYPE=Release and
> once with -DCMAKE_BUILD_TYPE=Debug.

Yes, I was asking if the configuration file of CMake is simpler to write
compared to a Makefile.

[1] https://ismail.badawi.io/blog/automatic-directory-creation-in-make/

Re: Makefile or IDE?

<sog5o6$k3j$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=758&group=comp.arch.embedded#758

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: david.br...@hesbynett.no (David Brown)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sat, 4 Dec 2021 17:41:41 +0100
Organization: A noiseless patient Spider
Lines: 109
Message-ID: <sog5o6$k3j$1@dont-email.me>
References: <soabn8$b4e$1@dont-email.me> <soe6rf$brb$1@dont-email.me>
<sofg1s.13g.1@stefan.msgid.phost.de> <sog15s$uj0$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 4 Dec 2021 16:41:42 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="9a2c57cfb0ac364cca5cc6a9fa08c7a9";
logging-data="20595"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19ifqbjGZ0gPT0VLzcFo/vhg54mUGPIorI="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
Thunderbird/78.11.0
Cancel-Lock: sha1:SGvTCGUB03yB8V/sjuE08nJCNUU=
In-Reply-To: <sog15s$uj0$1@dont-email.me>
Content-Language: en-GB
 by: David Brown - Sat, 4 Dec 2021 16:41 UTC

On 04/12/2021 16:23, pozz wrote:
> Il 04/12/2021 10:31, Stefan Reuther ha scritto:

>> I'm not sure what you need order-only dependencies for. For a project
>> like this, with GNU make I'd most likely just do something like
>>
>>      OBJ = file1.o module1/file2.o module2/file3.o
>>      main: $(OBJ)
>>           $(CC) -o $@ $(OBJ)
>>      $(OBJ): %.o: $(SRCDIR)/%.c
>>           mkdir $(dir $@)
>>           $(CC) $(CFLAGS) -c $< -o $@
>

I almost never use makefiles that have the object files (or source
files, or other files) specified explicitly.

CFILES := $(foreach dir,$(ALLSOURCEDIRS),$(wildcard $(dir)/*.c))
CXXFILES := $(foreach dir,$(ALLSOURCEDIRS),$(wildcard $(dir)/*.cpp))

OBJSsrc := $(CFILES:.c=.o) $(CXXFILES:.cpp=.o)
OBJS := $(addprefix $(OBJDIR), $(patsubst ../%,%,$(OBJSsrc)))

If there is a C or C++ file in the source tree, it is part of the
project. Combined with automatic dependency resolution (for which I use
gcc with -M* flags) this means that the make for a project adapts
automatically whenever you add new source or header files, or change the
ones that are there.

> This is suboptimal. Every time one object file is created (because it is
> not present or because prerequisites aren't satisfied), mkdir command is
> executed, even if $(dir $@) is already created.

Use existence-only dependencies:

target/%.o : %.c | target
$(CC) $(CFLAGS) -c $< -o $@

target :
mkdir -p target

When you have a dependency given after a |, gnu make will ensure that it
exists but does not care about its timestamp. So here it will check if
the target directory is there before creating target/%.o, and if not it
will make it. It probably doesn't matter much for directories, but it
can be useful in some cases to avoid extra work.

And use "mkdir -p" to make a directory including any other parts of the
path needed, and to avoid an error if the directory already exists.

>
> A better approach is to use a dedicated rule for directories, but it's
> very complex and tricky[1].

The reference you gave is okay too. Some aspects of advanced makefiles
/are/ complex and tricky, and can be hard to debug (look out for mixes
of spaces instead of tabs at the start of lines!) But once you've got
them in place, you can re-use them in other projects. And you can copy
examples like the reference you gave, rather than figuring it out yourself.

>
> I think your approach is better, only because is much more
> understandable, not because is more efficient.
>

My version is - IMHO - understandable /and/ efficient.

>
>>> Dependencies must be created as a side effect of compilation with
>>> esoteric -M options for gcc.
>>
>> It's not too bad with sufficiently current versions.
>>
>>      CFLAGS += -MMD -MP
>>      -include $(OBJ:.o=.d)
>
> Are you sure you don't need -MT too, to specify exactly the target rule?
>

The exact choice of -M flags depends on details of your setup. I prefer
to have the dependency creation done as a separate step from the
compilation - it's not strictly necessary, but I have found it neater.
However, I use two -MT flags per dependency file. One makes a rule for
the file.o dependency, the other is for the file.d dependency. That
way, make knows when it has to re-build the dependency file.

>
>>> Is cmake simpler to configure?
>>
>> CMake does one-configuration-per-invocation type builds like sketched
>> above, i.e. to build target1/Release and target1/Debug, you invoke CMake
>> on two different workspaces, once with -DCMAKE_BUILD_TYPE=Release and
>> once with -DCMAKE_BUILD_TYPE=Debug.
>
> Yes, I was asking if the configuration file of CMake is simpler to write
> compared to a Makefile.
>

I've only briefly looked at CMake. It always looked a bit limited to me
- sometimes I have a variety of extra programs or steps to run (like a
Python script to pre-process files and generate extra C or header files,
or extra post-processing steps). I also often need different compiler
flags for different parts of a project. Perhaps it would work for what
I need and I just haven't read enough.

>
> [1] https://ismail.badawi.io/blog/automatic-directory-creation-in-make/

Re: Makefile or IDE?

<sog674$t1m$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=759&group=comp.arch.embedded#759

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: tauno.vo...@notused.fi.invalid (Tauno Voipio)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sat, 4 Dec 2021 18:49:37 +0200
Organization: A noiseless patient Spider
Lines: 119
Message-ID: <sog674$t1m$1@dont-email.me>
References: <soabn8$b4e$1@dont-email.me> <soe6rf$brb$1@dont-email.me>
<sofg1s.13g.1@stefan.msgid.phost.de> <sog15s$uj0$1@dont-email.me>
<sog5o6$k3j$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 4 Dec 2021 16:49:40 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="9fa9bc677f8d8a89b9f1d35c1f265f31";
logging-data="29750"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18eBSYcc7Uvvm5zQnSfwaRxdpVWw92uEUY="
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0)
Gecko/20100101 Thunderbird/91.3.2
Cancel-Lock: sha1:6YqfZUBkFF6xB1tL63+VQeruM9U=
In-Reply-To: <sog5o6$k3j$1@dont-email.me>
 by: Tauno Voipio - Sat, 4 Dec 2021 16:49 UTC

On 4.12.21 18.41, David Brown wrote:
> On 04/12/2021 16:23, pozz wrote:
>> Il 04/12/2021 10:31, Stefan Reuther ha scritto:
>
>>> I'm not sure what you need order-only dependencies for. For a project
>>> like this, with GNU make I'd most likely just do something like
>>>
>>>      OBJ = file1.o module1/file2.o module2/file3.o
>>>      main: $(OBJ)
>>>           $(CC) -o $@ $(OBJ)
>>>      $(OBJ): %.o: $(SRCDIR)/%.c
>>>           mkdir $(dir $@)
>>>           $(CC) $(CFLAGS) -c $< -o $@
>>
>
> I almost never use makefiles that have the object files (or source
> files, or other files) specified explicitly.
>
> CFILES := $(foreach dir,$(ALLSOURCEDIRS),$(wildcard $(dir)/*.c))
> CXXFILES := $(foreach dir,$(ALLSOURCEDIRS),$(wildcard $(dir)/*.cpp))
>
> OBJSsrc := $(CFILES:.c=.o) $(CXXFILES:.cpp=.o)
> OBJS := $(addprefix $(OBJDIR), $(patsubst ../%,%,$(OBJSsrc)))
>
> If there is a C or C++ file in the source tree, it is part of the
> project. Combined with automatic dependency resolution (for which I use
> gcc with -M* flags) this means that the make for a project adapts
> automatically whenever you add new source or header files, or change the
> ones that are there.
>
>> This is suboptimal. Every time one object file is created (because it is
>> not present or because prerequisites aren't satisfied), mkdir command is
>> executed, even if $(dir $@) is already created.
>
> Use existence-only dependencies:
>
> target/%.o : %.c | target
> $(CC) $(CFLAGS) -c $< -o $@
>
> target :
> mkdir -p target
>
>
> When you have a dependency given after a |, gnu make will ensure that it
> exists but does not care about its timestamp. So here it will check if
> the target directory is there before creating target/%.o, and if not it
> will make it. It probably doesn't matter much for directories, but it
> can be useful in some cases to avoid extra work.
>
> And use "mkdir -p" to make a directory including any other parts of the
> path needed, and to avoid an error if the directory already exists.
>
>>
>> A better approach is to use a dedicated rule for directories, but it's
>> very complex and tricky[1].
>
> The reference you gave is okay too. Some aspects of advanced makefiles
> /are/ complex and tricky, and can be hard to debug (look out for mixes
> of spaces instead of tabs at the start of lines!) But once you've got
> them in place, you can re-use them in other projects. And you can copy
> examples like the reference you gave, rather than figuring it out yourself.
>
>>
>> I think your approach is better, only because is much more
>> understandable, not because is more efficient.
>>
>
> My version is - IMHO - understandable /and/ efficient.
>
>>
>>>> Dependencies must be created as a side effect of compilation with
>>>> esoteric -M options for gcc.
>>>
>>> It's not too bad with sufficiently current versions.
>>>
>>>      CFLAGS += -MMD -MP
>>>      -include $(OBJ:.o=.d)
>>
>> Are you sure you don't need -MT too, to specify exactly the target rule?
>>
>
> The exact choice of -M flags depends on details of your setup. I prefer
> to have the dependency creation done as a separate step from the
> compilation - it's not strictly necessary, but I have found it neater.
> However, I use two -MT flags per dependency file. One makes a rule for
> the file.o dependency, the other is for the file.d dependency. That
> way, make knows when it has to re-build the dependency file.
>
>>
>>>> Is cmake simpler to configure?
>>>
>>> CMake does one-configuration-per-invocation type builds like sketched
>>> above, i.e. to build target1/Release and target1/Debug, you invoke CMake
>>> on two different workspaces, once with -DCMAKE_BUILD_TYPE=Release and
>>> once with -DCMAKE_BUILD_TYPE=Debug.
>>
>> Yes, I was asking if the configuration file of CMake is simpler to write
>> compared to a Makefile.
>>
>
> I've only briefly looked at CMake. It always looked a bit limited to me
> - sometimes I have a variety of extra programs or steps to run (like a
> Python script to pre-process files and generate extra C or header files,
> or extra post-processing steps). I also often need different compiler
> flags for different parts of a project. Perhaps it would work for what
> I need and I just haven't read enough.
>
>>
>> [1] https://ismail.badawi.io/blog/automatic-directory-creation-in-make/

CMake is on a different level than make. CMake aims to the realm of
autoconf, automake and friends. One of the supported tail-ends for
CMake is GNU make.

--

-TV

Re: Makefile or IDE?

<sog86s$1h7$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=760&group=comp.arch.embedded#760

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: david.br...@hesbynett.no (David Brown)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sat, 4 Dec 2021 18:23:40 +0100
Organization: A noiseless patient Spider
Lines: 39
Message-ID: <sog86s$1h7$1@dont-email.me>
References: <soabn8$b4e$1@dont-email.me> <soe6rf$brb$1@dont-email.me>
<sofg1s.13g.1@stefan.msgid.phost.de> <sog15s$uj0$1@dont-email.me>
<sog5o6$k3j$1@dont-email.me> <sog674$t1m$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 4 Dec 2021 17:23:40 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="9a2c57cfb0ac364cca5cc6a9fa08c7a9";
logging-data="1575"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18dpdl036ziGrD1V5lnbY/7T3b3LWOEIec="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
Thunderbird/78.11.0
Cancel-Lock: sha1:G5ekxnGqYJelyDWgiDjioMAgUiQ=
In-Reply-To: <sog674$t1m$1@dont-email.me>
Content-Language: en-GB
 by: David Brown - Sat, 4 Dec 2021 17:23 UTC

On 04/12/2021 17:49, Tauno Voipio wrote:
> On 4.12.21 18.41, David Brown wrote:
>> On 04/12/2021 16:23, pozz wrote:
>>> Il 04/12/2021 10:31, Stefan Reuther ha scritto:

>>>>> Is cmake simpler to configure?
>>>>
>>>> CMake does one-configuration-per-invocation type builds like sketched
>>>> above, i.e. to build target1/Release and target1/Debug, you invoke
>>>> CMake
>>>> on two different workspaces, once with -DCMAKE_BUILD_TYPE=Release and
>>>> once with -DCMAKE_BUILD_TYPE=Debug.
>>>
>>> Yes, I was asking if the configuration file of CMake is simpler to write
>>> compared to a Makefile.
>>>
>>
>> I've only briefly looked at CMake.  It always looked a bit limited to me
>> - sometimes I have a variety of extra programs or steps to run (like a
>> Python script to pre-process files and generate extra C or header files,
>> or extra post-processing steps).  I also often need different compiler
>> flags for different parts of a project.  Perhaps it would work for what
>> I need and I just haven't read enough.
>>
>>>
>>> [1] https://ismail.badawi.io/blog/automatic-directory-creation-in-make/
>
>
> CMake is on a different level than make. CMake aims to the realm of
> autoconf, automake and friends. One of the supported tail-ends for
> CMake is GNU make.
>

Yes, I know. The question is, could I (or the OP, or others) use CMake
to control their builds? It doesn't really matter if the output is a
makefile, a ninja file, or whatever - it matters if it can do the job
better (for some value of "better") than a hand-written makefile. I
suspect that for projects that fit into the specific patterns it
supports, it will be a good choice - for others, it will not.

Re: Makefile or IDE?

<sogfc6$e5o$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=761&group=comp.arch.embedded#761

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: tauno.vo...@notused.fi.invalid (Tauno Voipio)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sat, 4 Dec 2021 21:25:54 +0200
Organization: A noiseless patient Spider
Lines: 55
Message-ID: <sogfc6$e5o$1@dont-email.me>
References: <soabn8$b4e$1@dont-email.me> <soe6rf$brb$1@dont-email.me>
<sofg1s.13g.1@stefan.msgid.phost.de> <sog15s$uj0$1@dont-email.me>
<sog5o6$k3j$1@dont-email.me> <sog674$t1m$1@dont-email.me>
<sog86s$1h7$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 4 Dec 2021 19:25:58 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="9fa9bc677f8d8a89b9f1d35c1f265f31";
logging-data="14520"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+gGIZCIuulaXK6mHdKBeQf4iadeiYB9mg="
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0)
Gecko/20100101 Thunderbird/91.3.2
Cancel-Lock: sha1:lavFPsjRK73jsDyXySMuFnenkDc=
In-Reply-To: <sog86s$1h7$1@dont-email.me>
 by: Tauno Voipio - Sat, 4 Dec 2021 19:25 UTC

On 4.12.21 19.23, David Brown wrote:
> On 04/12/2021 17:49, Tauno Voipio wrote:
>> On 4.12.21 18.41, David Brown wrote:
>>> On 04/12/2021 16:23, pozz wrote:
>>>> Il 04/12/2021 10:31, Stefan Reuther ha scritto:
>
>>>>>> Is cmake simpler to configure?
>>>>>
>>>>> CMake does one-configuration-per-invocation type builds like sketched
>>>>> above, i.e. to build target1/Release and target1/Debug, you invoke
>>>>> CMake
>>>>> on two different workspaces, once with -DCMAKE_BUILD_TYPE=Release and
>>>>> once with -DCMAKE_BUILD_TYPE=Debug.
>>>>
>>>> Yes, I was asking if the configuration file of CMake is simpler to write
>>>> compared to a Makefile.
>>>>
>>>
>>> I've only briefly looked at CMake.  It always looked a bit limited to me
>>> - sometimes I have a variety of extra programs or steps to run (like a
>>> Python script to pre-process files and generate extra C or header files,
>>> or extra post-processing steps).  I also often need different compiler
>>> flags for different parts of a project.  Perhaps it would work for what
>>> I need and I just haven't read enough.
>>>
>>>>
>>>> [1] https://ismail.badawi.io/blog/automatic-directory-creation-in-make/
>>
>>
>> CMake is on a different level than make. CMake aims to the realm of
>> autoconf, automake and friends. One of the supported tail-ends for
>> CMake is GNU make.
>>
>
> Yes, I know. The question is, could I (or the OP, or others) use CMake
> to control their builds? It doesn't really matter if the output is a
> makefile, a ninja file, or whatever - it matters if it can do the job
> better (for some value of "better") than a hand-written makefile. I
> suspect that for projects that fit into the specific patterns it
> supports, it will be a good choice - for others, it will not.

I tried to use it for some raw-iron embedded programs. IMHO, CMake
belongs there more to the problem than solution set. CMake is aimed
to produce code for the system it is run on, cross-compilation creates
problems.

I succeeded to use CMake for cross-compiling on PC Linux for Raspi OS
Linux, but the compiler identification for a raw metal target was not
happy when the trial compilation could not link a run file using the
Linux run file creation model.

--

-TV

Re: Makefile or IDE?

<i4gnqgtcce28gtjk7tkpja461utmp6g2hv@4ax.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=762&group=comp.arch.embedded#762

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: gneun...@comcast.net (George Neuner)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sat, 04 Dec 2021 14:37:12 -0500
Organization: A noiseless patient Spider
Lines: 17
Message-ID: <i4gnqgtcce28gtjk7tkpja461utmp6g2hv@4ax.com>
References: <soabn8$b4e$1@dont-email.me> <sob040.4rs.1@stefan.msgid.phost.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Injection-Info: reader02.eternal-september.org; posting-host="d04e2f73855676aeba260f6445184e58";
logging-data="27769"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/x7ZoUXyjivxvzx9arSnQodIRTgOMZ87E="
User-Agent: ForteAgent/8.00.32.1272
Cancel-Lock: sha1:wuhzxmBrhyQ3BHHvjogSTTK/6zA=
 by: George Neuner - Sat, 4 Dec 2021 19:37 UTC

On Thu, 2 Dec 2021 17:34:55 +0100, Stefan Reuther
<stefan.news@arcor.de> wrote:

>CMake seems to be a popular (the most popular?) choice for that language
>on top, although reasons why it sucks are abundant; the most prominent
>for me being that the Makefiles it generates violate pretty much every
>best practice and therefore are slow. Other than that, it can build
>embedded software of course.

CMake is popular because it is cross-platformm: with a bit of care,
its makefiles (conditionally) can run on any platform that supports
CMake.

Cross-platform can be a dealbreaker in the desktop/server world.

YMMV,
George

Re: Makefile or IDE?

<7ugnqgpgu34hb8gvhsglse4e49dj5anhjd@4ax.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=763&group=comp.arch.embedded#763

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: gneun...@comcast.net (George Neuner)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sat, 04 Dec 2021 14:53:48 -0500
Organization: A noiseless patient Spider
Lines: 27
Message-ID: <7ugnqgpgu34hb8gvhsglse4e49dj5anhjd@4ax.com>
References: <soabn8$b4e$1@dont-email.me> <cPf*AdQAy@news.chiark.greenend.org.uk> <soe26m$78i$1@reader1.panix.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Injection-Info: reader02.eternal-september.org; posting-host="d04e2f73855676aeba260f6445184e58";
logging-data="14469"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+6vKB31cEMxyaQGHxFCBqoJu49tal9wk0="
User-Agent: ForteAgent/8.00.32.1272
Cancel-Lock: sha1:3OpUDe2HnjLnSZMNd85jXPJo2YA=
 by: George Neuner - Sat, 4 Dec 2021 19:53 UTC

On Fri, 3 Dec 2021 21:28:54 -0000 (UTC), Grant Edwards
<invalid@invalid.invalid> wrote:

>On 2021-12-03, Theo <theom+news@chiark.greenend.org.uk> wrote:
>
>> [*] Powershell and WSL have been trying to improve this. But I've not seen
>> any build flows that make much use of them, beyond simply taking Linux flows
>> and running them in WSL.
>
>I always had good luck using Cygwin and gnu "make" on Windows to run
>various Win32 .exe command line compilers (e.g. IAR). I (thankfully)
>haven't needed to do that for several years now...

The problem with Cygwin is it doesn't play well with native Windows
GCC (MingW et al).

Cygwin compilers produce executables that depend on the /enormous/
Cygwin library. You can statically link the library or ship the DLL
(or an installer that downloads it) with your program, but by doing so
your programs falls under GPL - the terms of which are not acceptable
to some developers.

And the Cygwin environment is ... less than stable. Any update to
Windows can break it.

YMMV,
George

Re: Makefile or IDE?

<soglu6$bm9$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=764&group=comp.arch.embedded#764

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: david.br...@hesbynett.no (David Brown)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sat, 4 Dec 2021 22:17:57 +0100
Organization: A noiseless patient Spider
Lines: 61
Message-ID: <soglu6$bm9$1@dont-email.me>
References: <soabn8$b4e$1@dont-email.me>
<cPf*AdQAy@news.chiark.greenend.org.uk> <soe26m$78i$1@reader1.panix.com>
<7ugnqgpgu34hb8gvhsglse4e49dj5anhjd@4ax.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Injection-Date: Sat, 4 Dec 2021 21:17:58 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="9a2c57cfb0ac364cca5cc6a9fa08c7a9";
logging-data="11977"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/UB5aTOIDz8ppJtlBjaZllsMTqsaHlsEg="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
Thunderbird/78.11.0
Cancel-Lock: sha1:wG/zT2vSBG90OedpsR48ReevRjA=
In-Reply-To: <7ugnqgpgu34hb8gvhsglse4e49dj5anhjd@4ax.com>
Content-Language: en-GB
 by: David Brown - Sat, 4 Dec 2021 21:17 UTC

On 04/12/2021 20:53, George Neuner wrote:
> On Fri, 3 Dec 2021 21:28:54 -0000 (UTC), Grant Edwards
> <invalid@invalid.invalid> wrote:
>
>> On 2021-12-03, Theo <theom+news@chiark.greenend.org.uk> wrote:
>>
>>> [*] Powershell and WSL have been trying to improve this. But I've not seen
>>> any build flows that make much use of them, beyond simply taking Linux flows
>>> and running them in WSL.
>>
>> I always had good luck using Cygwin and gnu "make" on Windows to run
>> various Win32 .exe command line compilers (e.g. IAR). I (thankfully)
>> haven't needed to do that for several years now...
>
> The problem with Cygwin is it doesn't play well with native Windows
> GCC (MingW et al).
>
> Cygwin compilers produce executables that depend on the /enormous/
> Cygwin library. You can statically link the library or ship the DLL
> (or an installer that downloads it) with your program, but by doing so
> your programs falls under GPL - the terms of which are not acceptable
> to some developers.
>
> And the Cygwin environment is ... less than stable. Any update to
> Windows can break it.
>

I concur with that. Cygwin made sense long ago, but for the past couple
of decades the mingw-based alternatives have been more appropriate for
most uses of *nix stuff on Windows. In particular, Cygwin is a thick
compatibility layer that has its own filesystem, process management, and
other features to fill in the gaps where Windows doesn't fulfil the
POSIX standards (or does so in a way that plays badly with the rest of
Windows). Very often, the changes needed in open-source or
*nix-heritage software to make them more Windows-friendly are small. A
common example is changing old-style "fork + exec" paths to "spawn"
calls which are more modern and more efficient (even on *nix). With
such small changes, programs can be compiled on thin compatibility
layers like mingw instead, with the result being a lot faster, smoother,
better integrated with Windows, and without that special tier of
DLL-hell reserved for cygwin1.dll and its friends.

So the earliest gcc versions I built and used on Windows, gcc 2.95 for
the m68k IIRC, had to be built with Cygwin. By the time I was using gcc
4+, perhaps earlier, it was all mingw-based and I have rarely looked at
Cygwin since.

I strongly recommend msys2, with mingw-64, as the way to handle *nix
programs on Windows. You can install and use as much as you want - it's
fine to take most simple programs and use them independently on other
Windows systems with no or a minimum of dll's. (If the program relies
on many external files, it will need the msys2 file tree.) You can use
msys2 bash if you like, or not if you don't like. The mingw-64 gcc has
a modern, complete and efficient C library instead of the horrendous
MSVCCRT dll. Most Windows ports of *nix software is made with either
older mingw or newer mingw-64.

I can understand using Cygwin simply because you've always used Cygwin,
or if you really need fuller POSIX compatibility. But these days, WSL
is probably a better option if that's what you need.

Re: Makefile or IDE?

<sogm39$bm9$2@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=765&group=comp.arch.embedded#765

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: david.br...@hesbynett.no (David Brown)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sat, 4 Dec 2021 22:20:41 +0100
Organization: A noiseless patient Spider
Lines: 65
Message-ID: <sogm39$bm9$2@dont-email.me>
References: <soabn8$b4e$1@dont-email.me> <soe6rf$brb$1@dont-email.me>
<sofg1s.13g.1@stefan.msgid.phost.de> <sog15s$uj0$1@dont-email.me>
<sog5o6$k3j$1@dont-email.me> <sog674$t1m$1@dont-email.me>
<sog86s$1h7$1@dont-email.me> <sogfc6$e5o$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 4 Dec 2021 21:20:41 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="9a2c57cfb0ac364cca5cc6a9fa08c7a9";
logging-data="11977"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/O7a/UZzpaRtV6drkyRPbTA4kzWpxCFJ0="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
Thunderbird/78.11.0
Cancel-Lock: sha1:tN95PGwo1oeOxFJlO7JwqeQR36A=
In-Reply-To: <sogfc6$e5o$1@dont-email.me>
Content-Language: en-GB
 by: David Brown - Sat, 4 Dec 2021 21:20 UTC

On 04/12/2021 20:25, Tauno Voipio wrote:
> On 4.12.21 19.23, David Brown wrote:
>> On 04/12/2021 17:49, Tauno Voipio wrote:
>>> On 4.12.21 18.41, David Brown wrote:
>>>> On 04/12/2021 16:23, pozz wrote:
>>>>> Il 04/12/2021 10:31, Stefan Reuther ha scritto:
>>
>>>>>>> Is cmake simpler to configure?
>>>>>>
>>>>>> CMake does one-configuration-per-invocation type builds like sketched
>>>>>> above, i.e. to build target1/Release and target1/Debug, you invoke
>>>>>> CMake
>>>>>> on two different workspaces, once with -DCMAKE_BUILD_TYPE=Release and
>>>>>> once with -DCMAKE_BUILD_TYPE=Debug.
>>>>>
>>>>> Yes, I was asking if the configuration file of CMake is simpler to
>>>>> write
>>>>> compared to a Makefile.
>>>>>
>>>>
>>>> I've only briefly looked at CMake.  It always looked a bit limited
>>>> to me
>>>> - sometimes I have a variety of extra programs or steps to run (like a
>>>> Python script to pre-process files and generate extra C or header
>>>> files,
>>>> or extra post-processing steps).  I also often need different compiler
>>>> flags for different parts of a project.  Perhaps it would work for what
>>>> I need and I just haven't read enough.
>>>>
>>>>>
>>>>> [1]
>>>>> https://ismail.badawi.io/blog/automatic-directory-creation-in-make/
>>>
>>>
>>> CMake is on a different level than make. CMake aims to the realm of
>>> autoconf, automake and friends. One of the supported tail-ends for
>>> CMake is GNU make.
>>>
>>
>> Yes, I know.  The question is, could I (or the OP, or others) use CMake
>> to control their builds?  It doesn't really matter if the output is a
>> makefile, a ninja file, or whatever - it matters if it can do the job
>> better (for some value of "better") than a hand-written makefile.  I
>> suspect that for projects that fit into the specific patterns it
>> supports, it will be a good choice - for others, it will not.
>
>
> I tried to use it for some raw-iron embedded programs. IMHO, CMake
> belongs there more to the problem than solution set. CMake is aimed
> to produce code for the system it is run on, cross-compilation creates
> problems.
>
> I succeeded to use CMake for cross-compiling on PC Linux for Raspi OS
> Linux, but the compiler identification for a raw metal target was not
> happy when the trial compilation could not link a run file using the
> Linux run file creation model.
>

That is kind of what I thought. CMake sounds like a good solution if
you want to make a program that compiles on Linux with native gcc, and
also with MSVC on Windows, and perhaps a few other native build
combinations. But it is not really suited for microcontroller builds as
far as I can see. (Again, I haven't tried it much, and don't want to do
it injustice by being too categorical.)

Re: Makefile or IDE?

<soi6p9.12g.1@stefan.msgid.phost.de>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=766&group=comp.arch.embedded#766

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: stefan.n...@arcor.de (Stefan Reuther)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sun, 5 Dec 2021 11:11:36 +0100
Lines: 43
Message-ID: <soi6p9.12g.1@stefan.msgid.phost.de>
References: <soabn8$b4e$1@dont-email.me> <soe6rf$brb$1@dont-email.me>
<sofg1s.13g.1@stefan.msgid.phost.de> <sog15s$uj0$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Trace: individual.net n94onVe3UeYgZ32GCY9eug2gs7vjRghm57zFju6QiqlOIbk1Yb
Cancel-Lock: sha1:bUKhgApTylY6eliBfpm2kjQYgm8=
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101
Thunderbird/68.12.1 Hamster/2.1.0.1538
In-Reply-To: <sog15s$uj0$1@dont-email.me>
 by: Stefan Reuther - Sun, 5 Dec 2021 10:11 UTC

Am 04.12.2021 um 16:23 schrieb pozz:
> Il 04/12/2021 10:31, Stefan Reuther ha scritto:
>> I'm not sure what you need order-only dependencies for. For a project
>> like this, with GNU make I'd most likely just do something like
>>
>>      OBJ = file1.o module1/file2.o module2/file3.o
>>      main: $(OBJ)
>>           $(CC) -o $@ $(OBJ)
>>      $(OBJ): %.o: $(SRCDIR)/%.c
>>           mkdir $(dir $@)
>>           $(CC) $(CFLAGS) -c $< -o $@
>
> This is suboptimal. Every time one object file is created (because it is
> not present or because prerequisites aren't satisfied), mkdir command is
> executed, even if $(dir $@) is already created.

(did I really forget the '-p'?)

The idea was that creating a directory and checking for its existence
both require a path lookup, which is the expensive operation here.

When generating the Makefile with a script, it's easy to sneak a 100%
matching directory creation dependency into any rule that needs it

foo/bar.o: bar.c foo/.mark
...
foo/.mark:
mkdir foo

>>> Dependencies must be created as a side effect of compilation with
>>> esoteric -M options for gcc.
>>
>> It's not too bad with sufficiently current versions.
>>
>>      CFLAGS += -MMD -MP
>>      -include $(OBJ:.o=.d)
>
> Are you sure you don't need -MT too, to specify exactly the target rule?

Documentation says you are right, but '-MMD -MP' works fine for me so far...

Stefan

Re: Makefile or IDE?

<soi67k.1pc.1@stefan.msgid.phost.de>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=767&group=comp.arch.embedded#767

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: stefan.n...@arcor.de (Stefan Reuther)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sun, 5 Dec 2021 11:02:12 +0100
Lines: 38
Message-ID: <soi67k.1pc.1@stefan.msgid.phost.de>
References: <soabn8$b4e$1@dont-email.me>
<cPf*AdQAy@news.chiark.greenend.org.uk> <soe26m$78i$1@reader1.panix.com>
<7ugnqgpgu34hb8gvhsglse4e49dj5anhjd@4ax.com> <soglu6$bm9$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
X-Trace: individual.net iqDFVg05JpTg0cDvrW8o/QV/zYkWCJqgRtqzvJ0FpOpMQUg8Vz
Cancel-Lock: sha1:mTG8AGBYoFqhxV501z0YbcGp9fc=
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101
Thunderbird/68.12.1 Hamster/2.1.0.1538
In-Reply-To: <soglu6$bm9$1@dont-email.me>
 by: Stefan Reuther - Sun, 5 Dec 2021 10:02 UTC

Am 04.12.2021 um 22:17 schrieb David Brown:
> On 04/12/2021 20:53, George Neuner wrote:
>> On Fri, 3 Dec 2021 21:28:54 -0000 (UTC), Grant Edwards
>>> I always had good luck using Cygwin and gnu "make" on Windows to run
>>> various Win32 .exe command line compilers (e.g. IAR). I (thankfully)
>>> haven't needed to do that for several years now...
>>
>> The problem with Cygwin is it doesn't play well with native Windows
>> GCC (MingW et al).
[...]
> I concur with that. Cygwin made sense long ago, but for the past couple
> of decades the mingw-based alternatives have been more appropriate for
> most uses of *nix stuff on Windows. In particular, Cygwin is a thick
> compatibility layer that has its own filesystem, process management, and
> other features to fill in the gaps where Windows doesn't fulfil the
> POSIX standards (or does so in a way that plays badly with the rest of
> Windows).

The problem is that both projects, Cygwin and MinGW/MSYS, provide much
more than just a compiler, and in an incompatible way, which is probably
incompatible with what your toolchain does, and incompatible with what
Visual Studio does.

"-Ic:\test" specifies one path name for Windows, but probably two for a
toolchain with Unix heritage, where ":" is the separator, not a drive
letter. Cygwin wants "-I/cygdrive/c" instead, (some versions of) MinGW
want "-I/c". That, on the other hand, might be an option "-I" followed
by an option "/c" for a toolchain with Windows heritage.

The problem domain is complex, therefore solutions need to be complex.

That aside, I found staying within one universe ("use all from Cygwin",
"use all from MinGW") to work pretty well; when having to call into
another universe (e.g. native Win32), be careful to not use, for
example, any absolute paths.

Stefan

Re: Makefile or IDE?

<soiai4$jsa$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=768&group=comp.arch.embedded#768

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: david.br...@hesbynett.no (David Brown)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sun, 5 Dec 2021 13:16:03 +0100
Organization: A noiseless patient Spider
Lines: 66
Message-ID: <soiai4$jsa$1@dont-email.me>
References: <soabn8$b4e$1@dont-email.me>
<cPf*AdQAy@news.chiark.greenend.org.uk> <soe26m$78i$1@reader1.panix.com>
<7ugnqgpgu34hb8gvhsglse4e49dj5anhjd@4ax.com> <soglu6$bm9$1@dont-email.me>
<soi67k.1pc.1@stefan.msgid.phost.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Injection-Date: Sun, 5 Dec 2021 12:16:04 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="8a03c284264655aa437416ac515cbc46";
logging-data="20362"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19o7lopwVjAqsCUrRsM1sj4Iwsfzu2Gfms="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
Thunderbird/78.11.0
Cancel-Lock: sha1:acoRD33aoMuVZgPTDFLa2gEVcsE=
In-Reply-To: <soi67k.1pc.1@stefan.msgid.phost.de>
Content-Language: en-GB
 by: David Brown - Sun, 5 Dec 2021 12:16 UTC

On 05/12/2021 11:02, Stefan Reuther wrote:
> Am 04.12.2021 um 22:17 schrieb David Brown:
>> On 04/12/2021 20:53, George Neuner wrote:
>>> On Fri, 3 Dec 2021 21:28:54 -0000 (UTC), Grant Edwards
>>>> I always had good luck using Cygwin and gnu "make" on Windows to run
>>>> various Win32 .exe command line compilers (e.g. IAR). I (thankfully)
>>>> haven't needed to do that for several years now...
>>>
>>> The problem with Cygwin is it doesn't play well with native Windows
>>> GCC (MingW et al).
> [...]
>> I concur with that. Cygwin made sense long ago, but for the past couple
>> of decades the mingw-based alternatives have been more appropriate for
>> most uses of *nix stuff on Windows. In particular, Cygwin is a thick
>> compatibility layer that has its own filesystem, process management, and
>> other features to fill in the gaps where Windows doesn't fulfil the
>> POSIX standards (or does so in a way that plays badly with the rest of
>> Windows).
>
> The problem is that both projects, Cygwin and MinGW/MSYS, provide much
> more than just a compiler, and in an incompatible way, which is probably
> incompatible with what your toolchain does, and incompatible with what
> Visual Studio does.

Neither Cygwin nor msys are compilers or toolchains. Nor is MSVS, for
that matter. That would only be a problem if you misunderstood what
they are.

>
> "-Ic:\test" specifies one path name for Windows, but probably two for a
> toolchain with Unix heritage, where ":" is the separator, not a drive
> letter. Cygwin wants "-I/cygdrive/c" instead, (some versions of) MinGW
> want "-I/c". That, on the other hand, might be an option "-I" followed
> by an option "/c" for a toolchain with Windows heritage.
>

Drive letters on Windows have always been a PITA. Usually, IME, it is
not a big issue for compilation - most of your include directories will
be on the same drive you are working in (with "system" includes already
handled by the compiler configuration). Use a makefile, make the base
part a variable, then at most you only have to change one part. It's a
good idea anyway to have things like base paths to includes as a
variable in the makefile.

One of the differences between msys and cygwin is the way they handle
paths - msys has a method that is simpler and closer to Windows, while
cygwin is a bit more "alien" but supports more POSIX features (like
links). In practice, with programs compiled for the "mingw" targets you
can usually use Windows names and paths without further ado. On my
Windows systems, I put msys2's "/usr/bin" directory on my normal PATH,
and from the standard Windows command prompt I happily use make, grep,
less, cp, ssh, and other *nix tools without problems or special
consideration.

> The problem domain is complex, therefore solutions need to be complex.
>
> That aside, I found staying within one universe ("use all from Cygwin",
> "use all from MinGW") to work pretty well; when having to call into
> another universe (e.g. native Win32), be careful to not use, for
> example, any absolute paths.
>
>
> Stefan
>

Re: Makefile or IDE?

<soiasv$q97$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=769&group=comp.arch.embedded#769

  copy link   Newsgroups: comp.arch.embedded
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: david.br...@hesbynett.no (David Brown)
Newsgroups: comp.arch.embedded
Subject: Re: Makefile or IDE?
Date: Sun, 5 Dec 2021 13:21:50 +0100
Organization: A noiseless patient Spider
Lines: 64
Message-ID: <soiasv$q97$1@dont-email.me>
References: <soabn8$b4e$1@dont-email.me> <soe6rf$brb$1@dont-email.me>
<sofg1s.13g.1@stefan.msgid.phost.de> <sog15s$uj0$1@dont-email.me>
<soi6p9.12g.1@stefan.msgid.phost.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Injection-Date: Sun, 5 Dec 2021 12:21:51 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="8a03c284264655aa437416ac515cbc46";
logging-data="26919"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/ehaToGSqKyYoyqVwNLbBTond7mU45nlM="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
Thunderbird/78.11.0
Cancel-Lock: sha1:+jJk5KZMC7PW0VOM+Tk59U6kjDU=
In-Reply-To: <soi6p9.12g.1@stefan.msgid.phost.de>
Content-Language: en-GB
 by: David Brown - Sun, 5 Dec 2021 12:21 UTC

On 05/12/2021 11:11, Stefan Reuther wrote:
> Am 04.12.2021 um 16:23 schrieb pozz:
>> Il 04/12/2021 10:31, Stefan Reuther ha scritto:
>>> I'm not sure what you need order-only dependencies for. For a project
>>> like this, with GNU make I'd most likely just do something like
>>>
>>>      OBJ = file1.o module1/file2.o module2/file3.o
>>>      main: $(OBJ)
>>>           $(CC) -o $@ $(OBJ)
>>>      $(OBJ): %.o: $(SRCDIR)/%.c
>>>           mkdir $(dir $@)
>>>           $(CC) $(CFLAGS) -c $< -o $@
>>
>> This is suboptimal. Every time one object file is created (because it is
>> not present or because prerequisites aren't satisfied), mkdir command is
>> executed, even if $(dir $@) is already created.
>
> (did I really forget the '-p'?)
>
> The idea was that creating a directory and checking for its existence
> both require a path lookup, which is the expensive operation here.
>

Checking for the path is not expensive - it is already necessary to have
the path details read from the filesystem (and therefore cached, even on
Windows) because you want to put a file in it. So it is free. "mkdir
-p" is also very cheap - it only needs to do something if the path does
not exist. (Of course, on Windows starting any process takes time and
resources an order of magnitude or more greater than on *nix.) It is
always nice to avoid unnecessary effort, as even small inefficiencies
add up if there are enough of them. But there's no need to worry unduly
about the small things.

> When generating the Makefile with a script, it's easy to sneak a 100%
> matching directory creation dependency into any rule that needs it
>
> foo/bar.o: bar.c foo/.mark
> ...
> foo/.mark:
> mkdir foo
>

And it's easy to forget the "touch foo/.mark" command to make that work!

But that is completely unnecessary - make is perfectly capable of
working with a directory as a dependency and target (especially as an
order-only dependency).

>>>> Dependencies must be created as a side effect of compilation with
>>>> esoteric -M options for gcc.
>>>
>>> It's not too bad with sufficiently current versions.
>>>
>>>      CFLAGS += -MMD -MP
>>>      -include $(OBJ:.o=.d)
>>
>> Are you sure you don't need -MT too, to specify exactly the target rule?
>
> Documentation says you are right, but '-MMD -MP' works fine for me so far...
>
>
> Stefan
>

Pages:12
server_pubkey.txt

rocksolid light 0.9.81
clearnet tor