Deutsch   English   Français   Italiano  
<vrchj2$35fbp$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: David Brown <david.brown@hesbynett.no>
Newsgroups: comp.arch.embedded
Subject: Re: 32 bits time_t and Y2038 issue
Date: Tue, 18 Mar 2025 20:29:38 +0100
Organization: A noiseless patient Spider
Lines: 145
Message-ID: <vrchj2$35fbp$1@dont-email.me>
References: <vqpkf9$1sbsa$1@dont-email.me> <vqpoi3$226ih$1@dont-email.me>
 <slrnvtbaot.sal.news-1513678000@a-tuin.ms.intern>
 <vrbado$2133a$1@dont-email.me> <vrbi79$2a30t$1@dont-email.me>
 <vrc74l$2133a$2@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Tue, 18 Mar 2025 20:29:39 +0100 (CET)
Injection-Info: dont-email.me; posting-host="cb24ce54d7e2437a3053ee939238c262";
	logging-data="3325305"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19xlT+th1OjC4RdIeBpNIL2mgii2fj5hBs="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:CNJ3fvsb2yQQj//T7iE9uskRl9A=
Content-Language: en-GB
In-Reply-To: <vrc74l$2133a$2@dont-email.me>
Bytes: 8037

On 18/03/2025 17:31, pozz wrote:
> Il 18/03/2025 11:34, David Brown ha scritto:
>> On 18/03/2025 09:21, pozz wrote:
>>> Il 15/03/2025 17:30, Michael Schwingen ha scritto:
>>>> On 2025-03-11, David Brown <david.brown@hesbynett.no> wrote:
>>>>> package as-is.  For anything other than a quick demo, my preferred 
>>>>> setup
>>>>> is using makefiles for the build along with an ARM gcc toolchain.  
>>>>> That
>>>>> way I can always build my software, from any system, and archive the
>>>>> toolchain.  (One day, I will also try using clang with these packages,
>>>>> but I haven't done so yet.)
>>>>
>>>> Same here.  I just switched to ARM gcc + picolibc for all my ARM 
>>>> projects -
>>>> this required some changes in the way my makefiles generate linker 
>>>> scripts
>>>> and startup code, and now I am quite happy with that setup.
>>>
>>> One day or another I will try to move from my actual build system 
>>> (that depends on silicon vendor IDE, libraries, middleware, drivers, 
>>> and so on) to a generic makefile and generic toolchain.
>>>
>>> Sincerely I tried in the past with some issues. First of all, I use a 
>>> Windows machine for development and writing makefiles that work on 
>>> Windows is not simple. Maybe next time I will try with WSL, writing 
>>> makefiles that work directly in Unix.
>>
>> Install msys2 (and the mingw-64 version of gcc, if you want a native 
>> compiler too).  Make sure the relevant "bin" directory is on your 
>> path. Then gnu make will work perfectly, along with all the little 
>> *nix utilities such as touch, cp, mv, sed, etc., that makefiles 
>> sometimes use.
> 
> Do you run <msys>\usr\bin\make.exe directly from a cmd.exe shell? Or do 
> you open a msys specific shell?
> 

Either works fine.

So does running "make" from whatever IDE, editor or other tool you want 
to use.

> 
>> The only time I have seen problems with makefiles on Windows is when 
>> using ancient partial make implementations, such as from Borland, 
>> along with more advanced modern makefiles, or when someone mistakenly 
>> uses MS's not-make "nmake" program instead of "make".
>>
>> Of course your builds will be slower on Windows than on Linux, since 
>> Windows is slow to start programs, slow to access files, and poor at 
>> doing it all in parallel, but there is nothing hindering makefiles in 
>> Windows.  My builds regularly work identically under Linux and 
>> Windows, with the same makefiles.
> 
> I tried to use make for Windows some time ago, but it was a mess. Maybe 
> msys2 system is much more straightforward.
> 

I have been using "make" on DOS, 16-bit Windows, OS/2, Windows of many 
flavours, and Linux of all sorts for several decades.  I really can't 
understand why some people feel it is difficult.  (Older makes on DOS 
and Windows were more limited in their features, but worked well enough.)

These days I happily use it on Windows with recursive make (done 
/carefully/, as all recursive makes should be), automatic dependency 
generation, multiple makefiles, automatic file discovery, parallel 
builds, host-specific code (for things like the toolchain installation 
directory), and all sorts of other bits and pieces.

>>> Another problem that I see is the complexity of actual projects: 
>>> TCP/IP stack, cripto libraries, drivers, RTOS, and so on. Silicon 
>>> vendors usually give you several example projects that just works 
>>> with one click, using their IDE, libraries, debuggers, and so on. 
>>> Moving from this complex build system to custom makefiles and 
>>> toolchain isn't so simple.
>>
>> That's why you still have a job.  Putting together embedded systems is 
>> not like making a Lego kit.  Running a pre-made demo can be easy - 
>> merging the right bits of different demos, samples and libraries into 
>> complete systems is hard work.  It is not easy whether you use an IDE 
>> for project and build management, or by manual makefiles.  Some 
>> aspects may be easier with one tool, other aspects will be harder.
> 
> You're right.
> 
> 
>>> Suppose you make the job to "transform" the example project into a 
>>> makefile. You start working with your preferred IDE/text 
>>> editor/toolchain, you are happy.
>>> After some months the requirements change and you need to add a 
>>> driver for a new peripheral or a complex library. You know there are 
>>> ready-to-use example projects in the original IDE from silicon vendor 
>>> that use exactly what you need (mbedtls, DMA, ADC...), but you can't 
>>> use them because you changed your build system.
>>
>> Find the files you need from the SDK or libraries, copy them into your 
>> own project directories (keep them organised sensibly).
>>
>> A good makefile picks up the new files automatically and handles all 
>> the dependencies, so often all you need is a new "make -j".  But you 
>> might have to set up include directories, or even particular flags or 
>> settings for different files. >
>>> Another problem is debugging: launch a debug sessions that means 
>>> download the binary through a USB debugger/probe and SWD port, add 
>>> some breakpoints, see the actual values of some variables and so on. 
>>> All this works very well without big issues if using original IDE. 
>>> Are you able to configure *your* custom development system to launch 
>>> debug sessions?
>>
>> Build your elf file with debugging information, open the elf file in 
>> the debugger.
> 
> What do you mean with "open the elf file in the debugger"?
> 

A generated elf file contains all the debug information, including 
symbol maps and pointers to source code, as well as the binary. 
Debuggers work with elf files - whether the debugger is included in an 
IDE or is stand-alone.

> 
>> You probably have a bit of setup to specify things like the exact 
>> microcontroller target, but mostly it works fine.
>>
>>> Eventually another question. Silicon vendors usually provide custom 
>>> toolchains that often are a customized version of arm-gcc toolchian 
>>> (yes, here I'm talking about Cortex-M MCUs only, otherwise it would 
>>> be much more complex).
>>> What happens if I move to the generic arm-gcc?
>>>
>>
>> This has already been covered.  Most vendors now use standard 
>> toolchain builds from ARM.
>>
>> What happens if the vendor has their own customized tool and you 
>> switch to a generic ARM tool depends on the customization and the tool 
>> versions.  Usually it means you get a new toolchain with better 
>> warnings, better optimisation, and newer language standard support.  
>> But it might also mean vendor-supplied code with bugs no longer works 
>> as it did.  (You don't have any bugs in your own code, I presume :-) )
> 
> :-)
>