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:
@@ -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; {
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user