Merge pull request #83379 from symphorien/rust-link
buildRustCrate: don't sort link flags
This commit is contained in:
commit
d86bfec309
3 changed files with 54 additions and 7 deletions
|
@ -172,7 +172,7 @@ in ''
|
||||||
set +e
|
set +e
|
||||||
EXTRA_BUILD=$(sed -n "s/^cargo:rustc-flags=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ' | sort -u)
|
EXTRA_BUILD=$(sed -n "s/^cargo:rustc-flags=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ' | sort -u)
|
||||||
EXTRA_FEATURES=$(sed -n "s/^cargo:rustc-cfg=\(.*\)/--cfg \1/p" target/build/${crateName}.opt | tr '\n' ' ')
|
EXTRA_FEATURES=$(sed -n "s/^cargo:rustc-cfg=\(.*\)/--cfg \1/p" target/build/${crateName}.opt | tr '\n' ' ')
|
||||||
EXTRA_LINK=$(sed -n "s/^cargo:rustc-link-lib=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ' | sort -u)
|
EXTRA_LINK=$(sed -n "s/^cargo:rustc-link-lib=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ')
|
||||||
EXTRA_LINK_SEARCH=$(sed -n "s/^cargo:rustc-link-search=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ' | sort -u)
|
EXTRA_LINK_SEARCH=$(sed -n "s/^cargo:rustc-link-search=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ' | sort -u)
|
||||||
|
|
||||||
for env in $(sed -n "s/^cargo:rustc-env=\(.*\)/\1/p" target/build/${crateName}.opt); do
|
for env in $(sed -n "s/^cargo:rustc-env=\(.*\)/\1/p" target/build/${crateName}.opt); do
|
||||||
|
|
|
@ -105,11 +105,6 @@ setup_link_paths() {
|
||||||
done
|
done
|
||||||
|
|
||||||
if [[ -e target/link ]]; then
|
if [[ -e target/link ]]; then
|
||||||
sort -u target/link.final > target/link.final.sorted
|
|
||||||
mv target/link.final.sorted target/link.final
|
|
||||||
sort -u target/link > target/link.sorted
|
|
||||||
mv target/link.sorted target/link
|
|
||||||
|
|
||||||
tr '\n' ' ' < target/link > target/link_
|
tr '\n' ' ' < target/link > target/link_
|
||||||
LINK=$(cat target/link_)
|
LINK=$(cat target/link_)
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ lib, buildRustCrate, runCommand, writeTextFile, symlinkJoin, callPackage, releaseTools }:
|
{ lib, buildRustCrate, runCommand, runCommandCC, writeTextFile, symlinkJoin, callPackage, releaseTools }:
|
||||||
let
|
let
|
||||||
mkCrate = args: let
|
mkCrate = args: let
|
||||||
p = {
|
p = {
|
||||||
|
@ -258,6 +258,58 @@ let
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
# Regression test for https://github.com/NixOS/nixpkgs/pull/83379
|
||||||
|
# link flag order should be preserved
|
||||||
|
linkOrder = {
|
||||||
|
src = symlinkJoin {
|
||||||
|
name = "buildrs-out-dir-overlay";
|
||||||
|
paths = [
|
||||||
|
(mkFile "build.rs" ''
|
||||||
|
fn main() {
|
||||||
|
// in the other order, linkage will fail
|
||||||
|
println!("cargo:rustc-link-lib=b");
|
||||||
|
println!("cargo:rustc-link-lib=a");
|
||||||
|
}
|
||||||
|
'')
|
||||||
|
(mkFile "src/main.rs" ''
|
||||||
|
extern "C" {
|
||||||
|
fn hello_world();
|
||||||
|
}
|
||||||
|
fn main() {
|
||||||
|
unsafe {
|
||||||
|
hello_world();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
};
|
||||||
|
buildInputs = let
|
||||||
|
compile = name: text: runCommandCC name {} ''
|
||||||
|
mkdir -p $out/lib
|
||||||
|
$CC -shared -o $out/lib/${name}.so ${writeTextFile {
|
||||||
|
name = "${name}-src.c";
|
||||||
|
inherit text;
|
||||||
|
}}
|
||||||
|
'';
|
||||||
|
b = compile "libb" ''
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void hello();
|
||||||
|
|
||||||
|
void hello_world() {
|
||||||
|
hello();
|
||||||
|
printf(" world!\n");
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
a = compile "liba" ''
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void hello() {
|
||||||
|
printf("hello");
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
in [ a b ];
|
||||||
|
};
|
||||||
rustCargoTomlInSubDir = {
|
rustCargoTomlInSubDir = {
|
||||||
# The "workspace_member" can be set to the sub directory with the crate to build.
|
# The "workspace_member" can be set to the sub directory with the crate to build.
|
||||||
# By default ".", meaning the top level directory is assumed.
|
# By default ".", meaning the top level directory is assumed.
|
||||||
|
|
Loading…
Reference in a new issue