2022-07-19 15:30:12 +02:00
|
|
|
|
{
|
|
|
|
|
lib,
|
|
|
|
|
pkgs,
|
|
|
|
|
newScope,
|
|
|
|
|
darwin,
|
2023-07-23 20:40:26 -04:00
|
|
|
|
llvmPackages,
|
2023-04-01 21:43:12 +02:00
|
|
|
|
llvmPackages_15,
|
2022-07-19 15:30:12 +02:00
|
|
|
|
overrideCC,
|
2024-09-25 21:47:47 -04:00
|
|
|
|
overrideLibcxx,
|
2017-01-24 08:23:15 -06:00
|
|
|
|
}:
|
|
|
|
|
|
|
|
|
|
let
|
2023-07-23 20:40:26 -04:00
|
|
|
|
swiftLlvmPackages = llvmPackages_15;
|
|
|
|
|
|
2022-07-19 15:30:12 +02:00
|
|
|
|
self = rec {
|
|
|
|
|
|
|
|
|
|
callPackage = newScope self;
|
|
|
|
|
|
2023-04-01 21:43:12 +02:00
|
|
|
|
# Swift builds its own Clang for internal use. We wrap that clang with a
|
|
|
|
|
# cc-wrapper derived from the clang configured below. Because cc-wrapper
|
|
|
|
|
# applies a specific resource-root, the two versions are best matched, or
|
|
|
|
|
# we'll often run into compilation errors.
|
2022-07-19 15:30:12 +02:00
|
|
|
|
#
|
2023-04-01 21:43:12 +02:00
|
|
|
|
# The following selects the correct Clang version, matching the version
|
2024-09-25 21:47:47 -04:00
|
|
|
|
# used in Swift.
|
|
|
|
|
inherit (swiftLlvmPackages) clang;
|
2022-07-19 15:30:12 +02:00
|
|
|
|
|
|
|
|
|
# Overrides that create a useful environment for swift packages, allowing
|
2024-09-25 21:47:47 -04:00
|
|
|
|
# packaging with `swiftPackages.callPackage`.
|
2022-07-19 15:30:12 +02:00
|
|
|
|
inherit (clang) bintools;
|
2024-09-25 21:47:47 -04:00
|
|
|
|
stdenv =
|
|
|
|
|
let
|
|
|
|
|
stdenv' = overrideCC pkgs.stdenv clang;
|
|
|
|
|
in
|
|
|
|
|
# Ensure that Swift’s internal clang uses the same libc++ and libc++abi as the
|
|
|
|
|
# default clang’s 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.
|
|
|
|
|
if stdenv'.cc.libcxx != null then overrideLibcxx stdenv' else stdenv';
|
2022-07-19 15:30:12 +02:00
|
|
|
|
|
|
|
|
|
swift-unwrapped = callPackage ./compiler {
|
2024-07-17 22:16:28 -04:00
|
|
|
|
inherit (darwin) DarwinTools sigtool;
|
2022-07-19 15:30:12 +02:00
|
|
|
|
};
|
|
|
|
|
|
2022-08-26 08:09:17 +02:00
|
|
|
|
swiftNoSwiftDriver = callPackage ./wrapper {
|
2022-07-19 15:30:12 +02:00
|
|
|
|
swift = swift-unwrapped;
|
2022-08-26 08:09:17 +02:00
|
|
|
|
useSwiftDriver = false;
|
2022-01-23 02:22:33 -08:00
|
|
|
|
};
|
2021-08-01 11:25:01 -04:00
|
|
|
|
|
2022-07-25 20:36:50 +02:00
|
|
|
|
Dispatch =
|
|
|
|
|
if stdenv.hostPlatform.isDarwin then
|
2024-09-25 21:47:47 -04:00
|
|
|
|
null # part of apple-sdk
|
2022-08-26 08:09:17 +02:00
|
|
|
|
else
|
|
|
|
|
callPackage ./libdispatch { swift = swiftNoSwiftDriver; };
|
2022-07-25 20:36:50 +02:00
|
|
|
|
|
2022-07-25 21:42:22 +02:00
|
|
|
|
Foundation =
|
|
|
|
|
if stdenv.hostPlatform.isDarwin then
|
2024-09-25 21:47:47 -04:00
|
|
|
|
null # part of apple-sdk
|
2022-08-26 08:09:17 +02:00
|
|
|
|
else
|
|
|
|
|
callPackage ./foundation { swift = swiftNoSwiftDriver; };
|
2022-07-25 21:42:22 +02:00
|
|
|
|
|
2022-07-25 21:45:15 +02:00
|
|
|
|
# TODO: Apple distributes a binary XCTest with Xcode, but it is not part of
|
|
|
|
|
# CLTools (or SUS), so would have to figure out how to fetch it. The binary
|
|
|
|
|
# version has several extra features, like a test runner and ObjC support.
|
|
|
|
|
XCTest = callPackage ./xctest {
|
|
|
|
|
inherit (darwin) DarwinTools;
|
2022-08-26 08:09:17 +02:00
|
|
|
|
swift = swiftNoSwiftDriver;
|
2022-07-25 21:45:15 +02:00
|
|
|
|
};
|
|
|
|
|
|
2022-07-25 21:57:00 +02:00
|
|
|
|
swiftpm = callPackage ./swiftpm {
|
2024-07-17 22:16:28 -04:00
|
|
|
|
inherit (darwin) DarwinTools;
|
2022-08-26 08:09:17 +02:00
|
|
|
|
swift = swiftNoSwiftDriver;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
swift-driver = callPackage ./swift-driver {
|
|
|
|
|
swift = swiftNoSwiftDriver;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
swift = callPackage ./wrapper {
|
|
|
|
|
swift = swift-unwrapped;
|
2022-07-25 21:57:00 +02:00
|
|
|
|
};
|
|
|
|
|
|
2025-04-14 09:29:14 -04:00
|
|
|
|
sourcekit-lsp = callPackage ./sourcekit-lsp { };
|
2022-07-30 17:33:18 +02:00
|
|
|
|
|
2025-04-14 09:29:14 -04:00
|
|
|
|
swift-docc = callPackage ./swift-docc { };
|
2022-08-26 08:09:01 +02:00
|
|
|
|
|
2023-05-06 13:26:53 +02:00
|
|
|
|
swift-format = callPackage ./swift-format { };
|
|
|
|
|
|
2024-07-17 23:33:42 -03:00
|
|
|
|
swiftpm2nix = callPackage ./swiftpm2nix { };
|
|
|
|
|
|
2017-01-24 08:23:15 -06:00
|
|
|
|
};
|
|
|
|
|
|
2022-07-19 15:30:12 +02:00
|
|
|
|
in
|
|
|
|
|
self
|