termux-packages/packages/swift/swiftpm-no-cmake-bootstrap....

166 lines
6.3 KiB
Diff

commit c815b71f466ff1b649f73536a81c52cd1981a34b
Date: Sat, 24 Oct 2020 13:32:23 +0530
Subject: [bootstrap] Add a --skip-cmake-bootstrap flag to use a
prebuilt swift-build
Rather than building with CMake and then using that freshly built swift-build
to build it with itself, add this flag to check for a prebuilt swift-build next
to swiftc and use that instead if it's there. The PackageDescription libraries
are still built using CMake, as this repo's Package.swift only builds the latest
4_2 version.
diff --git a/swiftpm/CMakeLists.txt b/swiftpm/CMakeLists.txt
index 405b3c56..f1fcf16d 100644
--- a/swiftpm/CMakeLists.txt
+++ b/swiftpm/CMakeLists.txt
@@ -31,13 +31,16 @@ endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
option(BUILD_SHARED_LIBS "Build shared libraryes by default" YES)
+option(FIND_PM_DEPS "Search for all external Package Manager dependencies" YES)
+if(FIND_PM_DEPS)
find_package(TSC CONFIG REQUIRED)
find_package(LLBuild CONFIG)
if(NOT LLBuild_FOUND)
find_package(LLBuild REQUIRED)
endif()
+endif()
find_package(dispatch QUIET)
find_package(Foundation QUIET)
diff --git a/swiftpm/Utilities/bootstrap b/swiftpm/Utilities/bootstrap
index 4cc7dd01..cd13cda4 100755
--- a/swiftpm/Utilities/bootstrap
+++ b/swiftpm/Utilities/bootstrap
@@ -113,6 +113,10 @@ def add_build_args(parser):
"--release",
action="store_true",
help="enables building SwiftPM in release mode")
+ parser.add_argument(
+ "--skip-cmake-bootstrap",
+ action="store_true",
+ help="build with prebuilt package manager in toolchain if it exists")
parser.add_argument(
"--libswiftpm-install-dir",
metavar='PATH',
@@ -174,6 +178,8 @@ def parse_build_args(args):
args.bootstrap_dir = os.path.join(args.target_dir, "bootstrap")
args.conf = 'release' if args.release else 'debug'
args.bin_dir = os.path.join(args.target_dir, args.conf)
+ args.bootstrap = not args.skip_cmake_bootstrap or \
+ not os.path.exists(os.path.join(os.path.split(args.swiftc_path)[0], "swift-build"))
def parse_test_args(args):
"""Parses and cleans arguments necessary for the test action."""
@@ -270,7 +276,8 @@ def build(args):
if not args.llbuild_build_dir:
build_llbuild(args)
- build_tsc(args)
+ if args.bootstrap:
+ build_tsc(args)
build_swiftpm_with_cmake(args)
build_swiftpm_with_swiftpm(args)
@@ -376,7 +383,7 @@ def install_binary(args, binary, dest_dir):
# Build functions
# -----------------------------------------------------------
-def build_with_cmake(args, cmake_args, source_path, build_dir):
+def build_with_cmake(args, cmake_args, source_path, build_dir, targets=[]):
"""Runs CMake if needed, then builds with Ninja."""
cache_path = os.path.join(build_dir, "CMakeCache.txt")
if args.reconfigure or not os.path.isfile(cache_path) or not args.swiftc_path in open(cache_path).read():
@@ -404,6 +411,8 @@ def build_with_cmake(args, cmake_args, source_path, build_dir):
if args.verbose:
ninja_cmd.append("-v")
+ ninja_cmd += targets
+
call(ninja_cmd, cwd=build_dir, verbose=args.verbose)
def build_llbuild(args):
@@ -444,16 +453,22 @@ def build_swiftpm_with_cmake(args):
"""Builds SwiftPM using CMake."""
note("Building SwiftPM (with CMake)")
- cmake_flags = [
- get_llbuild_cmake_arg(args),
- "-DTSC_DIR=" + os.path.join(args.tsc_build_dir, "cmake/modules"),
- ]
+ if args.bootstrap:
+ cmake_flags = [
+ get_llbuild_cmake_arg(args),
+ "-DTSC_DIR=" + os.path.join(args.tsc_build_dir, "cmake/modules"),
+ "-DFIND_PM_DEPS:BOOL=YES",
+ ]
+ else:
+ cmake_flags = [ "-DFIND_PM_DEPS:BOOL=NO" ]
if platform.system() == 'Darwin':
cmake_flags.append("-DCMAKE_C_FLAGS=-target %s%s" % (get_build_target(args), g_macos_deployment_target))
cmake_flags.append("-DCMAKE_OSX_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
- build_with_cmake(args, cmake_flags, args.project_root, args.bootstrap_dir)
+ targets = [] if args.bootstrap else ["PD4", "PD4_2"]
+
+ build_with_cmake(args, cmake_flags, args.project_root, args.bootstrap_dir, targets)
if args.llbuild_link_framework:
swift_build = os.path.join(args.bootstrap_dir, "bin/swift-build")
@@ -463,15 +478,21 @@ def build_swiftpm_with_cmake(args):
def build_swiftpm_with_swiftpm(args):
"""Builds SwiftPM using the version of SwiftPM built with CMake."""
- note("Building SwiftPM (with swift-build)")
swiftpm_args = [
"SWIFT_EXEC=" + args.swiftc_path,
- "SWIFTPM_PD_LIBS=" + os.path.join(args.bootstrap_dir, "pm"),
- os.path.join(args.bootstrap_dir, "bin/swift-build"),
- "--disable-sandbox",
]
+ if args.bootstrap:
+ note("Building SwiftPM (with a freshly built swift-build)")
+ swiftpm_args.append("SWIFTPM_PD_LIBS=" + os.path.join(args.bootstrap_dir, "pm"))
+ swiftpm_args.append(os.path.join(args.bootstrap_dir, "bin/swift-build"))
+ else:
+ note("Building SwiftPM (with a prebuilt swift-build)")
+ swiftpm_args.append(os.path.join(os.path.split(args.swiftc_path)[0], "swift-build"))
+
+ swiftpm_args.append("--disable-sandbox")
+
call_swiftpm(args, swiftpm_args)
# Setup symlinks that'll allow using swiftpm from the build directory.
@@ -527,16 +548,17 @@ def get_swiftpm_env_cmd(args):
env_cmd.append("SWIFTCI_USE_LOCAL_DEPS=1")
env_cmd.append("SWIFTPM_MACOS_DEPLOYMENT_TARGET=%s" % g_macos_deployment_target)
- libs_joined = ":".join([
- os.path.join(args.bootstrap_dir, "lib"),
- os.path.join(args.tsc_build_dir, "lib"),
- os.path.join(args.llbuild_build_dir, "lib"),
- ])
+ if args.bootstrap:
+ libs_joined = ":".join([
+ os.path.join(args.bootstrap_dir, "lib"),
+ os.path.join(args.tsc_build_dir, "lib"),
+ os.path.join(args.llbuild_build_dir, "lib"),
+ ])
- if platform.system() == 'Darwin':
- env_cmd.append("DYLD_LIBRARY_PATH=%s" % libs_joined)
- else:
- env_cmd.append("LD_LIBRARY_PATH=%s" % libs_joined)
+ if platform.system() == 'Darwin':
+ env_cmd.append("DYLD_LIBRARY_PATH=%s" % libs_joined)
+ else:
+ env_cmd.append("LD_LIBRARY_PATH=%s" % libs_joined)
return env_cmd