Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This shows that the reason we're rebuilding is: 1. Each derivation gets a unique [`-frandom-seed=...`](https://github.com/NixOS/nixpkgs/blob/3a73796bf2edb1dc026257da827678117ee7af57/pkgs/build-support/setup-hooks/reproducible-builds.sh#L5) value in `NIX_CFLAGS_COMPILE`. 2. `rustPlatform.bindgenHook` then [interpolates that `NIX_CFLAGS_COMPILE` flag into `BINDGEN_EXTRA_CLANG_ARGS`](https://github.com/NixOS/nixpkgs/blob/3a73796bf2edb1dc026257da827678117ee7af57/pkgs/build-support/rust/hooks/rust-bindgen-hook.sh#L9). 3. rust-bindgen's build.rs [forces a rebuild if it sees that the `BINDGEN_EXTRA_CLANG_ARGS` env var changes](https://github.com/rust-lang/rust-bindgen/blob/v0.69.4/bindgen/build.rs#L20). So, since our `quick-start-simple-deps` and `quick-start-simple` are different derivations, they end up with different `-frandom-seed=...` values, and we can't share the prebuild bindgen crate. I've successfully worked around this by hacking on the `BINDGEN_EXTRA_CLANG_ARGS` env var in a `preBuild`. See the subsequent commit for a demonstration of that. For posterity, here's the data I collected: $ cat /tmp/quick-start-simple-deps LLVM_CONFIG_PATH: LIBCLANG_PATH: /nix/store/l92dv1igdpgkb1mxjv9rabvk795k45ih-clang-16.0.6-lib/lib LIBCLANG_STATIC_PATH: BINDGEN_EXTRA_CLANG_ARGS: -B/nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0 --gcc-toolchain=/nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0 -B/nix/store/l92dv1igdpgkb1mxjv9rabvk795k45ih-clang-16.0.6-lib/lib -resource-dir=/nix/store/yqvsk9m8aza2ngwnglvadlgj71vcgwzm-clang-wrapper-16.0.6/resource-root -idirafter /nix/store/3mmvgb08qy8n6n37mnprf77fnp4rssi9-glibc-2.38-27-dev/include -isystem /nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0/include/c++/13.2.0 -isystem /nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0/include/c++/13.2.0/x86_64-unknown-linux-gnu -frandom-seed=4c3hhsixj2 env | grep BINDGEN_EXTRA_CLANG_ARGS_ $ cat /tmp/quick-start-simple LLVM_CONFIG_PATH: LIBCLANG_PATH: /nix/store/l92dv1igdpgkb1mxjv9rabvk795k45ih-clang-16.0.6-lib/lib LIBCLANG_STATIC_PATH: BINDGEN_EXTRA_CLANG_ARGS: -B/nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0 --gcc-toolchain=/nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0 -B/nix/store/l92dv1igdpgkb1mxjv9rabvk795k45ih-clang-16.0.6-lib/lib -resource-dir=/nix/store/yqvsk9m8aza2ngwnglvadlgj71vcgwzm-clang-wrapper-16.0.6/resource-root -idirafter /nix/store/3mmvgb08qy8n6n37mnprf77fnp4rssi9-glibc-2.38-27-dev/include -isystem /nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0/include/c++/13.2.0 -isystem /nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0/include/c++/13.2.0/x86_64-unknown-linux-gnu -frandom-seed=2rwlbnwsjk env | grep BINDGEN_EXTRA_CLANG_ARGS_ The diff: $ diff -u /tmp/quick-start-simple-deps /tmp/quick-start-simple-deps --- /tmp/quick-start-simple-deps 2024-02-08 00:00:24.947120526 -0800 +++ /tmp/quick-start-simple-deps 2024-02-08 00:00:40.701304265 -0800 @@ -1,5 +1,5 @@ LLVM_CONFIG_PATH: LIBCLANG_PATH: /nix/store/l92dv1igdpgkb1mxjv9rabvk795k45ih-clang-16.0.6-lib/lib LIBCLANG_STATIC_PATH: -BINDGEN_EXTRA_CLANG_ARGS: -B/nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0 --gcc-toolchain=/nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0 -B/nix/store/l92dv1igdpgkb1mxjv9rabvk795k45ih-clang-16.0.6-lib/lib -resource-dir=/nix/store/yqvsk9m8aza2ngwnglvadlgj71vcgwzm-clang-wrapper-16.0.6/resource-root -idirafter /nix/store/3mmvgb08qy8n6n37mnprf77fnp4rssi9-glibc-2.38-27-dev/include -isystem /nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0/include/c++/13.2.0 -isystem /nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0/include/c++/13.2.0/x86_64-unknown-linux-gnu -frandom-seed=4c3hhsixj2 +BINDGEN_EXTRA_CLANG_ARGS: -B/nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0 --gcc-toolchain=/nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0 -B/nix/store/l92dv1igdpgkb1mxjv9rabvk795k45ih-clang-16.0.6-lib/lib -resource-dir=/nix/store/yqvsk9m8aza2ngwnglvadlgj71vcgwzm-clang-wrapper-16.0.6/resource-root -idirafter /nix/store/3mmvgb08qy8n6n37mnprf77fnp4rssi9-glibc-2.38-27-dev/include -isystem /nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0/include/c++/13.2.0 -isystem /nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0/include/c++/13.2.0/x86_64-unknown-linux-gnu -frandom-seed=2rwlbnwsjk env | grep BINDGEN_EXTRA_CLANG_ARGS_ So we know that `BINDGEN_EXTRA_CLANG_ARGS` differs, but it's a long line. Here's a more useful diff of just that one line: $ diff -u <(grep BINDGEN_EXTRA_CLANG_ARGS /tmp/quick-start-simple-deps | tr ' ' '\n') <(grep BINDGEN_EXTRA_CLANG_ARGS /tmp/quick-start-simple | tr ' ' '\n') --- /proc/self/fd/12 2024-02-08 00:17:58.767539333 -0800 +++ /proc/self/fd/13 2024-02-08 00:17:58.768539341 -0800 @@ -13,7 +13,7 @@ /nix/store/j00nb8s5mwaxgi77h21i1ycb91yxxqck-gcc-13.2.0/include/c++/13.2.0/x86_64-unknown-linux-gnu --frandom-seed=4c3hhsixj2 +-frandom-seed=2rwlbnwsjk env | grep
- Loading branch information