+16
-16
pkgs/build-support/rust/lib/default.nix
+16
-16
pkgs/build-support/rust/lib/default.nix
···
1
1
{ lib
2
2
, stdenv
3
-
, buildPackages
4
-
, targetPackages
3
+
, pkgsBuildHost
4
+
, pkgsTargetTarget
5
5
}:
6
6
7
7
rec {
···
16
16
# As a workaround for https://github.com/rust-lang/rust/issues/89626 use lld on pkgsStatic aarch64
17
17
shouldUseLLD = platform: platform.isAarch64 && platform.isStatic && !stdenv.isDarwin;
18
18
19
-
ccForBuild = "${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc";
20
-
cxxForBuild = "${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}c++";
19
+
ccForBuild = "${pkgsBuildHost.stdenv.cc}/bin/${pkgsBuildHost.stdenv.cc.targetPrefix}cc";
20
+
cxxForBuild = "${pkgsBuildHost.stdenv.cc}/bin/${pkgsBuildHost.stdenv.cc.targetPrefix}c++";
21
21
linkerForBuild = ccForBuild;
22
22
23
23
ccForHost = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
24
24
cxxForHost = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++";
25
25
linkerForHost = if shouldUseLLD stdenv.targetPlatform
26
26
&& !stdenv.cc.bintools.isLLVM
27
-
then "${buildPackages.lld}/bin/ld.lld"
27
+
then "${pkgsBuildHost.lld}/bin/ld.lld"
28
28
else ccForHost;
29
29
30
-
# Unfortunately we must use the dangerous `targetPackages` here
30
+
# Unfortunately we must use the dangerous `pkgsTargetTarget` here
31
31
# because hooks are artificially phase-shifted one slot earlier
32
32
# (they go in nativeBuildInputs, so the hostPlatform looks like
33
33
# a targetPlatform to them).
34
-
ccForTarget = "${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc";
35
-
cxxForTarget = "${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}c++";
36
-
linkerForTarget = if shouldUseLLD targetPackages.stdenv.targetPlatform
37
-
&& !targetPackages.stdenv.cc.bintools.isLLVM # whether stdenv's linker is lld already
38
-
then "${buildPackages.lld}/bin/ld.lld"
34
+
ccForTarget = "${pkgsTargetTarget.stdenv.cc}/bin/${pkgsTargetTarget.stdenv.cc.targetPrefix}cc";
35
+
cxxForTarget = "${pkgsTargetTarget.stdenv.cc}/bin/${pkgsTargetTarget.stdenv.cc.targetPrefix}c++";
36
+
linkerForTarget = if shouldUseLLD pkgsTargetTarget.stdenv.targetPlatform
37
+
&& !pkgsTargetTarget.stdenv.cc.bintools.isLLVM # whether stdenv's linker is lld already
38
+
then "${pkgsBuildHost.lld}/bin/ld.lld"
39
39
else ccForTarget;
40
40
41
41
rustBuildPlatform = stdenv.buildPlatform.rust.rustcTarget;
···
56
56
setEnv = ''
57
57
env \
58
58
''
59
-
# Due to a bug in how splicing and targetPackages works, in
60
-
# situations where targetPackages is irrelevant
61
-
# targetPackages.stdenv.cc is often simply wrong. We must omit
59
+
# Due to a bug in how splicing and pkgsTargetTarget works, in
60
+
# situations where pkgsTargetTarget is irrelevant
61
+
# pkgsTargetTarget.stdenv.cc is often simply wrong. We must omit
62
62
# the following lines when rustTargetPlatform collides with
63
63
# rustHostPlatform.
64
64
+ lib.optionalString (rustTargetPlatform != rustHostPlatform) ''
···
74
74
"CXX_${stdenv.buildPlatform.rust.cargoEnvVarTarget}=${cxxForBuild}" \
75
75
"CARGO_TARGET_${stdenv.buildPlatform.rust.cargoEnvVarTarget}_LINKER=${linkerForBuild}" \
76
76
"CARGO_BUILD_TARGET=${rustBuildPlatform}" \
77
-
"HOST_CC=${buildPackages.stdenv.cc}/bin/cc" \
78
-
"HOST_CXX=${buildPackages.stdenv.cc}/bin/c++" \
77
+
"HOST_CC=${pkgsBuildHost.stdenv.cc}/bin/cc" \
78
+
"HOST_CXX=${pkgsBuildHost.stdenv.cc}/bin/c++" \
79
79
'';
80
80
};
81
81
} // lib.mapAttrs (old: new: platform:
+2
-4
pkgs/development/compilers/rust/1_75.nix
+2
-4
pkgs/development/compilers/rust/1_75.nix
···
10
10
# 3. Firefox and Thunderbird should still build on x86_64-linux.
11
11
12
12
{ stdenv, lib
13
-
, buildPackages
14
-
, targetPackages
15
13
, newScope, callPackage
16
14
, CoreFoundation, Security, SystemConfiguration
17
-
, pkgsBuildTarget, pkgsBuildBuild, pkgsBuildHost
15
+
, pkgsBuildTarget, pkgsBuildBuild, pkgsBuildHost, pkgsTargetTarget
18
16
, makeRustPlatform
19
17
, wrapRustcWith
20
18
, llvmPackages_17, llvm_17
···
58
56
rustcPatches = [ ];
59
57
}
60
58
61
-
(builtins.removeAttrs args [ "pkgsBuildTarget" "pkgsBuildHost" "llvmPackages_17" "llvm_17"])
59
+
(builtins.removeAttrs args [ "pkgsBuildTarget" "llvmPackages_17" "llvm_17"])
+5
-5
pkgs/development/compilers/rust/default.nix
+5
-5
pkgs/development/compilers/rust/default.nix
···
12
12
, llvmPackages # Exposed through rustc for LTO in Firefox
13
13
}:
14
14
{ stdenv, lib
15
-
, buildPackages
16
-
, targetPackages
17
15
, newScope, callPackage
18
16
, CoreFoundation, Security, SystemConfiguration
19
17
, pkgsBuildBuild
18
+
, pkgsBuildHost
19
+
, pkgsTargetTarget
20
20
, makeRustPlatform
21
21
, wrapRustcWith
22
22
}:
23
23
24
24
let
25
25
# Use `import` to make sure no packages sneak in here.
26
-
lib' = import ../../../build-support/rust/lib { inherit lib stdenv buildPackages targetPackages; };
26
+
lib' = import ../../../build-support/rust/lib { inherit lib stdenv pkgsBuildHost pkgsTargetTarget; };
27
27
# Allow faster cross compiler generation by reusing Build artifacts
28
28
fastCross = (stdenv.buildPlatform == stdenv.hostPlatform) && (stdenv.hostPlatform != stdenv.targetPlatform);
29
29
in
···
58
58
else
59
59
self.buildRustPackages.overrideScope (_: _:
60
60
lib.optionalAttrs (stdenv.buildPlatform == stdenv.hostPlatform)
61
-
(selectRustPackage buildPackages).packages.prebuilt);
61
+
(selectRustPackage pkgsBuildHost).packages.prebuilt);
62
62
bootRustPlatform = makeRustPlatform bootstrapRustPackages;
63
63
in {
64
64
# Packages suitable for build-time, e.g. `build.rs`-type stuff.
65
-
buildRustPackages = (selectRustPackage buildPackages).packages.stable // { __attrsFailEvaluation = true; };
65
+
buildRustPackages = (selectRustPackage pkgsBuildHost).packages.stable // { __attrsFailEvaluation = true; };
66
66
# Analogous to stdenv
67
67
rustPlatform = makeRustPlatform self.buildRustPackages;
68
68
rustc-unwrapped = self.callPackage ./rustc.nix ({