Skip to content

Commit

Permalink
rav1e: fix cross
Browse files Browse the repository at this point in the history
`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.
  • Loading branch information
Adam Joseph authored and Artturin committed Apr 14, 2023
1 parent 3c070a0 commit 4aa036f
Showing 1 changed file with 22 additions and 1 deletion.
23 changes: 22 additions & 1 deletion pkgs/tools/video/rav1e/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -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}
'';

Expand Down

0 comments on commit 4aa036f

Please sign in to comment.