diff options
author | a-n-n-a-l-e-e <150648636+a-n-n-a-l-e-e@users.noreply.github.com> | 2024-03-11 03:53:37 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-11 03:53:37 -0700 |
commit | ce789e7e35e7cf72f5424f35d1b8b3ffcedd9226 (patch) | |
tree | 96f7a1f5689c5866d9250f142402c2b67ec38ed7 /pkgs/stdenv/darwin | |
parent | b2211920487890748920fcc83f9b769494bfa2d6 (diff) |
llvmPackages_{12,13,14,15,16,17,git}.{libcxx,libcxxabi}: merge libcxxabi into libcxx (#292043)
- merge libcxxabi into libcxx for LLVM 12, 13, 14, 15, 16, 17, and git. - remove the link time workaround `-lc++ -lc++abi` from 58 packages as it is no longer required. - fixes https://github.com/NixOS/nixpkgs/issues/166205 - provides alternative fixes for. https://github.com/NixOS/nixpkgs/issues/269548 https://github.com/NixOS/nix/issues/9640 - pkgsCross.x86_64-freebsd builds work again This change can be represented in 3 stages 1. merge libcxxabi into libcxx -- files: pkgs/development/compilers/llvm/[12, git]/{libcxx, libcxxabi} 2. update stdenv to account for merge -- files: stdenv.{adapters, cc.wrapper, darwin} 3. remove all references to libcxxabi outside of llvm (about 58 packages modified) ### merging libcxxabi into libcxx - take the union of the libcxxabi and libcxx cmake flags - eliminate the libcxx-headers-only package - it was only needed to break libcxx <-> libcxxabi circular dependency - libcxx.cxxabi is removed. external cxxabi (freebsd) will symlink headers / libs into libcxx. - darwin will re-export the libcxxabi symbols into libcxx so linking `-lc++` is sufficient. - linux/freebsd `libc++.so` is a linker script `LINK(libc++.so.1, -lc++abi)` making `-lc++` sufficient. - libcxx/default.nix [12, 17] are identical except for patches and `LIBCXX_ADDITIONAL_LIBRARIES` (only used in 16+) - git/libcxx/defaul.nix does not link with -nostdlib when useLLVM is true so flag is removed. this is not much different than before as libcxxabi used -nostdlib where libcxx did not, so libc was linked in anyway. ### stdenv changes - darwin bootstrap, remove references to libcxxabi and cxxabi - cc-wrapper: remove c++ link workaround when libcxx.cxxabi doesn't exist (still exists for LLVM pre 12) - adapter: update overrideLibcxx to account for a pkgs.stdenv that only has libcxx ### 58 package updates - remove `NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}` as no longer needed - swift, nodejs_v8 remove libcxxabi references in the clang override https://github.com/NixOS/nixpkgs/pull/292043
Diffstat (limited to 'pkgs/stdenv/darwin')
-rw-r--r-- | pkgs/stdenv/darwin/default.nix | 63 | ||||
-rw-r--r-- | pkgs/stdenv/darwin/make-bootstrap-tools.nix | 4 | ||||
-rw-r--r-- | pkgs/stdenv/darwin/unpack-bootstrap-tools-aarch64.sh | 5 |
3 files changed, 25 insertions, 47 deletions
diff --git a/pkgs/stdenv/darwin/default.nix b/pkgs/stdenv/darwin/default.nix index 1433369c3252c..e2ebe4d6bbb5d 100644 --- a/pkgs/stdenv/darwin/default.nix +++ b/pkgs/stdenv/darwin/default.nix @@ -81,7 +81,6 @@ let }; extraPackages = [ - prevStage.llvmPackages.libcxxabi prevStage.llvmPackages.compiler-rt ]; @@ -196,7 +195,6 @@ in clang-unwrapped = null; libllvm = null; libcxx = null; - libcxxabi = null; compiler-rt = null; }; }) @@ -346,18 +344,6 @@ in ''; passthru = { isLLVM = true; - cxxabi = self.llvmPackages.libcxxabi; - isFromBootstrapFiles = true; - }; - }; - libcxxabi = self.stdenv.mkDerivation { - name = "bootstrap-stage0-libcxxabi"; - buildCommand = '' - mkdir -p $out/lib - ln -s ${bootstrapTools}/lib/libc++abi.dylib $out/lib - ''; - passthru = { - libName = "c++abi"; isFromBootstrapFiles = true; }; }; @@ -413,7 +399,7 @@ in assert (with prevStage.darwin; (! useAppleSDKLibs) -> CF == null); assert lib.all isFromBootstrapFiles (with prevStage.llvmPackages; [ - clang-unwrapped libclang libllvm llvm compiler-rt libcxx libcxxabi + clang-unwrapped libclang libllvm llvm compiler-rt libcxx ]); stageFun prevStage { @@ -480,7 +466,7 @@ in inherit (prevStage.llvmPackages) clang-unwrapped libclang libllvm llvm; }); libraries = super.llvmPackages.libraries.extend (_: _: { - inherit (prevStage.llvmPackages) compiler-rt libcxx libcxxabi; + inherit (prevStage.llvmPackages) compiler-rt libcxx; }); in { inherit tools libraries; inherit (prevStage.llvmPackages) release_version; } // tools // libraries @@ -526,7 +512,7 @@ in assert lib.all isFromNixpkgs (with prevStage.darwin; [ dyld launchd xnu ]); assert lib.all isFromBootstrapFiles (with prevStage.llvmPackages; [ - clang-unwrapped libclang libllvm llvm compiler-rt libcxx libcxxabi + clang-unwrapped libclang libllvm llvm compiler-rt libcxx ]); assert lib.getVersion prevStage.stdenv.cc.bintools.bintools == "boot"; @@ -580,7 +566,7 @@ in clang = prevStage.stdenv.cc; }); libraries = super.llvmPackages.libraries.extend (_: _: { - inherit (prevStage.llvmPackages) compiler-rt libcxx libcxxabi; + inherit (prevStage.llvmPackages) compiler-rt libcxx; }); in { inherit tools libraries; inherit (prevStage.llvmPackages) release_version; } // tools // libraries @@ -626,7 +612,7 @@ in assert lib.all isFromNixpkgs (with prevStage.darwin; [ dyld launchd xnu ]); assert lib.all isFromBootstrapFiles (with prevStage.llvmPackages; [ - clang-unwrapped libclang libllvm llvm compiler-rt libcxx libcxxabi + clang-unwrapped libclang libllvm llvm compiler-rt libcxx ]); assert lib.getVersion prevStage.stdenv.cc.bintools.bintools == lib.getVersion prevStage.darwin.cctools-port; @@ -670,17 +656,8 @@ in libraries = super.llvmPackages.libraries.extend (selfLib: superLib: { compiler-rt = null; libcxx = superLib.libcxx.override ({ - inherit (selfLib) libcxxabi; stdenv = libcxxBootstrapStdenv; }); - libcxxabi = superLib.libcxxabi.override { - stdenv = libcxxBootstrapStdenv; - } - # Setting `standalone = true` is only needed with older verions of LLVM. Newer ones - # automatically do what is necessary to bootstrap lib++abi. - // lib.optionalAttrs (builtins.any (v: llvmMajor == v) [ "7" "11" "12" "13" ]) { - standalone = true; - }; }); in { inherit libraries; } // libraries @@ -726,7 +703,7 @@ in assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage.llvmPackages; [ clang-unwrapped libclang libllvm llvm ]); - assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [ libcxx libcxxabi ]); + assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [ libcxx ]); assert prevStage.llvmPackages.compiler-rt == null; assert lib.getVersion prevStage.stdenv.cc.bintools.bintools == lib.getVersion prevStage.darwin.cctools-port; @@ -763,7 +740,7 @@ in }); libraries = super.llvmPackages.libraries.extend (selfLib: superLib: { - inherit (prevStage.llvmPackages) compiler-rt libcxx libcxxabi; + inherit (prevStage.llvmPackages) compiler-rt libcxx; }); in { inherit tools libraries; inherit (prevStage.llvmPackages) release_version; } // tools // libraries @@ -779,7 +756,6 @@ in in self.overrideCC stdenvNoCF (self.llvmPackages.clangNoCompilerRtWithLibc.override { inherit (self.llvmPackages) libcxx; - extraPackages = [ self.llvmPackages.libcxxabi ]; }); }; @@ -827,7 +803,7 @@ in assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage.llvmPackages; [ clang-unwrapped libclang libllvm llvm ]); - assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [ libcxx libcxxabi ]); + assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [ libcxx ]); assert prevStage.llvmPackages.compiler-rt == null; assert lib.getVersion prevStage.stdenv.cc.bintools.bintools == lib.getVersion prevStage.darwin.cctools-llvm; @@ -874,12 +850,11 @@ in }); libraries = super.llvmPackages.libraries.extend (selfLib: superLib: { - inherit (prevStage.llvmPackages) libcxx libcxxabi; + inherit (prevStage.llvmPackages) libcxx; # Make sure compiler-rt is linked against the CF from this stage, which can be # propagated to the final stdenv. CF is required by ASAN. compiler-rt = superLib.compiler-rt.override ({ - inherit (selfLib) libcxxabi; inherit (self.llvmPackages) libllvm; stdenv = self.stdenv.override { extraBuildInputs = [ self.darwin.CF ]; @@ -907,8 +882,6 @@ in bintools = self.llvmPackages.clangNoCompilerRtWithLibc.bintools.override { libc = self.darwin.Libsystem; }; - - extraPackages = [ self.llvmPackages.libcxxabi ]; }); }; @@ -924,7 +897,7 @@ in # Rebuild LLVM with LLVM. This stage also rebuilds certain dependencies needed by LLVM. # - # LLVM requires: libcxx libcxxabi libffi libiconv libxml2 ncurses zlib + # LLVM requires: libcxx libffi libiconv libxml2 ncurses zlib (prevStage: # previous stage2-CF stdenv: assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage; [ @@ -954,7 +927,7 @@ in assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage.llvmPackages; [ clang-unwrapped libclang libllvm llvm ]); - assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [ libcxx libcxxabi ]); + assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [ libcxx ]); assert lib.getVersion prevStage.stdenv.cc.bintools.bintools == lib.getVersion prevStage.darwin.cctools-llvm; @@ -986,7 +959,7 @@ in llvmPackages = super.llvmPackages // ( let libraries = super.llvmPackages.libraries.extend (_: _: { - inherit (prevStage.llvmPackages) compiler-rt libcxx libcxxabi; + inherit (prevStage.llvmPackages) compiler-rt libcxx; }); in { inherit libraries; } // libraries @@ -1033,7 +1006,7 @@ in assert lib.all isFromNixpkgs (with prevStage.darwin; [ dyld launchd libclosure libdispatch xnu ]); assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [ - clang-unwrapped libclang libllvm llvm compiler-rt libcxx libcxxabi + clang-unwrapped libclang libllvm llvm compiler-rt libcxx ]); assert lib.getVersion prevStage.stdenv.cc.bintools.bintools == lib.getVersion prevStage.darwin.cctools-llvm; @@ -1117,7 +1090,6 @@ in }; extraPackages = [ - self.llvmPackages.libcxxabi self.llvmPackages.compiler-rt ]; @@ -1158,7 +1130,7 @@ in }; }); libraries = super.llvmPackages.libraries.extend (_: _:{ - inherit (prevStage.llvmPackages) compiler-rt libcxx libcxxabi; + inherit (prevStage.llvmPackages) compiler-rt libcxx; }); in { inherit tools libraries; } // tools // libraries @@ -1200,7 +1172,7 @@ in assert lib.all isFromNixpkgs (with prevStage.darwin; [ dyld launchd libclosure libdispatch xnu ]); assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [ - clang-unwrapped libclang libllvm llvm compiler-rt libcxx libcxxabi + clang-unwrapped libclang libllvm llvm compiler-rt libcxx ]); assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage; [ @@ -1312,8 +1284,6 @@ in compiler-rt.dev libcxx libcxx.dev - libcxxabi - libcxxabi.dev lld llvm llvm.lib @@ -1356,7 +1326,7 @@ in inherit (prevStage.llvmPackages) clang clang-unwrapped libclang libllvm llvm; }); libraries = super.llvmPackages.libraries.extend (_: _: { - inherit (prevStage.llvmPackages) compiler-rt libcxx libcxxabi; + inherit (prevStage.llvmPackages) compiler-rt libcxx; }); in { inherit tools libraries; } // tools // libraries @@ -1382,7 +1352,6 @@ in assert isBuiltByNixpkgsCompiler prevStage.llvmPackages.clang-unwrapped; assert isBuiltByNixpkgsCompiler prevStage.llvmPackages.libllvm; assert isBuiltByNixpkgsCompiler prevStage.llvmPackages.libcxx; - assert isBuiltByNixpkgsCompiler prevStage.llvmPackages.libcxxabi; assert isBuiltByNixpkgsCompiler prevStage.llvmPackages.compiler-rt; { inherit (prevStage) config overlays stdenv; }) ] diff --git a/pkgs/stdenv/darwin/make-bootstrap-tools.nix b/pkgs/stdenv/darwin/make-bootstrap-tools.nix index 384567739d0e8..be891aecd2f6f 100644 --- a/pkgs/stdenv/darwin/make-bootstrap-tools.nix +++ b/pkgs/stdenv/darwin/make-bootstrap-tools.nix @@ -116,7 +116,11 @@ rec { cp -rd ${lib.getLib llvmPackages.clang-unwrapped}/lib/* $out/lib cp -d ${lib.getLib llvmPackages.libcxx}/lib/libc++*.dylib $out/lib + '' + # libc++abi is contained in libcxx for LLVM12+. Remove once unpinned from LLVM11 + + lib.optionalString (llvmPackages ? libcxxabi) '' cp -d ${lib.getLib llvmPackages.libcxxabi}/lib/libc++abi*.dylib $out/lib + '' + '' cp -d ${lib.getLib llvmPackages.compiler-rt}/lib/darwin/libclang_rt* $out/lib/darwin cp -d ${lib.getLib llvmPackages.compiler-rt}/lib/libclang_rt* $out/lib cp -d ${lib.getLib llvmPackages.llvm.lib}/lib/libLLVM.dylib $out/lib diff --git a/pkgs/stdenv/darwin/unpack-bootstrap-tools-aarch64.sh b/pkgs/stdenv/darwin/unpack-bootstrap-tools-aarch64.sh index 63b72972d7178..4bb84f6409cbd 100644 --- a/pkgs/stdenv/darwin/unpack-bootstrap-tools-aarch64.sh +++ b/pkgs/stdenv/darwin/unpack-bootstrap-tools-aarch64.sh @@ -19,6 +19,11 @@ updateInstallName() { cp "$path" "$path.new" install_name_tool -id "$path" "$path.new" + # workaround for https://github.com/NixOS/nixpkgs/issues/294518 + # libc++.1.0.dylib contains wrong LC_RPATH + if [[ ${path} == *libc++.1.0.dylib ]]; then + install_name_tool -add_rpath @loader_path/.. "${path}.new" + fi codesign -f -i "$(basename "$path")" -s - "$path.new" mv -f "$path.new" "$path" } |