mold: add tests for mold-wrapped and useMoldLinker adapter

Make both ready for cross with prefixes

Currently
`pkgsCross.aarch64-multiplatform.mold.passthru.tests.{wrapped,adapter}`
fail with

```
Testing running the 'hello' binary which should be linked with 'mold'
Hello, world!
Checking for mold in the '.comment' section
No mention of 'mold' detected in the '.comment' section
The command was:
aarch64-unknown-linux-gnu-readelf -p .comment ...bin/hello
The output was:
String dump of section '.comment':
  [     0]  GCC: (GNU) 12.3.0
```
This commit is contained in:
Artturin 2023-10-13 03:35:26 +03:00
parent 30f2ab26fe
commit 77bf1395d6
3 changed files with 50 additions and 4 deletions

View File

@ -9,6 +9,11 @@
, testers
, mold
, nix-update-script
, runCommandCC
, mold-wrapped
, hello
, buildPackages
, useMoldLinker
}:
stdenv.mkDerivation rec {
@ -44,7 +49,47 @@ 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; {

View File

@ -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: {

View File

@ -19650,7 +19650,8 @@ with pkgs;
mold-wrapped = wrapBintoolsWith {
bintools = mold;
extraBuildCommands = ''
wrap mold ${../build-support/bintools-wrapper/ld-wrapper.sh} ${mold}/bin/ld.mold
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
'';
};