Merge pull request #257158 from dpc/wrap-that-mold
mold: wrap so it can find system libraries
This commit is contained in:
@@ -9,6 +9,11 @@
|
||||
, testers
|
||||
, mold
|
||||
, nix-update-script
|
||||
, runCommandCC
|
||||
, mold-wrapped
|
||||
, hello
|
||||
, buildPackages
|
||||
, useMoldLinker
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
@@ -44,11 +49,51 @@ stdenv.mkDerivation rec {
|
||||
|
||||
passthru = {
|
||||
updateScript = nix-update-script { };
|
||||
tests.version = testers.testVersion { package = mold; };
|
||||
tests =
|
||||
let
|
||||
helloTest = name: helloMold:
|
||||
let
|
||||
command = "$READELF -p .comment ${lib.getExe helloMold}";
|
||||
emulator = stdenv.hostPlatform.emulator buildPackages;
|
||||
in
|
||||
runCommandCC "mold-${name}-test" { passthru = { inherit helloMold; }; }
|
||||
''
|
||||
echo "Testing running the 'hello' binary which should be linked with 'mold'" >&2
|
||||
${emulator} ${lib.getExe helloMold}
|
||||
|
||||
echo "Checking for mold in the '.comment' section" >&2
|
||||
if output=$(${command} 2>&1); then
|
||||
if grep -Fw -- "mold" - <<< "$output"; then
|
||||
touch $out
|
||||
else
|
||||
echo "No mention of 'mold' detected in the '.comment' section" >&2
|
||||
echo "The command was:" >&2
|
||||
echo "${command}" >&2
|
||||
echo "The output was:" >&2
|
||||
echo "$output" >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo -n "${command}" >&2
|
||||
echo " returned a non-zero exit code." >&2
|
||||
echo "$output" >&2
|
||||
exit 1
|
||||
fi
|
||||
''
|
||||
;
|
||||
in
|
||||
{
|
||||
version = testers.testVersion { package = mold; };
|
||||
wrapped = helloTest "wrapped" (hello.overrideAttrs (previousAttrs: {
|
||||
nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [ mold-wrapped ];
|
||||
NIX_CFLAGS_LINK = toString (previousAttrs.NIX_CFLAGS_LINK or "") + " -fuse-ld=mold";
|
||||
}));
|
||||
adapter = helloTest "adapter" (hello.override (old: { stdenv = useMoldLinker old.stdenv; }));
|
||||
};
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "A faster drop-in replacement for existing Unix linkers";
|
||||
description = "A faster drop-in replacement for existing Unix linkers (unwrapped)";
|
||||
longDescription = ''
|
||||
mold is a faster drop-in replacement for existing Unix linkers. It is
|
||||
several times faster than the LLVM lld linker. mold is designed to
|
||||
|
||||
@@ -192,8 +192,8 @@ 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
|
||||
wrap ${stdenv.cc.bintools.targetPrefix}ld.mold ${../build-support/bintools-wrapper/ld-wrapper.sh} ${pkgs.mold}/bin/ld.mold
|
||||
wrap ${stdenv.cc.bintools.targetPrefix}ld ${../build-support/bintools-wrapper/ld-wrapper.sh} ${pkgs.mold}/bin/ld.mold
|
||||
'';
|
||||
};
|
||||
in stdenv.override (old: {
|
||||
|
||||
@@ -19649,6 +19649,14 @@ with pkgs;
|
||||
|
||||
mold = callPackage ../development/tools/mold { };
|
||||
|
||||
mold-wrapped = wrapBintoolsWith {
|
||||
bintools = mold;
|
||||
extraBuildCommands = ''
|
||||
wrap ${targetPackages.stdenv.cc.bintools.targetPrefix}ld.mold ${../build-support/bintools-wrapper/ld-wrapper.sh} ${mold}/bin/ld.mold
|
||||
wrap ${targetPackages.stdenv.cc.bintools.targetPrefix}mold ${../build-support/bintools-wrapper/ld-wrapper.sh} ${mold}/bin/mold
|
||||
'';
|
||||
};
|
||||
|
||||
mommy = callPackage ../tools/misc/mommy { };
|
||||
|
||||
moon = callPackage ../development/tools/build-managers/moon/default.nix { };
|
||||
|
||||
Reference in New Issue
Block a user