diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-10-10 14:01:38 +0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-10-10 14:55:17 +0200 |
commit | ffbdcbfe29ea1076e87a321f47df39cd1ddc4d6b (patch) | |
tree | a58007f97519e01d383d0c80a53ca8e2d8f761e4 | |
parent | 3e0a3487287743dfe8020533bf7690e124a1748a (diff) | |
download | nixlib-ffbdcbfe29ea1076e87a321f47df39cd1ddc4d6b.tar nixlib-ffbdcbfe29ea1076e87a321f47df39cd1ddc4d6b.tar.gz nixlib-ffbdcbfe29ea1076e87a321f47df39cd1ddc4d6b.tar.bz2 nixlib-ffbdcbfe29ea1076e87a321f47df39cd1ddc4d6b.tar.lz nixlib-ffbdcbfe29ea1076e87a321f47df39cd1ddc4d6b.tar.xz nixlib-ffbdcbfe29ea1076e87a321f47df39cd1ddc4d6b.tar.zst nixlib-ffbdcbfe29ea1076e87a321f47df39cd1ddc4d6b.zip |
gcc-wrapper: Wrap ld.gold
This ensures that gcc's ‘-fuse-ld=gold’ flag works.
-rw-r--r-- | pkgs/build-support/gcc-wrapper/default.nix | 8 | ||||
-rw-r--r-- | pkgs/stdenv/adapters.nix | 20 |
2 files changed, 15 insertions, 13 deletions
diff --git a/pkgs/build-support/gcc-wrapper/default.nix b/pkgs/build-support/gcc-wrapper/default.nix index 5b80c92acbfc..1af35f58a3fe 100644 --- a/pkgs/build-support/gcc-wrapper/default.nix +++ b/pkgs/build-support/gcc-wrapper/default.nix @@ -143,6 +143,14 @@ stdenv.mkDerivation { wrap ld ${./ld-wrapper.sh} $ld + if [ -e $binutils/bin/ld.gold ]; then + wrap ld.gold ${./ld-wrapper.sh} $binutils/bin/ld.gold + fi + + if [ -e $binutils/bin/ld.bfd ]; then + wrap ld.bfd ${./ld-wrapper.sh} $binutils/bin/ld.bfd + fi + if [ -e $gccPath/gcc ]; then wrap gcc ${./gcc-wrapper.sh} $gccPath/gcc ln -s gcc $out/bin/cc diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix index a90a00e6d4f3..9e82359865bf 100644 --- a/pkgs/stdenv/adapters.nix +++ b/pkgs/stdenv/adapters.nix @@ -285,19 +285,13 @@ rec { }; - /* Modify a stdenv so that it uses the Gold linker. FIXME: should - use -fuse-ld=gold instead, but then the ld-wrapper won't be - invoked. */ - useGoldLinker = stdenv: - let - binutils = stdenv.gcc.binutils; - binutils' = pkgs.runCommand "${binutils.name}-gold" { } - '' - mkdir -p $out/bin - ln -s ${binutils}/bin/* $out/bin/ - ln -sfn ${binutils}/bin/ld.gold $out/bin/ld - ''; # */ - in overrideGCC stdenv (stdenv.gcc.override { binutils = binutils'; }); + /* Modify a stdenv so that it uses the Gold linker. */ + useGoldLinker = stdenv: stdenv // + { mkDerivation = args: stdenv.mkDerivation (args // { + dontStrip = true; + NIX_CFLAGS_LINK = toString (args.NIX_CFLAGS_COMPILE or "") + " -fuse-ld=gold"; + }); + }; dropCxx = drv: drv.override { stdenv = if pkgs.stdenv.isDarwin |