Merge pull request #46730 from copumpkin/add-darwin-lto

cctools: support LTO on Darwin
This commit is contained in:
Daniel Peebles 2018-09-17 00:59:22 -04:00 committed by GitHub
commit 481dd45e61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 15 additions and 10 deletions

View File

@ -119,12 +119,14 @@ in stdenv.mkDerivation (rec {
+ stdenv.lib.optionalString enableSharedLibraries '' + stdenv.lib.optionalString enableSharedLibraries ''
moveToOutput "lib/libLLVM-*" "$lib" moveToOutput "lib/libLLVM-*" "$lib"
moveToOutput "lib/libLLVM${stdenv.hostPlatform.extensions.sharedLibrary}" "$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" \ substituteInPlace "$out/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \
--replace "\''${_IMPORT_PREFIX}/lib/libLLVM-" "$lib/lib/libLLVM-" --replace "\''${_IMPORT_PREFIX}/lib/libLLVM-" "$lib/lib/libLLVM-"
'' ''
+ stdenv.lib.optionalString (stdenv.isDarwin && enableSharedLibraries) '' + stdenv.lib.optionalString (stdenv.isDarwin && enableSharedLibraries) ''
substituteInPlace "$out/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \ 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-${shortVersion}.dylib
ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${release_version}.dylib ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${release_version}.dylib
''; '';

View File

@ -1,8 +1,6 @@
{ cctools, appleDerivation }: { appleDerivation }:
appleDerivation { appleDerivation {
nativeBuildInputs = [ cctools ];
patches = [ ./clang-5.patch ]; patches = [ ./clang-5.patch ];
postPatch = '' postPatch = ''

View File

@ -215,7 +215,7 @@ let
# Splicing is currently broken in Nixpkgs # Splicing is currently broken in Nixpkgs
# cctools need to be specified manually here to handle this # 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; }; IOKit = applePackage "IOKit" "osx-10.11.6" "0kcbrlyxcyirvg5p95hjd9k8a01k161zg0bsfgfhkb90kh2s8x00" { inherit IOKitSrcs; };
launchd = applePackage "launchd" "osx-10.9.5" "0w30hvwqq8j5n90s3qyp0fccxflvrmmjnicjri4i1vd2g196jdgj" {}; launchd = applePackage "launchd" "osx-10.9.5" "0w30hvwqq8j5n90s3qyp0fccxflvrmmjnicjri4i1vd2g196jdgj" {};

View File

@ -1,5 +1,5 @@
{ stdenv, fetchFromGitHub, autoconf, automake, libtool_2, autoreconfHook { stdenv, fetchFromGitHub, autoconf, automake, libtool_2, autoreconfHook
, libcxxabi, libuuid , libcxxabi, libuuid, llvm
, libobjc ? null, maloader ? null , libobjc ? null, maloader ? null
, enableDumpNormalizedLibArgs ? false , enableDumpNormalizedLibArgs ? false
}: }:
@ -56,7 +56,7 @@ let
autoreconfHook autoreconfHook
]; ];
buildInputs = [ libuuid ] ++ buildInputs = [ libuuid ] ++
stdenv.lib.optionals stdenv.isDarwin [ libcxxabi libobjc ]; stdenv.lib.optionals stdenv.isDarwin [ llvm libcxxabi libobjc ];
patches = [ patches = [
./ld-rpath-nonfinal.patch ./ld-ignore-rpath-link.patch ./ld-rpath-nonfinal.patch ./ld-ignore-rpath-link.patch

View File

@ -201,6 +201,7 @@ in rec {
python2 = self.python; python2 = self.python;
ninja = super.ninja.override { buildDocs = false; }; ninja = super.ninja.override { buildDocs = false; };
darwin = super.darwin // { cctools = super.darwin.cctools.override { llvm = null; }; };
}; };
in with prevStage; stageFun 1 prevStage { in with prevStage; stageFun 1 prevStage {
extraPreHook = "export NIX_CFLAGS_COMPILE+=\" -F${bootstrapTools}/Library/Frameworks\""; extraPreHook = "export NIX_CFLAGS_COMPILE+=\" -F${bootstrapTools}/Library/Frameworks\"";

View File

@ -12,6 +12,10 @@ in rec {
singleBinary = false; 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. # Avoid debugging larger changes for now.
bzip2_ = bzip2.override (args: { linkStatic = true; }); bzip2_ = bzip2.override (args: { linkStatic = true; });
@ -95,7 +99,7 @@ in rec {
# Copy binutils. # Copy binutils.
for i in as ld ar ranlib nm strip otool install_name_tool dsymutil lipo; do 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 done
cp -rd ${pkgs.darwin.CF}/Library $out cp -rd ${pkgs.darwin.CF}/Library $out
@ -105,9 +109,9 @@ in rec {
nuke-refs $out/bin/* nuke-refs $out/bin/*
rpathify() { 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 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 done
} }