From f011e9009456d87d99d8daee29f04c4fdf07317a Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Mon, 21 Apr 2025 23:09:52 -0700 Subject: [PATCH] Fix useMoldLinker when cross compiling After #400734 we can make useMoldLinker work when cross compiling. We need the following: - Need to use pkgs.buildPackages.mold so that we use mold binaries for the build machine instead of the host. - Need to create unprefixed ld.mold wrapper because gcc will not look for a triple-prefixed ld.mold when passing -fuse-ld=mold. Tested on an aarch64 machine with this change + #400734: $ nix-build -K --expr 'with import "${./.}" { crossSystem = { config = "x86_64-unknown-linux-gnu"; }; }; hello.override { stdenv = useMoldLinker stdenv; }' && strings result/bin/hello | grep mold /nix/store/w1yg0am7iyqsgi253h84lsp92178sgfi-hello-x86_64-unknown-linux-gnu-2.12.1 mold 2.37.1 (compatible with GNU ld) --- pkgs/stdenv/adapters.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix index 54527f841242..44efb02f54b0 100644 --- a/pkgs/stdenv/adapters.nix +++ b/pkgs/stdenv/adapters.nix @@ -350,8 +350,9 @@ rec { let bintools = stdenv.cc.bintools.override { extraBuildCommands = '' - 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 + wrap ld.mold ${../build-support/bintools-wrapper/ld-wrapper.sh} ${pkgs.buildPackages.mold}/bin/ld.mold + wrap ${stdenv.cc.bintools.targetPrefix}ld.mold ${../build-support/bintools-wrapper/ld-wrapper.sh} ${pkgs.buildPackages.mold}/bin/ld.mold + wrap ${stdenv.cc.bintools.targetPrefix}ld ${../build-support/bintools-wrapper/ld-wrapper.sh} ${pkgs.buildPackages.mold}/bin/ld.mold ''; }; in