Skip to content

Commit

Permalink
Adding some debugging info
Browse files Browse the repository at this point in the history
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
jfly committed Feb 8, 2024
1 parent 4bb019e commit 4d12415
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
src = craneLib.cleanCargoSource (craneLib.path ./.);
strictDeps = true;

HASH_BUSTER = 3; # just increment this to force a rebuild
HASH_BUSTER = 4; # just increment this to force a rebuild

nativeBuildInputs = with pkgs; [
rustPlatform.bindgenHook
Expand All @@ -35,8 +35,14 @@
pkgs.libiconv
];

# Additional environment variables can be set directly
# MY_CUSTOM_VAR = "some value";
preBuild = ''
# All the `cargo:rerun-if-env-changed` env vars in https://github.com/rust-lang/rust-bindgen/blob/v0.69.4/bindgen/build.rs
echo "LLVM_CONFIG_PATH: $LLVM_CONFIG_PATH"
echo "LIBCLANG_PATH: $LIBCLANG_PATH"
echo "LIBCLANG_STATIC_PATH: $LIBCLANG_STATIC_PATH"
echo "BINDGEN_EXTRA_CLANG_ARGS: $BINDGEN_EXTRA_CLANG_ARGS"
env | grep BINDGEN_EXTRA_CLANG_ARGS_
'';
};
in
{
Expand Down

0 comments on commit 4d12415

Please sign in to comment.