rav1e: fix cross
`cargo cbuild` needs to have the `C{C,XX}_FOR_{${platform}}` variables set just like `cargo` since it is basically a wrapper around cargo. Without these variables, it will try to use the `hostPlatform` C compiler to compile `build.rs` scripts, and will pass flags to that compiler which only make sense on the `buildPlatform`. So it's just doomed without the environment variables. Right now it looks like `rav1e` is the only package we have that is using `cargo-c`, but if that changes in the future we should factor this out as its own hook, like `maturinBuildHook` and the others.
This commit is contained in:
parent
3c070a08ff
commit
4aa036f15a
1 changed files with 22 additions and 1 deletions
|
@ -10,10 +10,29 @@
|
||||||
, zlib
|
, zlib
|
||||||
, libiconv
|
, libiconv
|
||||||
, Security
|
, Security
|
||||||
|
, buildPackages
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
rustTargetPlatformSpec = rust.toRustTargetSpec stdenv.hostPlatform;
|
rustTargetPlatformSpec = rust.toRustTargetSpec stdenv.hostPlatform;
|
||||||
|
|
||||||
|
# TODO: if another package starts using cargo-c (seems likely),
|
||||||
|
# factor this out into a makeCargoChook expression in
|
||||||
|
# pkgs/build-support/rust/hooks/default.nix
|
||||||
|
ccForBuild = "${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc";
|
||||||
|
cxxForBuild = "${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}c++";
|
||||||
|
ccForHost = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
|
||||||
|
cxxForHost = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++";
|
||||||
|
rustBuildPlatform = rust.toRustTarget stdenv.buildPlatform;
|
||||||
|
rustTargetPlatform = rust.toRustTarget stdenv.hostPlatform;
|
||||||
|
setEnvVars = ''
|
||||||
|
env \
|
||||||
|
"CC_${rustBuildPlatform}"="${ccForBuild}" \
|
||||||
|
"CXX_${rustBuildPlatform}"="${cxxForBuild}" \
|
||||||
|
"CC_${rustTargetPlatform}"="${ccForHost}" \
|
||||||
|
"CXX_${rustTargetPlatform}"="${cxxForHost}" \
|
||||||
|
'';
|
||||||
|
|
||||||
in rustPlatform.buildRustPackage rec {
|
in rustPlatform.buildRustPackage rec {
|
||||||
pname = "rav1e";
|
pname = "rav1e";
|
||||||
version = "0.6.3";
|
version = "0.6.3";
|
||||||
|
@ -38,11 +57,13 @@ in rustPlatform.buildRustPackage rec {
|
||||||
|
|
||||||
checkType = "debug";
|
checkType = "debug";
|
||||||
|
|
||||||
postBuild = ''
|
postBuild = ''
|
||||||
|
${setEnvVars} \
|
||||||
cargo cbuild --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
|
cargo cbuild --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
|
${setEnvVars} \
|
||||||
cargo cinstall --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
|
cargo cinstall --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue