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

@ -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
'';

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

@ -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" {};

@ -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

@ -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\"";

@ -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
}