[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