Description
I was looking into why sccache was missing more than expected, and it looks like serde_derive compiles are not deterministic.
I tried this code on OSX 10.12 (Xcode 7.3.1)
> cd serde
> git checkout 0b89bc920e6052c05483c8b56661e859caae9d25
> cargo build
> md5 target/debug/deps/libserde_derive-*.dylib
(output: MD5 (target/debug/deps/libserde_derive-c403614b534b4e94.dylib) = be85fd8981e5bb5aa789a56d6f9ae4da)
> rm target/debug/deps/libserde_derive-*.dylib
> cargo build
> md5 target/debug/deps/libserde_derive-*.dylib
(output: MD5 (target/debug/deps/libserde_derive-c403614b534b4e94.dylib) = 5fc806ed2f22bdf7e9c3b0b018ca2671)
I expected that the MD5s would be identical after deleting and re-running cargo build. I ran with just the underlying rustc
command, and that also generated different files each time. Here is the underlying rustc command:
rustc --crate-name serde_derive serde_derive/src/lib.rs --crate-type proc-macro --emit=dep-info,link -C prefer-dynamic -C debuginfo=2 --cfg 'feature="default"' --cfg 'feature="deserialize_from"' -C metadata=c403614b534b4e94 -C extra-filename=-c403614b534b4e94 --out-dir /Users/jklai/serde/target/debug/deps -L dependency=/Users/jklai/serde/target/debug/deps --extern syn=/Users/jklai/serde/target/debug/deps/libsyn-b667971f1cdadd98.rlib --extern quote=/Users/jklai/serde/target/debug/deps/libquote-34dfebedcb580111.rlib --extern serde_derive_internals=/Users/jklai/serde/target/debug/deps/libserde_derive_internals-3788ef8c57ed9e45.rlib
I have also tried this on Windows and Linux, and it also generates different serde_derive libraries when rebuilding.
Meta
rustc --version --verbose
: rustc 1.24.0-nightly (dc39c31 2017-12-17)