Merge pull request #245641 from reckenrode/swift-libc++

swift: use stdenv libc++ on Darwin
This commit is contained in:
Weijia Wang 2023-08-06 00:17:44 +02:00 committed by GitHub
commit c839b1f9c3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -2,11 +2,14 @@
, pkgs
, newScope
, darwin
, llvmPackages
, llvmPackages_15
, overrideCC
}:
let
swiftLlvmPackages = llvmPackages_15;
self = rec {
callPackage = newScope self;
@ -24,12 +27,25 @@ let
# used in Swift, and applies the same libc overrides as `apple_sdk.stdenv`.
clang = if pkgs.stdenv.isDarwin
then
llvmPackages_15.clang.override rec {
swiftLlvmPackages.clang.override rec {
libc = apple_sdk.Libsystem;
bintools = pkgs.bintools.override { inherit libc; };
# Ensure that Swifts internal clang uses the same libc++ and libc++abi as the
# default Darwin stdenv. Using the default libc++ avoids issues (such as crashes)
# that can happen when a Swift application dynamically links different versions
# of libc++ and libc++abi than libraries it links are using.
inherit (llvmPackages) libcxx;
extraPackages = [
llvmPackages.libcxxabi
# Use the compiler-rt associated with clang, but use the libc++abi from the stdenv
# to avoid linking against two different versions (for the same reasons as above).
(swiftLlvmPackages.compiler-rt.override {
inherit (llvmPackages) libcxxabi;
})
];
}
else
llvmPackages_15.clang;
swiftLlvmPackages.clang;
# Overrides that create a useful environment for swift packages, allowing
# packaging with `swiftPackages.callPackage`. These are similar to