diff options
author | Ahmad Sattar <thehabbos007@gmail.com> | 2024-06-28 10:20:41 +0200 |
---|---|---|
committer | Ahmad Sattar <thehabbos007@gmail.com> | 2024-07-01 09:29:46 +0200 |
commit | 1cf6e5eaa1855409ec92e8921edd390dc179cc17 (patch) | |
tree | cd7d5fd02379be0a907241e7aa35f88b56643911 | |
parent | 69bee9866a4e2708b3153fdb61c1425e7857d6b8 (diff) |
buildRustCrate: add support for `cargo::rustc-cdylib-link-arg`
-rw-r--r-- | pkgs/build-support/rust/build-rust-crate/configure-crate.nix | 6 | ||||
-rw-r--r-- | pkgs/build-support/rust/build-rust-crate/default.nix | 2 | ||||
-rw-r--r-- | pkgs/build-support/rust/build-rust-crate/lib.sh | 6 |
3 files changed, 13 insertions, 1 deletions
diff --git a/pkgs/build-support/rust/build-rust-crate/configure-crate.nix b/pkgs/build-support/rust/build-rust-crate/configure-crate.nix index ab872bac854f8..fd61d73deb722 100644 --- a/pkgs/build-support/rust/build-rust-crate/configure-crate.nix +++ b/pkgs/build-support/rust/build-rust-crate/configure-crate.nix @@ -14,6 +14,7 @@ , crateLicenseFile , crateLinks , crateName +, crateType , crateReadme , crateRenames , crateRepository @@ -209,6 +210,11 @@ in '' EXTRA_LINK_LIBS=$(sed -n "s/^cargo::\{0,1\}rustc-link-lib=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ') EXTRA_LINK_SEARCH=$(sed -n "s/^cargo::\{0,1\}rustc-link-search=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ' | sort -u) + ${lib.optionalString (lib.elem "cdylib" crateType) '' + CRATE_TYPE_IS_CDYLIB="true" + EXTRA_CDYLIB_LINK_ARGS=$(sed -n "s/^cargo::\{0,1\}rustc-cdylib-link-arg=\(.*\)/-C link-arg=\1/p" target/build/${crateName}.opt | tr '\n' ' ') +''} + # We want to read part of every line that has cargo:rustc-env= prefix and # export it as environment variables. This turns out tricky if the lines # have spaces: we can't wrap the command in double quotes as that captures diff --git a/pkgs/build-support/rust/build-rust-crate/default.nix b/pkgs/build-support/rust/build-rust-crate/default.nix index dfe28cc334b5e..7abca1fb09b13 100644 --- a/pkgs/build-support/rust/build-rust-crate/default.nix +++ b/pkgs/build-support/rust/build-rust-crate/default.nix @@ -345,7 +345,7 @@ crate_: lib.makeOverridable configurePhase = configureCrate { - inherit crateName buildDependencies completeDeps completeBuildDeps crateDescription + inherit crateName crateType buildDependencies completeDeps completeBuildDeps crateDescription crateFeatures crateRenames libName build workspace_member release libPath crateVersion crateLinks extraLinkFlags extraRustcOptsForBuildRs crateLicense crateLicenseFile crateReadme crateRepository crateRustVersion diff --git a/pkgs/build-support/rust/build-rust-crate/lib.sh b/pkgs/build-support/rust/build-rust-crate/lib.sh index 0181ae432c85b..36ddc9ac23c4f 100644 --- a/pkgs/build-support/rust/build-rust-crate/lib.sh +++ b/pkgs/build-support/rust/build-rust-crate/lib.sh @@ -114,6 +114,12 @@ setup_link_paths() { tr '\n' ' ' < target/link > target/link_ LINK=$(cat target/link_) fi + + # Add "rustc-cdylib-link-arg" as linker arguments + # https://doc.rust-lang.org/cargo/reference/build-scripts.html#rustc-cdylib-link-arg + if [[ -n "$CRATE_TYPE_IS_CDYLIB" ]]; then + EXTRA_BUILD+=" $EXTRA_CDYLIB_LINK_ARGS" + fi } search_for_bin_path() { |