Merge pull request #216383 from Artturin/bintoolswrappermold
This commit is contained in:
commit
ee54eb7d21
2 changed files with 28 additions and 5 deletions
|
@ -183,7 +183,9 @@ stdenv.mkDerivation {
|
|||
done
|
||||
|
||||
'' + (if !useMacosReexportHack then ''
|
||||
wrap ${targetPrefix}ld ${./ld-wrapper.sh} ''${ld:-$ldPath/${targetPrefix}ld}
|
||||
if [ -e ''${ld:-$ldPath/${targetPrefix}ld} ]; then
|
||||
wrap ${targetPrefix}ld ${./ld-wrapper.sh} ''${ld:-$ldPath/${targetPrefix}ld}
|
||||
fi
|
||||
'' else ''
|
||||
ldInner="${targetPrefix}ld-reexport-delegate"
|
||||
wrap "$ldInner" ${./macos-sierra-reexport-hack.bash} ''${ld:-$ldPath/${targetPrefix}ld}
|
||||
|
@ -191,10 +193,9 @@ stdenv.mkDerivation {
|
|||
unset ldInner
|
||||
'') + ''
|
||||
|
||||
for variant in ld.gold ld.bfd ld.lld; do
|
||||
local underlying=$ldPath/${targetPrefix}$variant
|
||||
[[ -e "$underlying" ]] || continue
|
||||
wrap ${targetPrefix}$variant ${./ld-wrapper.sh} $underlying
|
||||
for variant in $ldPath/${targetPrefix}ld.*; do
|
||||
basename=$(basename "$variant")
|
||||
wrap $basename ${./ld-wrapper.sh} $variant
|
||||
done
|
||||
'';
|
||||
|
||||
|
|
|
@ -189,6 +189,28 @@ rec {
|
|||
});
|
||||
});
|
||||
|
||||
useMoldLinker = stdenv: let
|
||||
bintools = stdenv.cc.bintools.override {
|
||||
extraBuildCommands = ''
|
||||
wrap ld.mold ${../build-support/bintools-wrapper/ld-wrapper.sh} ${pkgs.mold}/bin/ld.mold
|
||||
wrap ld ${../build-support/bintools-wrapper/ld-wrapper.sh} ${pkgs.mold}/bin/ld.mold
|
||||
'';
|
||||
};
|
||||
in stdenv.override (old: {
|
||||
cc = stdenv.cc.override {
|
||||
inherit bintools;
|
||||
};
|
||||
allowedRequisites =
|
||||
lib.mapNullable (rs: rs ++ [ bintools pkgs.mold (lib.getLib pkgs.mimalloc) (lib.getLib pkgs.openssl) ]) (stdenv.allowedRequisites or null);
|
||||
# gcc >12.1.0 supports '-fuse-ld=mold'
|
||||
# the wrap ld above in bintools supports gcc <12.1.0 and shouldn't harm >12.1.0
|
||||
# https://github.com/rui314/mold#how-to-use
|
||||
} // lib.optionalAttrs (stdenv.cc.isClang || (stdenv.cc.isGNU && lib.versionAtLeast stdenv.cc.version "12")) {
|
||||
mkDerivationFromStdenv = extendMkDerivationArgs old (args: {
|
||||
NIX_CFLAGS_LINK = toString (args.NIX_CFLAGS_LINK or "") + " -fuse-ld=mold";
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
/* Modify a stdenv so that it builds binaries optimized specifically
|
||||
for the machine they are built on.
|
||||
|
|
Loading…
Reference in a new issue