about summary refs log tree commit diff
path: root/pkgs/development/compilers/swift/swiftpm/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/compilers/swift/swiftpm/default.nix')
-rw-r--r--pkgs/development/compilers/swift/swiftpm/default.nix464
1 files changed, 0 insertions, 464 deletions
diff --git a/pkgs/development/compilers/swift/swiftpm/default.nix b/pkgs/development/compilers/swift/swiftpm/default.nix
deleted file mode 100644
index ff4f5f1e1b10..000000000000
--- a/pkgs/development/compilers/swift/swiftpm/default.nix
+++ /dev/null
@@ -1,464 +0,0 @@
-{ lib
-, stdenv
-, callPackage
-, fetchpatch
-, cmake
-, ninja
-, git
-, swift
-, swiftpm2nix
-, Foundation
-, XCTest
-, pkg-config
-, sqlite
-, ncurses
-, substituteAll
-, runCommandLocal
-, makeWrapper
-, DarwinTools # sw_vers
-, cctools # vtool
-, xcbuild
-, CryptoKit
-, LocalAuthentication
-}:
-
-let
-
-  inherit (swift) swiftOs swiftModuleSubdir swiftStaticModuleSubdir;
-  sharedLibraryExt = stdenv.hostPlatform.extensions.sharedLibrary;
-
-  sources = callPackage ../sources.nix { };
-  generated = swiftpm2nix.helpers ./generated;
-  cmakeGlue = callPackage ./cmake-glue.nix { };
-
-  # Common attributes for the bootstrap swiftpm and the final swiftpm.
-  commonAttrs = {
-    inherit (sources) version;
-    src = sources.swift-package-manager;
-    nativeBuildInputs = [ makeWrapper ];
-    # Required at run-time for the host platform to build package manifests.
-    propagatedBuildInputs = [ Foundation ];
-    patches = [
-      ./patches/cmake-disable-rpath.patch
-      ./patches/cmake-fix-quoting.patch
-      ./patches/disable-index-store.patch
-      ./patches/disable-sandbox.patch
-      ./patches/disable-xctest.patch
-      ./patches/fix-clang-cxx.patch
-      ./patches/nix-pkgconfig-vars.patch
-      (substituteAll {
-        src = ./patches/fix-stdlib-path.patch;
-        inherit (builtins) storeDir;
-        swiftLib = swift.swift.lib;
-      })
-    ];
-    postPatch = ''
-      # The location of xcrun is hardcoded. We need PATH lookup instead.
-      find Sources -name '*.swift' | xargs sed -i -e 's|/usr/bin/xcrun|xcrun|g'
-
-      # Patch the location where swiftpm looks for its API modules.
-      substituteInPlace Sources/PackageModel/UserToolchain.swift \
-        --replace \
-          'librariesPath = applicationPath.parentDirectory' \
-          "librariesPath = AbsolutePath(\"$out\")"
-
-      # Fix case-sensitivity issues.
-      # Upstream PR: https://github.com/apple/swift-package-manager/pull/6500
-      substituteInPlace Sources/CMakeLists.txt \
-        --replace \
-          'packageCollectionsSigning' \
-          'PackageCollectionsSigning'
-      substituteInPlace Sources/PackageCollectionsSigning/CMakeLists.txt \
-        --replace \
-          'SubjectPublickeyInfo' \
-          'SubjectPublicKeyInfo'
-      substituteInPlace Sources/PackageCollections/CMakeLists.txt \
-        --replace \
-          'FilepackageCollectionsSourcesStorage' \
-          'FilePackageCollectionsSourcesStorage'
-    '';
-  };
-
-  # Tools invoked by swiftpm at run-time.
-  runtimeDeps = [ git ]
-    ++ lib.optionals stdenv.isDarwin [
-      xcbuild.xcrun
-      # These tools are part of cctools, but adding that as a build input puts
-      # an unwrapped linker in PATH, and breaks builds. This small derivation
-      # exposes just the tools we need:
-      # - vtool is used to determine a minimum deployment target.
-      # - libtool is used to build static libraries.
-      (runCommandLocal "swiftpm-cctools" { } ''
-        mkdir -p $out/bin
-        ln -s ${cctools}/bin/vtool $out/bin/vtool
-        ln -s ${cctools}/bin/libtool $out/bin/libtool
-      '')
-    ];
-
-  # Common attributes for the bootstrap derivations.
-  mkBootstrapDerivation = attrs: stdenv.mkDerivation (attrs // {
-    nativeBuildInputs = (attrs.nativeBuildInputs or [ ])
-      ++ [ cmake ninja swift ]
-      ++ lib.optionals stdenv.isDarwin [ DarwinTools ];
-
-    buildInputs = (attrs.buildInputs or [ ])
-      ++ [ Foundation ];
-
-    postPatch = (attrs.postPatch or "")
-      + lib.optionalString stdenv.isDarwin ''
-        # On Darwin only, Swift uses arm64 as cpu arch.
-        if [ -e cmake/modules/SwiftSupport.cmake ]; then
-          substituteInPlace cmake/modules/SwiftSupport.cmake \
-            --replace '"aarch64" PARENT_SCOPE' '"arm64" PARENT_SCOPE'
-        fi
-      '';
-
-    preConfigure = (attrs.preConfigure or "")
-      + ''
-        # Builds often don't set a target, and our default minimum macOS deployment
-        # target on x86_64-darwin is too low. Harmless on non-Darwin.
-        export MACOSX_DEPLOYMENT_TARGET=10.15.4
-      '';
-
-    postInstall = (attrs.postInstall or "")
-      + lib.optionalString stdenv.isDarwin ''
-        # The install name of libraries is incorrectly set to lib/ (via our
-        # CMake setup hook) instead of lib/swift/. This'd be easily fixed by
-        # fixDarwinDylibNames, but some builds create libraries that reference
-        # eachother, and we also have to fix those references.
-        dylibs="$(find $out/lib/swift* -name '*.dylib')"
-        changes=""
-        for dylib in $dylibs; do
-          changes+=" -change $(otool -D $dylib | tail -n 1) $dylib"
-        done
-        for dylib in $dylibs; do
-          install_name_tool -id $dylib $changes $dylib
-        done
-      '';
-
-    cmakeFlags = (attrs.cmakeFlags or [ ])
-      ++ [
-        # Some builds link to libraries within the same build. Make sure these
-        # create references to $out. None of our builds run their own products,
-        # so we don't have to account for that scenario.
-        "-DCMAKE_BUILD_WITH_INSTALL_NAME_DIR=ON"
-      ];
-  });
-
-  # On Darwin, we only want ncurses in the linker search path, because headers
-  # are part of libsystem. Adding its headers to the search path causes strange
-  # mixing and errors.
-  # TODO: Find a better way to prevent this conflict.
-  ncursesInput = if stdenv.isDarwin then ncurses.out else ncurses;
-
-  # Derivations for bootstrapping dependencies using CMake.
-  # This is based on the `swiftpm/Utilities/bootstrap` script.
-  #
-  # Some of the installation steps here are a bit hacky, because it seems like
-  # these packages were not really meant to be installed using CMake. The
-  # regular swiftpm bootstrap simply refers to the source and build
-  # directories. The advantage of separate builds is that we can more easily
-  # link libs together using existing Nixpkgs infra.
-  #
-  # In the end, we don't expose these derivations, and they only exist during
-  # the bootstrap phase. The final swiftpm derivation does not depend on them.
-
-  swift-system = mkBootstrapDerivation {
-    name = "swift-system";
-    src = generated.sources.swift-system;
-
-    postInstall = cmakeGlue.SwiftSystem
-      + lib.optionalString (!stdenv.isDarwin) ''
-        # The cmake rules apparently only use the Darwin install convention.
-        # Fix up the installation so the module can be found on non-Darwin.
-        mkdir -p $out/${swiftStaticModuleSubdir}
-        mv $out/lib/swift_static/${swiftOs}/*.swiftmodule $out/${swiftStaticModuleSubdir}/
-      '';
-  };
-
-  swift-collections = mkBootstrapDerivation {
-    name = "swift-collections";
-    src = generated.sources.swift-collections;
-
-    postPatch = ''
-      # Only builds static libs on Linux, but this installation difference is a
-      # hassle. Because this installation is temporary for the bootstrap, may
-      # as well build static libs everywhere.
-      sed -i -e '/BUILD_SHARED_LIBS/d' CMakeLists.txt
-    '';
-
-    postInstall = cmakeGlue.SwiftCollections
-      + lib.optionalString (!stdenv.isDarwin) ''
-        # The cmake rules apparently only use the Darwin install convention.
-        # Fix up the installation so the module can be found on non-Darwin.
-        mkdir -p $out/${swiftStaticModuleSubdir}
-        mv $out/lib/swift_static/${swiftOs}/*.swiftmodule $out/${swiftStaticModuleSubdir}/
-      '';
-  };
-
-  # Part of this patch fixes for glibc 2.39: glibc patch 64b1a44183a3094672ed304532bedb9acc707554
-  # marks the `FILE*` argument to a few functions including `ferror` & `fread` as non-null. However
-  # the code passes an `Optional<T>` to these functions.
-  # This patch uses a `guard` which effectively unwraps the type (or throws an exception).
-  swift-tools-support-core-glibc-fix = fetchpatch {
-    url = "https://github.com/apple/swift-tools-support-core/commit/990afca47e75cce136d2f59e464577e68a164035.patch";
-    hash = "sha256-PLzWsp+syiUBHhEFS8+WyUcSae5p0Lhk7SSRdNvfouE=";
-    includes = [ "Sources/TSCBasic/FileSystem.swift" ];
-  };
-
-  swift-tools-support-core = mkBootstrapDerivation {
-    name = "swift-tools-support-core";
-    src = generated.sources.swift-tools-support-core;
-
-    patches = [
-      swift-tools-support-core-glibc-fix
-    ];
-
-    buildInputs = [
-      swift-system
-      sqlite
-    ];
-
-    postInstall = cmakeGlue.TSC + ''
-      # Swift modules are not installed.
-      mkdir -p $out/${swiftModuleSubdir}
-      cp swift/*.swift{module,doc} $out/${swiftModuleSubdir}/
-
-      # Static libs are not installed.
-      cp lib/*.a $out/lib/
-
-      # Headers are not installed.
-      mkdir -p $out/include
-      cp -r ../Sources/TSCclibc/include $out/include/TSC
-    '';
-  };
-
-  swift-argument-parser = mkBootstrapDerivation {
-    name = "swift-argument-parser";
-    src = generated.sources.swift-argument-parser;
-
-    buildInputs = [ ncursesInput sqlite ];
-
-    cmakeFlags = [
-      "-DBUILD_TESTING=NO"
-      "-DBUILD_EXAMPLES=NO"
-    ];
-
-    postInstall = cmakeGlue.ArgumentParser
-      + lib.optionalString stdenv.isLinux ''
-        # Fix rpath so ArgumentParserToolInfo can be found.
-        patchelf --add-rpath "$out/lib/swift/${swiftOs}" \
-          $out/lib/swift/${swiftOs}/libArgumentParser.so
-      '';
-  };
-
-  Yams = mkBootstrapDerivation {
-    name = "Yams";
-    src = generated.sources.Yams;
-
-    # Conflicts with BUILD file on case-insensitive filesystems.
-    cmakeBuildDir = "_build";
-
-    postInstall = cmakeGlue.Yams;
-  };
-
-  llbuild = mkBootstrapDerivation {
-    name = "llbuild";
-    src = generated.sources.swift-llbuild;
-
-    nativeBuildInputs = lib.optional stdenv.isDarwin xcbuild;
-    buildInputs = [ ncursesInput sqlite ];
-
-    patches = [
-      ./patches/llbuild-cmake-disable-rpath.patch
-    ];
-
-    postPatch = ''
-      # Substitute ncurses for curses.
-      find . -name CMakeLists.txt | xargs sed -i -e 's/curses/ncurses/'
-
-      # Use absolute install names instead of rpath.
-      substituteInPlace \
-        products/libllbuild/CMakeLists.txt \
-        products/llbuildSwift/CMakeLists.txt \
-        --replace '@rpath' "$out/lib"
-
-      # This subdirectory is enabled for Darwin only, but requires ObjC XCTest
-      # (and only Swift XCTest is open source).
-      substituteInPlace perftests/CMakeLists.txt \
-        --replace 'add_subdirectory(Xcode/' '#add_subdirectory(Xcode/'
-    '';
-
-    cmakeFlags = [
-      "-DLLBUILD_SUPPORT_BINDINGS=Swift"
-    ];
-
-    postInstall = cmakeGlue.LLBuild + ''
-      # Install module map.
-      cp ../products/libllbuild/include/module.modulemap $out/include
-
-      # Swift modules are not installed.
-      mkdir -p $out/${swiftModuleSubdir}
-      cp products/llbuildSwift/*.swift{module,doc} $out/${swiftModuleSubdir}/
-    '';
-  };
-
-  swift-driver = mkBootstrapDerivation {
-    name = "swift-driver";
-    src = generated.sources.swift-driver;
-
-    buildInputs = [
-      Yams
-      llbuild
-      swift-system
-      swift-argument-parser
-      swift-tools-support-core
-    ];
-
-    postPatch = ''
-      # Tries to link against CYaml, but that's private.
-      substituteInPlace Sources/SwiftDriver/CMakeLists.txt \
-        --replace CYaml ""
-    '';
-
-    postInstall = cmakeGlue.SwiftDriver + ''
-      # Swift modules are not installed.
-      mkdir -p $out/${swiftModuleSubdir}
-      cp swift/*.swift{module,doc} $out/${swiftModuleSubdir}/
-    '';
-  };
-
-  swift-crypto = mkBootstrapDerivation {
-    name = "swift-crypto";
-    src = generated.sources.swift-crypto;
-
-    postPatch = ''
-      # Fix use of hardcoded tool paths on Darwin.
-      substituteInPlace CMakeLists.txt \
-        --replace /usr/bin/ar $NIX_CC/bin/ar
-      substituteInPlace CMakeLists.txt \
-        --replace /usr/bin/ranlib $NIX_CC/bin/ranlib
-    '';
-
-    postInstall = cmakeGlue.SwiftCrypto + ''
-      # Static libs are not installed.
-      cp lib/*.a $out/lib/
-
-      # Headers are not installed.
-      cp -r ../Sources/CCryptoBoringSSL/include $out/include
-    '';
-  };
-
-  # Build a bootrapping swiftpm using CMake.
-  swiftpm-bootstrap = mkBootstrapDerivation (commonAttrs // {
-    pname = "swiftpm-bootstrap";
-
-    buildInputs = [
-      llbuild
-      sqlite
-      swift-argument-parser
-      swift-collections
-      swift-crypto
-      swift-driver
-      swift-system
-      swift-tools-support-core
-    ];
-
-    cmakeFlags = [
-      "-DUSE_CMAKE_INSTALL=ON"
-    ];
-
-    postInstall = ''
-      for program in $out/bin/swift-*; do
-        wrapProgram $program --prefix PATH : ${lib.makeBinPath runtimeDeps}
-      done
-    '';
-  });
-
-# Build the final swiftpm with the bootstrapping swiftpm.
-in stdenv.mkDerivation (commonAttrs // {
-  pname = "swiftpm";
-
-  nativeBuildInputs = commonAttrs.nativeBuildInputs ++ [
-    pkg-config
-    swift
-    swiftpm-bootstrap
-  ];
-  buildInputs = [
-    ncursesInput
-    sqlite
-    XCTest
-  ]
-    ++ lib.optionals stdenv.isDarwin [
-      CryptoKit
-      LocalAuthentication
-    ];
-
-  configurePhase = generated.configure + ''
-    # Functionality provided by Xcode XCTest, but not available in
-    # swift-corelibs-xctest.
-    swiftpmMakeMutable swift-tools-support-core
-    substituteInPlace .build/checkouts/swift-tools-support-core/Sources/TSCTestSupport/XCTestCasePerf.swift \
-      --replace 'canImport(Darwin)' 'false'
-    patch -p1 -d .build/checkouts/swift-tools-support-core -i ${swift-tools-support-core-glibc-fix}
-
-    # Prevent a warning about SDK directories we don't have.
-    swiftpmMakeMutable swift-driver
-    patch -p1 -d .build/checkouts/swift-driver -i ${substituteAll {
-      src = ../swift-driver/patches/prevent-sdk-dirs-warnings.patch;
-      inherit (builtins) storeDir;
-    }}
-  '';
-
-  buildPhase = ''
-    # Required to link with swift-corelibs-xctest on Darwin.
-    export SWIFTTSC_MACOS_DEPLOYMENT_TARGET=10.12
-
-    TERM=dumb swift-build -c release
-  '';
-
-  # TODO: Tests depend on indexstore-db being provided by an existing Swift
-  # toolchain. (ie. looks for `../lib/libIndexStore.so` relative to swiftc.
-  #doCheck = true;
-  #checkPhase = ''
-  #  TERM=dumb swift-test -c release
-  #'';
-
-  # The following is dervied from Utilities/bootstrap, see install_swiftpm.
-  installPhase = ''
-    binPath="$(swift-build --show-bin-path -c release)"
-
-    mkdir -p $out/bin $out/lib/swift
-
-    cp $binPath/swift-package-manager $out/bin/swift-package
-    wrapProgram $out/bin/swift-package \
-      --prefix PATH : ${lib.makeBinPath runtimeDeps}
-    for tool in swift-build swift-test swift-run swift-package-collection swift-experimental-destination; do
-      ln -s $out/bin/swift-package $out/bin/$tool
-    done
-
-    installSwiftpmModule() {
-      mkdir -p $out/lib/swift/pm/$2
-      cp $binPath/lib$1${sharedLibraryExt} $out/lib/swift/pm/$2/
-
-      if [[ -f $binPath/$1.swiftinterface ]]; then
-        cp $binPath/$1.swiftinterface $out/lib/swift/pm/$2/
-      else
-        cp -r $binPath/$1.swiftmodule $out/lib/swift/pm/$2/
-      fi
-      cp $binPath/$1.swiftdoc $out/lib/swift/pm/$2/
-    }
-    installSwiftpmModule PackageDescription ManifestAPI
-    installSwiftpmModule PackagePlugin PluginAPI
-  '';
-
-  setupHook = ./setup-hook.sh;
-
-  meta = {
-    description = "Package Manager for the Swift Programming Language";
-    homepage = "https://github.com/apple/swift-package-manager";
-    platforms = with lib.platforms; linux ++ darwin;
-    license = lib.licenses.asl20;
-    maintainers = with lib.maintainers; [ dtzWill trepetti dduan trundle stephank ];
-  };
-})