Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.arch.embedded > #28363

Re: Makefile or not?

From David Brown <david.brown@hesbynett.no>
Newsgroups comp.arch.embedded
Subject Re: Makefile or not?
Date 2018-12-03 12:57 +0100
Organization A noiseless patient Spider
Message-ID <pu35mh$dfi$1@dont-email.me> (permalink)
References <pu2orv$702$1@dont-email.me> <pu2v7a$8m3$1@dont-email.me> <pu335c$u11$1@dont-email.me>

Show all headers | View raw


On 03/12/18 12:13, pozz wrote:
> Il 03/12/2018 11:06, David Brown ha scritto:
>> On 03/12/18 09:18, pozz wrote:
>>> What do you really use for embedded projects? Do you use "standard"
>>> makefile or do you rely on IDE functionalities?
>>>
>>> Nowadays every MCU manufacturers give IDE, mostly for free, usually
>>> based on Eclipse (Atmel Studio and Microchip are probably the most
>>> important exception).
>>> Anyway most of them use arm gcc as the compiler.
>>>
>>> I usually try to compile the same project for the embedded target and
>>> the development machine, so I can speed up development and debugging. I
>>> usually use the native IDE from the manufacturer of the target and
>>> Code::Blocks (with mingw) for compilation on the development machine.
>>> So I have two IDEs for a single project.
>>>
>>> I'm thinking to finally move to Makefile, however I don't know if it is
>>> a good and modern choice. Do you use better alternatives?
>>>
>>
>> I sometimes use the IDE project management to start with, or on very
>> small projects.  But for anything serious, I always use makefiles.  I
>> see it as important to separate the production build process from the
>> development - I need to know that I can always pull up the source code
>> for a project, do a "build", and get a bit-perfect binary image that is
>> exactly the same as last time.  This must work on different machines,
>> preferably different OS's, and it must work over time.  (My record is
>> rebuilding a project that was a touch over 20 years old, and getting the
>> same binary.)
>>
>> This means that the makefile specifies exactly which build toolchain
>> (compiler, linker, library, etc.) are used - and that does not change
>> during a project's lifetime, without very good reason.
>>
>> The IDE, and debugger, however, may change - there I will often use
>> newer versions with more features than the original version.  And
>> sometimes I might use a lighter editor for a small change, rather than
>> the full IDE.  So IDE version and build tools version are independent.
>>
>> With well-designed makefiles, you can have different targets for
>> different purposes.  "make bin" for making the embedded binary, "make
>> pc" for making the PC version, "make tests" for running the test code on
>> the pc, and so on.
> 
> Fortunately modern IDEs separate well the toolchain from the IDE itself.
> Most manufacturers let us install the toolchain as a separate setup. I
> remember some years ago the scenario was different and the compiler is
> "included" in the IDE installation.
> 

You can do that do some extent, yes - you can choose which toolchain to
use.  But your build process is still tied to the IDE - your choice of
directories, compiler flags, and so on is all handled by the IDE.  So
you still need the IDE to control the build, and different versions of
the IDE, or different IDEs, do not necessarily handle everything in the
same way.

> However the problem here isn't the compiler (toolchain) that nowadays is
> usually arm-gcc. The big issue is with libraries and includes that the
> manufacturer give you to save some time in writing drivers of peripherals.
> I have to install the full IDE and copy the interesting headers and
> libraries in my folders.

That's fine.  Copy the headers, libraries, SDK files, whatever, into
your project folder.  Then push everything to your version control
system.  Make the source code independent of the SDK, the IDE, and other
files - you have your toolchain (and you archive the zip/tarball of the
gnu-arm-embedded release) and your project folder, and that is all you
need for the build.

> 
> Another small issue is the linker script file that works like a charm in
> the IDE when you start a new project from the wizard.
> At least for me, it's very difficult to write a linker script from the
> scratch. You need to have a deeper understanding of the C libraries
> (newlib, redlib, ...) to write a correct linker script.
> My solution is to start with IDE wizard and copy the generated linker
> script in my make-based project.
> 

Again, that's fine.  IDE's and their wizards are great for getting
started.  They are just not great for long-term stability of the tools.

> 
>>> My major reason to move from IDE compilation to Makefile is the test. I
>>> would start adding unit testing to my project. I understood a good
>>> solution is to link all the object files of the production code to a
>>> static library. In this way it will be very simple to replace production
>>> code with testing (mocking) code, simple prepending the testing oject
>>> files to static library of production code during linking.
>>>
>>
>> I would not bother with that.  I would have different variations in the
>> build handled in different build tree directories.
> 
> Could you explain?
> 

You have a tree something like this:

Source tree:

project / src / main
                drivers

Build trees:

project / build / target
                  debug
                  pctest

Each build tree might have subtrees :

project / build / target / obj / main
                                 drivers
project / build / target / deps / main
                                  drivers
project / build / target / lst / main
                                 drivers

And so on.

Your build trees are independent.  So there is no mix of object files
built in the "target" directory for your final target board, or the
"debug" directory for the version with debugging code enabled, or the
version in "pctest" for the code running on the PC, or whatever other
builds you have for your project.


> 
>>> I think these type of things can be managed with Makefile instead of IDE
>>> compilation.
>>>
>>> What do you think?
>>
>> It can /all/ be managed from make.
>>
>> Also, a well-composed makefile is more efficient than an IDE project
>> manager, IME.  When you use Eclipse to do a build, it goes through each
>> file to calculate the dependencies - so that you re-compile all the
>> files that might be affected by the last changes, but not more than
>> that.  But it does this dependency calculation anew each time.  With
>> make, you can arrange to generate dependency files using gcc, and these
>> dependency files get updated only when needed.  This can save
>> significant time in a build when you have a lot of files.
> 
> Yes, this is sure!
> 

Of course, if build times are important, you drop Windows and use Linux,
and get a two to four-fold increase in build speed on similar hardware.
 And then you discover ccache on Linux and get another leap in speed.

Back to comp.arch.embedded | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Makefile or not? pozz <pozzugno@gmail.com> - 2018-12-03 09:18 +0100
  Re: Makefile or not? David Brown <david.brown@hesbynett.no> - 2018-12-03 11:06 +0100
    Re: Makefile or not? pozz <pozzugno@gmail.com> - 2018-12-03 12:13 +0100
      Re: Makefile or not? David Brown <david.brown@hesbynett.no> - 2018-12-03 12:57 +0100
        Re: Makefile or not? pozz <pozzugno@gmail.com> - 2018-12-03 23:29 +0100
    Re: Makefile or not? Grant Edwards <invalid@invalid.invalid> - 2018-12-03 15:39 +0000
      Re: Makefile or not? Theo Markettos <theom+news@chiark.greenend.org.uk> - 2018-12-03 15:49 +0000
        Re: Makefile or not? Dave Nadler <drn@nadler.com> - 2018-12-03 09:41 -0800
        Re: Makefile or not? David Brown <david.brown@hesbynett.no> - 2018-12-03 21:31 +0100
  Re: Makefile or not? Grant Edwards <invalid@invalid.invalid> - 2018-12-03 15:30 +0000
    Re: Makefile or not? DJ Delorie <dj@delorie.com> - 2018-12-03 14:05 -0500
      Re: Makefile or not? Grant Edwards <invalid@invalid.invalid> - 2018-12-03 19:36 +0000
        Re: Makefile or not? Clifford Heath <no.spam@please.net> - 2018-12-04 09:30 +1100
          Re: Makefile or not? Grant Edwards <invalid@invalid.invalid> - 2018-12-03 23:19 +0000
            Re: Makefile or not? raimond.dragomir@gmail.com - 2018-12-03 22:02 -0800
            Re: Makefile or not? David Brown <david.brown@hesbynett.no> - 2018-12-04 12:18 +0100
              Re: Makefile or not? Grant Edwards <invalid@invalid.invalid> - 2018-12-04 15:46 +0000
                Re: Makefile or not? Theo Markettos <theom+news@chiark.greenend.org.uk> - 2018-12-04 20:22 +0000
          Re: Makefile or not? Rob Gaddi <rgaddi@highlandtechnology.invalid> - 2018-12-03 15:38 -0800
        Re: Makefile or not? Phil Hobbs <pcdhSpamMeSenseless@electrooptical.net> - 2018-12-04 21:25 -0500
          Re: Makefile or not? Grant Edwards <invalid@invalid.invalid> - 2018-12-05 03:22 +0000
          Re: Makefile or not? David Brown <david.brown@hesbynett.no> - 2018-12-05 09:06 +0100
        Re: Makefile or not? George Neuner <gneuner2@comcast.net> - 2018-12-05 11:37 -0500
        Re: Makefile or not? Phil Hobbs <pcdhSpamMeSenseless@electrooptical.net> - 2018-12-05 15:37 -0500
          Re: Makefile or not? Grant Edwards <invalid@invalid.invalid> - 2018-12-05 22:34 +0000
            Re: Makefile or not? Rob Gaddi <rgaddi@highlandtechnology.invalid> - 2018-12-05 14:56 -0800
              Re: Makefile or not? Grant Edwards <invalid@invalid.invalid> - 2018-12-05 23:50 +0000
                Re: Makefile or not? Rob Gaddi <rgaddi@highlandtechnology.invalid> - 2018-12-05 16:27 -0800
                Re: Makefile or not? Rob Gaddi <rgaddi@highlandtechnology.invalid> - 2018-12-05 17:47 -0800
                Re: Makefile or not? Theo Markettos <theom+news@chiark.greenend.org.uk> - 2018-12-06 08:12 +0000
                Re: Makefile or not? Rob Gaddi <rgaddi@highlandtechnology.invalid> - 2018-12-06 10:17 -0800
                Re: Makefile or not? gtwrek@sonic.net (gtwrek) - 2018-12-06 18:35 +0000
                Re: Makefile or not? Theo Markettos <theom+news@chiark.greenend.org.uk> - 2018-12-06 18:39 +0000
            Re: Makefile or not? David Brown <david.brown@hesbynett.no> - 2018-12-06 09:22 +0100
            Re: Makefile or not? Theo Markettos <theom+news@chiark.greenend.org.uk> - 2018-12-06 18:46 +0000
              Re: Makefile or not? David Brown <david.brown@hesbynett.no> - 2018-12-06 21:51 +0100
                Re: Makefile or not? Dave Nadler <drn@nadler.com> - 2018-12-06 13:47 -0800
                Re: Makefile or not? David Brown <david.brown@hesbynett.no> - 2018-12-06 22:48 +0100
                Re: Makefile or not? Dave Nadler <drn@nadler.com> - 2018-12-06 14:01 -0800
                Re: Makefile or not? Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2018-12-07 14:54 +0200
    Re: Makefile or not? David Brown <david.brown@hesbynett.no> - 2018-12-03 21:34 +0100
  Re: Makefile or not? Phil Hobbs <pcdhSpamMeSenseless@electrooptical.net> - 2018-12-03 11:06 -0500
    Re: Makefile or not? Jacob Sparre Andersen <jacob@jacob-sparre.dk> - 2018-12-03 22:05 +0100
      Re: Makefile or not? Phil Hobbs <pcdhSpamMeSenseless@electrooptical.net> - 2018-12-04 21:19 -0500
  Re: Makefile or not? queequeg@trust.no1 (Queequeg) - 2018-12-07 13:45 +0000

csiph-web