| 20 Sep 2025 |
ghpzin | Just FYI I figured out how to "fix" mesa with gcc15, apparently rustPlatform.bindgenHook just propagates gcc/glib by default. So everything that has that hook can use gcc instead of clang (maybe even always uses them, depending on whether bindgen cares about order in BINDGEN_EXTRA_CLANG_ARGS). | 18:44:57 |
emily | as in your fix is to just make it use Clang instead? | 18:45:26 |
ghpzin | As in just removing hook and leaving bindgen fixes it. | 18:45:43 |
ghpzin | * As in just removing hook and leaving bindgen fixes it, yes. | 18:46:14 |
dramforever | ... is it including two copies of <stdatomic.h> | 18:46:18 |
dramforever | and breaking #include_next? | 18:47:13 |
ghpzin | I do not think so, but it was pretty hard to get any info out of that thing. | 18:47:40 |
emily | where does bindgenHook do that propagation? | 18:48:09 |
emily | bindgenHook = makeSetupHook {
name = "rust-bindgen-hook";
substitutions = {
libclang = (lib.getLib clang.cc);
inherit clang;
};
} ./rust-bindgen-hook.sh;
| 18:48:18 |
ghpzin | https://github.com/symphorien/nixpkgs/blob/777a91f6f893c09cbbcf1144e48be2acd2a620e9/pkgs/build-support/rust/hooks/rust-bindgen-hook.sh#L9 | 18:48:29 |
ghpzin | * https://github.com/nixos/nixpkgs/blob/master/pkgs/build-support/rust/hooks/rust-bindgen-hook.sh#L9 | 18:48:46 |
emily | that's because bindgen uses libclang, right…? | 18:48:49 |
emily | so it needs to know how to compile C code with Clang flags | 18:49:10 |
Lun | include_next and wrappers adding hundreds of weirdly ordered isystem include dirs, name a better duo | 18:49:28 |
dramforever | looks like it's sending $NIX_CFLAGS_COMPILE into bindgen wrapper | 18:49:48 |
ghpzin | clang has all gcc/glibc things in /nix-support/cc-cflags and /nix-support/libcxx-cxxflags, probably because it itself is build with gcc | 18:50:17 |
emily | but… that's correct right? | 18:50:36 |
emily | those are the flags you'd use if you were compiling with clang | 18:50:37 |
emily | if you mean libgcc, that's correct | 18:50:47 |
emily | or well | 18:50:51 |
emily | depending… | 18:50:54 |
emily | but I mean if clang has the wrong flags for compiling with Clang in it then Clang would be broken | 18:51:12 |
ghpzin | But do you expect to bindgen to always use those things by default ? | 18:51:17 |
emily | like it should mirror the flags you'd get with llvmPackages.stdenv… | 18:51:20 |
ghpzin | But do you expect for bindgen to always use those things by default ? | 18:51:31 |
emily | yes. what bindgen does is use libclang to read C code and generate Rust bindings based on that | 18:51:35 |
emily | bindgen is, essentially, Clang | 18:51:43 |
emily | we have the hook so that it can find glibc, the dependencies of the derivation, etc. | 18:51:52 |
Lun | duplicating something that would be correct alone is enough to mess up include_next iirc? | 18:52:13 |
emily | we use the flags from @clang@ because it is a kind of Clang, so it needs the Clang logic from cc-wrapper rather than the GCC logic | 18:52:14 |