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:
Adam Joseph 2023-04-08 17:29:06 -07:00 committed by Artturin
parent 3c070a08ff
commit 4aa036f15a

View file

@ -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}
'';