Button: A fast, correct, and elegantly simple build system.

Jason White via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Sat Jun 18 01:38:21 PDT 2016


On Friday, 17 June 2016 at 20:36:53 UTC, H. S. Teoh wrote:
> - Assuming that a revision control system is in place, and a
>   workspace is checked out on revision X with no further
>   modifications, then invoking the build tool should ALWAYS,
>   without any exceptions, produce exactly the same outputs, bit
>   for bit.  I.e., if your workspace faithfully represents
>   revision X in the RCS, then invoking the build tool will
>   produce the exact same binary products as anybody else who
>   checks out revision X, regardless of their initial starting
>   conditions.

Making builds bit-for-bit reproducible is really, really hard to 
do, particularly on Windows. Microsoft's C/C++ compiler embeds 
timestamps and other nonsense into the binaries so that every 
time you build, even when no source changed, you get a different 
binary. Google wrote a tool to help eliminate this 
non-determinism as a post-processing step called 
zap_timestamp[1]. I want to eventually include something like 
this with Button on Windows. I'll probably have to make a PE 
reader library first though.

Without reproducible builds, caching outputs doesn't work very 
well either.

Moral of the story is, if you're writing a compiler, for the sake 
of build systems everywhere, make the output deterministic! For 
consecutive invocations, without changing any source code, I want 
the hashes of the binaries to be identical every single time. DMD 
doesn't do this and it saddens me greatly.

[1] 
https://github.com/google/syzygy/tree/master/syzygy/zap_timestamp


More information about the Digitalmars-d-announce mailing list