diff options
author | Alyssa Ross <hi@alyssa.is> | 2024-01-20 12:31:50 +0100 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2024-01-20 12:32:25 +0100 |
commit | b7baf40e099b4215181fe7b0c63083b12ef2c7fb (patch) | |
tree | a6efabd31d05b6d0a36624729e80377bbbfb0149 /nixpkgs/pkgs/stdenv/adapters.nix | |
parent | 710028664e26e85cb831a869b3da9f6993902255 (diff) | |
parent | 0799f514b1cd74878174939df79ac60ca5036673 (diff) | |
download | nixlib-b7baf40e099b4215181fe7b0c63083b12ef2c7fb.tar nixlib-b7baf40e099b4215181fe7b0c63083b12ef2c7fb.tar.gz nixlib-b7baf40e099b4215181fe7b0c63083b12ef2c7fb.tar.bz2 nixlib-b7baf40e099b4215181fe7b0c63083b12ef2c7fb.tar.lz nixlib-b7baf40e099b4215181fe7b0c63083b12ef2c7fb.tar.xz nixlib-b7baf40e099b4215181fe7b0c63083b12ef2c7fb.tar.zst nixlib-b7baf40e099b4215181fe7b0c63083b12ef2c7fb.zip |
Merge branch 'nixos-unstable-small' of https://github.com/NixOS/nixpkgs
Conflicts: nixpkgs/pkgs/build-support/rust/build-rust-package/default.nix
Diffstat (limited to 'nixpkgs/pkgs/stdenv/adapters.nix')
-rw-r--r-- | nixpkgs/pkgs/stdenv/adapters.nix | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/nixpkgs/pkgs/stdenv/adapters.nix b/nixpkgs/pkgs/stdenv/adapters.nix index dd2987190718..84d3258949eb 100644 --- a/nixpkgs/pkgs/stdenv/adapters.nix +++ b/nixpkgs/pkgs/stdenv/adapters.nix @@ -83,7 +83,10 @@ rec { in overrideCC stdenv (stdenv.cc.override { inherit libcxx; - extraPackages = [ cxxabi pkgs.pkgsTargetTarget."llvmPackages_${lib.versions.major llvmLibcxxVersion}".compiler-rt ]; + extraPackages = [ + cxxabi + pkgs.buildPackages.targetPackages."llvmPackages_${lib.versions.major llvmLibcxxVersion}".compiler-rt + ]; }); # Override the setup script of stdenv. Useful for testing new @@ -234,6 +237,30 @@ rec { }); }); + useLibsFrom = modelStdenv: targetStdenv: + let + ccForLibs = modelStdenv.cc.cc; + cc = pkgs.wrapCCWith { + /* NOTE: cc.cc is the unwrapped compiler. Should we respect the old + * wrapper instead? */ + cc = targetStdenv.cc.cc; + + /* NOTE(originally by rrbutani): + * Normally the `useCcForLibs`/`gccForLibs` mechanism is used to get a + * clang based `cc` to use `libstdc++` (from gcc). + * + * Here we (ab)use it to use a `libstdc++` from a different `gcc` than our + * `cc`. + * + * Note that this does not inhibit our `cc`'s lib dir from being added to + * cflags/ldflags (see `cc_solib` in `cc-wrapper`) but this is okay: our + * `gccForLibs`'s paths should take precedence. */ + useCcForLibs = true; + gccForLibs = ccForLibs; + }; + in + overrideCC targetStdenv cc; + useMoldLinker = stdenv: let bintools = stdenv.cc.bintools.override { extraBuildCommands = '' @@ -417,4 +444,18 @@ rec { "propagatedBuildInputs" ]); }); + + withDefaultHardeningFlags = defaultHardeningFlags: stdenv: let + bintools = let + bintools' = stdenv.cc.bintools; + in if bintools' ? override then (bintools'.override { + inherit defaultHardeningFlags; + }) else bintools'; + in + stdenv.override (old: { + cc = if stdenv.cc == null then null else stdenv.cc.override { + inherit bintools; + }; + allowedRequisites = lib.mapNullable (rs: rs ++ [ bintools ]) (stdenv.allowedRequisites or null); + }); } |