Files
nixpkgs/pkgs/development/tools/rust/bindgen/default.nix
Alyssa Ross 0af7df6bd3 rust-bindgen: link directly with libclang
There's not really any reason for bindgen to dlopen libclang at all in
Nixpkgs.  Moving this out of the wrapper means that it will still work
even when we don't want all the standard Nixpkgs cflags behavior, like
in the Linux kernel build.
2025-08-08 11:11:42 +02:00

54 lines
1.9 KiB
Nix

{
rust-bindgen-unwrapped,
zlib,
bash,
runCommand,
runCommandCC,
}:
let
clang = rust-bindgen-unwrapped.clang;
self =
runCommand "rust-bindgen-${rust-bindgen-unwrapped.version}"
{
#for substituteAll
inherit bash;
unwrapped = rust-bindgen-unwrapped;
meta = rust-bindgen-unwrapped.meta // {
longDescription = rust-bindgen-unwrapped.meta.longDescription + ''
This version of bindgen is wrapped with the required compiler flags
required to find the c and c++ standard library, as well as the libraries
specified in the buildInputs of your derivation.
'';
};
passthru.tests = {
simple-c = runCommandCC "simple-c-bindgen-tests" { } ''
echo '#include <stdlib.h>' > a.c
${self}/bin/bindgen a.c --allowlist-function atoi | tee output
grep atoi output
touch $out
'';
simple-cpp = runCommandCC "simple-cpp-bindgen-tests" { } ''
echo '#include <cmath>' > a.cpp
${self}/bin/bindgen a.cpp --allowlist-function erf -- -xc++ | tee output
grep erf output
touch $out
'';
with-lib = runCommandCC "zlib-bindgen-tests" { buildInputs = [ zlib ]; } ''
echo '#include <zlib.h>' > a.c
${self}/bin/bindgen a.c --allowlist-function compress | tee output
grep compress output
touch $out
'';
};
}
# if you modify the logic to find the right clang flags, also modify rustPlatform.bindgenHook
''
mkdir -p $out/bin
export cincludes="$(< ${clang}/nix-support/cc-cflags) $(< ${clang}/nix-support/libc-cflags)"
export cxxincludes="$(< ${clang}/nix-support/libcxx-cxxflags)"
substituteAll ${./wrapper.sh} $out/bin/bindgen
chmod +x $out/bin/bindgen
'';
in
self