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
|
@ -10,10 +10,29 @@
|
|||
, zlib
|
||||
, libiconv
|
||||
, Security
|
||||
, buildPackages
|
||||
}:
|
||||
|
||||
let
|
||||
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 {
|
||||
pname = "rav1e";
|
||||
version = "0.6.3";
|
||||
|
@ -38,11 +57,13 @@ in rustPlatform.buildRustPackage rec {
|
|||
|
||||
checkType = "debug";
|
||||
|
||||
postBuild = ''
|
||||
postBuild = ''
|
||||
${setEnvVars} \
|
||||
cargo cbuild --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
${setEnvVars} \
|
||||
cargo cinstall --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
|
||||
'';
|
||||
|
||||
|
|
Loading…
Reference in a new issue