diff options
author | Dan Peebles <pumpkin@me.com> | 2018-09-15 16:49:44 -0400 |
---|---|---|
committer | Dan Peebles <pumpkin@me.com> | 2018-09-16 02:12:11 -0400 |
commit | 110c2528709ee10466a6b4bee5a2adefe11a0c3f (patch) | |
tree | eb398c8ec993c79ba28756b1c7484b8cc9c730c0 | |
parent | b91ad0e54f6a44737198b8cbcea67467ec991aee (diff) | |
download | nixpkgs-110c2528709ee10466a6b4bee5a2adefe11a0c3f.tar nixpkgs-110c2528709ee10466a6b4bee5a2adefe11a0c3f.tar.gz nixpkgs-110c2528709ee10466a6b4bee5a2adefe11a0c3f.tar.bz2 nixpkgs-110c2528709ee10466a6b4bee5a2adefe11a0c3f.tar.lz nixpkgs-110c2528709ee10466a6b4bee5a2adefe11a0c3f.tar.xz nixpkgs-110c2528709ee10466a6b4bee5a2adefe11a0c3f.tar.zst nixpkgs-110c2528709ee10466a6b4bee5a2adefe11a0c3f.zip |
cctools: support LTO on Darwin
LTO is disabled during bootstrap to keep the bootstrap tools small and avoid unnecessary LLVM rebuilds, but is enabled in the final stdenv stage and should be usable by normal packages.
-rw-r--r-- | pkgs/development/compilers/llvm/5/llvm.nix | 4 | ||||
-rw-r--r-- | pkgs/os-specific/darwin/apple-source-releases/ICU/default.nix | 4 | ||||
-rw-r--r-- | pkgs/os-specific/darwin/apple-source-releases/default.nix | 2 | ||||
-rw-r--r-- | pkgs/os-specific/darwin/cctools/port.nix | 4 | ||||
-rw-r--r-- | pkgs/stdenv/darwin/default.nix | 1 | ||||
-rw-r--r-- | pkgs/stdenv/darwin/make-bootstrap-tools.nix | 10 |
6 files changed, 15 insertions, 10 deletions
diff --git a/pkgs/development/compilers/llvm/5/llvm.nix b/pkgs/development/compilers/llvm/5/llvm.nix index 3abba0ed340..6dae8be97c8 100644 --- a/pkgs/development/compilers/llvm/5/llvm.nix +++ b/pkgs/development/compilers/llvm/5/llvm.nix @@ -119,12 +119,14 @@ in stdenv.mkDerivation (rec { + stdenv.lib.optionalString enableSharedLibraries '' moveToOutput "lib/libLLVM-*" "$lib" moveToOutput "lib/libLLVM${stdenv.hostPlatform.extensions.sharedLibrary}" "$lib" + moveToOutput "lib/libLTO${stdenv.hostPlatform.extensions.sharedLibrary}" "$lib" substituteInPlace "$out/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \ --replace "\''${_IMPORT_PREFIX}/lib/libLLVM-" "$lib/lib/libLLVM-" '' + stdenv.lib.optionalString (stdenv.isDarwin && enableSharedLibraries) '' substituteInPlace "$out/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \ - --replace "\''${_IMPORT_PREFIX}/lib/libLLVM.dylib" "$lib/lib/libLLVM.dylib" + --replace "\''${_IMPORT_PREFIX}/lib/libLLVM.dylib" "$lib/lib/libLLVM.dylib" \ + --replace "\''${_IMPORT_PREFIX}/lib/libLTO.dylib" "$lib/lib/libLTO.dylib" ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${shortVersion}.dylib ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${release_version}.dylib ''; diff --git a/pkgs/os-specific/darwin/apple-source-releases/ICU/default.nix b/pkgs/os-specific/darwin/apple-source-releases/ICU/default.nix index 89ff68266a2..761ff3ea925 100644 --- a/pkgs/os-specific/darwin/apple-source-releases/ICU/default.nix +++ b/pkgs/os-specific/darwin/apple-source-releases/ICU/default.nix @@ -1,8 +1,6 @@ -{ cctools, appleDerivation }: +{ appleDerivation }: appleDerivation { - nativeBuildInputs = [ cctools ]; - patches = [ ./clang-5.patch ]; postPatch = '' diff --git a/pkgs/os-specific/darwin/apple-source-releases/default.nix b/pkgs/os-specific/darwin/apple-source-releases/default.nix index d490048c4df..4fa0c0e3e47 100644 --- a/pkgs/os-specific/darwin/apple-source-releases/default.nix +++ b/pkgs/os-specific/darwin/apple-source-releases/default.nix @@ -215,7 +215,7 @@ let # Splicing is currently broken in Nixpkgs # cctools need to be specified manually here to handle this - ICU = applePackage "ICU" "osx-10.10.5" "1qihlp42n5g4dl0sn0f9pc0bkxy1452dxzf0vr6y5gqpshlzy03p" { inherit (buildPackages.darwin) cctools; }; + ICU = applePackage "ICU" "osx-10.10.5" "1qihlp42n5g4dl0sn0f9pc0bkxy1452dxzf0vr6y5gqpshlzy03p" {}; IOKit = applePackage "IOKit" "osx-10.11.6" "0kcbrlyxcyirvg5p95hjd9k8a01k161zg0bsfgfhkb90kh2s8x00" { inherit IOKitSrcs; }; launchd = applePackage "launchd" "osx-10.9.5" "0w30hvwqq8j5n90s3qyp0fccxflvrmmjnicjri4i1vd2g196jdgj" {}; diff --git a/pkgs/os-specific/darwin/cctools/port.nix b/pkgs/os-specific/darwin/cctools/port.nix index fff6eaaa5c1..bad17cf6de4 100644 --- a/pkgs/os-specific/darwin/cctools/port.nix +++ b/pkgs/os-specific/darwin/cctools/port.nix @@ -1,5 +1,5 @@ { stdenv, fetchFromGitHub, autoconf, automake, libtool_2, autoreconfHook -, libcxxabi, libuuid +, libcxxabi, libuuid, llvm , libobjc ? null, maloader ? null , enableDumpNormalizedLibArgs ? false }: @@ -56,7 +56,7 @@ let autoreconfHook ]; buildInputs = [ libuuid ] ++ - stdenv.lib.optionals stdenv.isDarwin [ libcxxabi libobjc ]; + stdenv.lib.optionals stdenv.isDarwin [ llvm libcxxabi libobjc ]; patches = [ ./ld-rpath-nonfinal.patch ./ld-ignore-rpath-link.patch diff --git a/pkgs/stdenv/darwin/default.nix b/pkgs/stdenv/darwin/default.nix index d287517e886..c361ae6e402 100644 --- a/pkgs/stdenv/darwin/default.nix +++ b/pkgs/stdenv/darwin/default.nix @@ -201,6 +201,7 @@ in rec { python2 = self.python; ninja = super.ninja.override { buildDocs = false; }; + darwin = super.darwin // { cctools = super.darwin.cctools.override { llvm = null; }; }; }; in with prevStage; stageFun 1 prevStage { extraPreHook = "export NIX_CFLAGS_COMPILE+=\" -F${bootstrapTools}/Library/Frameworks\""; diff --git a/pkgs/stdenv/darwin/make-bootstrap-tools.nix b/pkgs/stdenv/darwin/make-bootstrap-tools.nix index d128be7019b..eee3b1ce075 100644 --- a/pkgs/stdenv/darwin/make-bootstrap-tools.nix +++ b/pkgs/stdenv/darwin/make-bootstrap-tools.nix @@ -12,6 +12,10 @@ in rec { singleBinary = false; }); + # We want a version of cctools without LLVM, because the LTO support ends up making + # the bootstrap tools huge and isn't really necessary for bootstrap + cctools_ = darwin.cctools.override { llvm = null; }; + # Avoid debugging larger changes for now. bzip2_ = bzip2.override (args: { linkStatic = true; }); @@ -95,7 +99,7 @@ in rec { # Copy binutils. for i in as ld ar ranlib nm strip otool install_name_tool dsymutil lipo; do - cp ${darwin.cctools}/bin/$i $out/bin + cp ${cctools_}/bin/$i $out/bin done cp -rd ${pkgs.darwin.CF}/Library $out @@ -105,9 +109,9 @@ in rec { nuke-refs $out/bin/* rpathify() { - local libs=$(${darwin.cctools}/bin/otool -L "$1" | tail -n +2 | grep -o "$NIX_STORE.*-\S*") || true + local libs=$(${cctools_}/bin/otool -L "$1" | tail -n +2 | grep -o "$NIX_STORE.*-\S*") || true for lib in $libs; do - ${darwin.cctools}/bin/install_name_tool -change $lib "@rpath/$(basename $lib)" "$1" + ${cctools_}/bin/install_name_tool -change $lib "@rpath/$(basename $lib)" "$1" done } |