[Scons-users] How to fix the link order of scons?

Mats Wichmann mats at wichmann.us
Fri Sep 9 09:51:23 EDT 2022


On 9/8/22 05:55, Lan Yang wrote:
> Dear Scons users,
> 
> There's a Scons feature that's been bothering me for two weeks.
> 
> *"When the source files are the same,
> the sequential compilation and linking order of scons is not fixed,
> which is reflected in the inconsistent map files generated."*
> 
> I compiled RT-Thread <https://github.com/RT-Thread/rt-thread> with 
> Scons, an open source embedded OS.
> In the case that nothing is changed in the same project,
> the map files generated two times are different,
> which leads to different BIN files (the firmware downloaded to the MCU) 
> that are finally generated.
> This means that the same source code may make the MCU behave differently,
> which brings some potential bugs.
> 
> When we use Keil <https://www.keil.com/> or other MCU SDK, the map files 
> generated by continuous compilation are the same.
> 
> Therefore, I hope to fix the link order of Scons so that the same source 
> code can be compiled to generate the same map file and firmware.
> 
> *So, can Scons fix the order of links? How to fix the link order of Scons?*
> 
> Best regards,
> Lan


I know this thread has continued, just wanted to note: SCons tries very 
hard to maintain consistency across builds.  Glob, however, (like its 
ancestor, Python´s glob.glob) returns entries in the order given by 
iterating through a directory sequentially, which may or may not be 
sorted, or even stable, depending on the implementation of the 
filesystem underneath (I personally find the latter a little surprising 
but there do appear to be cases where it is not stable).

A number of SCons' own test cases written long ago are aware of this and 
use code conceptually like this to accomodate:

srcs = sorted(Glob(PATTERN, key=lambda t: t.name))

(that is because Glob returns node objects, rather than strings, unless 
you specify the ¨strings=True" keyword argument; if you tell it to 
return strings you would not use the key function, of course)


In fact, other build systems have this challenge too.  For example, here 
is a description of a similar issue for GNU Make:

https://reproducible-builds.org/docs/stable-inputs/




More information about the Scons-users mailing list