diff --git a/CMakeLists.txt b/CMakeLists.txt index a585788051c..a638ceb75e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,7 @@ if(FIND_PM_DEPS) find_package(SwiftASN1 CONFIG REQUIRED) find_package(SwiftCertificates CONFIG REQUIRED) find_package(SwiftCrypto CONFIG REQUIRED) + find_package(SwiftBuild CONFIG REQUIRED) endif() find_package(dispatch QUIET) diff --git a/Package.swift b/Package.swift index bbca6f77b32..ef625e8e9a2 100644 --- a/Package.swift +++ b/Package.swift @@ -1108,8 +1108,7 @@ if ProcessInfo.processInfo.environment["ENABLE_APPLE_PRODUCT_TYPES"] == "1" { } } -if ProcessInfo.processInfo.environment["SWIFTPM_SWBUILD_FRAMEWORK"] == nil && - ProcessInfo.processInfo.environment["SWIFTPM_NO_SWBUILD_DEPENDENCY"] == nil { +if ProcessInfo.processInfo.environment["SWIFTPM_SWBUILD_FRAMEWORK"] == nil { let swiftbuildsupport: Target = package.targets.first(where: { $0.name == "SwiftBuildSupport" } )! swiftbuildsupport.dependencies += [ diff --git a/Sources/SwiftBuildSupport/CMakeLists.txt b/Sources/SwiftBuildSupport/CMakeLists.txt index ed516095346..3bd426bbff4 100644 --- a/Sources/SwiftBuildSupport/CMakeLists.txt +++ b/Sources/SwiftBuildSupport/CMakeLists.txt @@ -24,6 +24,8 @@ target_link_libraries(SwiftBuildSupport PUBLIC TSCBasic TSCUtility PackageGraph + SwiftBuild::SwiftBuild + SwiftBuild::SWBBuildService ) set_target_properties(SwiftBuildSupport PROPERTIES diff --git a/Sources/SwiftBuildSupport/DotPIFSerializer.swift b/Sources/SwiftBuildSupport/DotPIFSerializer.swift index c7c681ecb12..daa20748085 100644 --- a/Sources/SwiftBuildSupport/DotPIFSerializer.swift +++ b/Sources/SwiftBuildSupport/DotPIFSerializer.swift @@ -9,7 +9,6 @@ import Basics import Foundation import protocol TSCBasic.OutputByteStream -#if canImport(SwiftBuild) import SwiftBuild /// Serializes the specified PIF as a **Graphviz** directed graph. @@ -223,5 +222,3 @@ fileprivate extension String { "\"" } } - -#endif diff --git a/Sources/SwiftBuildSupport/PIF.swift b/Sources/SwiftBuildSupport/PIF.swift index b455edbd32b..ff2fde612a1 100644 --- a/Sources/SwiftBuildSupport/PIF.swift +++ b/Sources/SwiftBuildSupport/PIF.swift @@ -17,7 +17,6 @@ import PackageModel import struct TSCBasic.ByteString -#if canImport(SwiftBuild) import enum SwiftBuild.ProjectModel /// The Project Interchange Format (PIF) is a structured representation of the @@ -286,5 +285,3 @@ extension PIF { workspace.signature = try signature(of: workspace) } } - -#endif // SwiftBuild diff --git a/Sources/SwiftBuildSupport/PIFBuilder.swift b/Sources/SwiftBuildSupport/PIFBuilder.swift index 7952de26642..d42cca3d1c8 100644 --- a/Sources/SwiftBuildSupport/PIFBuilder.swift +++ b/Sources/SwiftBuildSupport/PIFBuilder.swift @@ -24,9 +24,7 @@ import func TSCBasic.memoize import func TSCBasic.topologicalSort import var TSCBasic.stdoutStream -#if canImport(SwiftBuild) import enum SwiftBuild.ProjectModel -#endif /// The parameters required by `PIFBuilder`. struct PIFBuilderParameters { @@ -103,7 +101,6 @@ public final class PIFBuilder { printPIFManifestGraphviz: Bool = false, buildParameters: BuildParameters ) throws -> String { - #if canImport(SwiftBuild) let encoder = prettyPrint ? JSONEncoder.makeWithDefaults() : JSONEncoder() if !preservePIFModelStructure { @@ -129,13 +126,8 @@ public final class PIFBuilder { } return pifString - #else - fatalError("Swift Build support is not linked in.") - #endif } - - #if canImport(SwiftBuild) - + private var cachedPIF: PIF.TopLevelObject? /// Constructs a `PIF.TopLevelObject` representing the package graph. @@ -192,8 +184,6 @@ public final class PIFBuilder { return PIF.TopLevelObject(workspace: workspace) } } - - #endif // Convenience method for generating PIF. public static func generatePIF( @@ -214,8 +204,6 @@ public final class PIFBuilder { } } -#if canImport(SwiftBuild) - fileprivate final class PackagePIFBuilderDelegate: PackagePIFBuilder.BuildDelegate { let package: ResolvedPackage @@ -421,8 +409,6 @@ fileprivate func buildAggregateProject( return aggregateProject } -#endif - public enum PIFGenerationError: Error { case rootPackageNotFound, multipleRootPackagesFound diff --git a/Sources/SwiftBuildSupport/PackagePIFBuilder+Helpers.swift b/Sources/SwiftBuildSupport/PackagePIFBuilder+Helpers.swift index b0273deb5a3..90cc33e8832 100644 --- a/Sources/SwiftBuildSupport/PackagePIFBuilder+Helpers.swift +++ b/Sources/SwiftBuildSupport/PackagePIFBuilder+Helpers.swift @@ -61,8 +61,6 @@ func targetName(forProductName name: String, suffix: String? = nil) -> String { return "\(name)\(suffix)-product" } -#if canImport(SwiftBuild) - import enum SwiftBuild.ProjectModel // MARK: - PIF GUID Helpers @@ -1216,4 +1214,3 @@ extension UserDefaults { } } -#endif diff --git a/Sources/SwiftBuildSupport/PackagePIFBuilder+Plugins.swift b/Sources/SwiftBuildSupport/PackagePIFBuilder+Plugins.swift index 2f89010bfc9..f78bb1107fa 100644 --- a/Sources/SwiftBuildSupport/PackagePIFBuilder+Plugins.swift +++ b/Sources/SwiftBuildSupport/PackagePIFBuilder+Plugins.swift @@ -18,8 +18,6 @@ import enum Basics.Sandbox import struct Basics.AbsolutePath import struct Basics.SourceControlURL -#if canImport(SwiftBuild) - import enum SwiftBuild.ProjectModel extension PackagePIFBuilder { @@ -136,4 +134,3 @@ extension PackagePIFBuilder { } } -#endif diff --git a/Sources/SwiftBuildSupport/PackagePIFBuilder.swift b/Sources/SwiftBuildSupport/PackagePIFBuilder.swift index b786a209001..a4769ca3140 100644 --- a/Sources/SwiftBuildSupport/PackagePIFBuilder.swift +++ b/Sources/SwiftBuildSupport/PackagePIFBuilder.swift @@ -32,8 +32,6 @@ import struct PackageGraph.ModulesGraph import struct PackageGraph.ResolvedModule import struct PackageGraph.ResolvedPackage -#if canImport(SwiftBuild) - import enum SwiftBuild.ProjectModel typealias GUID = SwiftBuild.ProjectModel.GUID @@ -668,5 +666,3 @@ extension PackagePIFBuilder.LinkedPackageBinary { } } } - -#endif diff --git a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift index ae3de279e84..a0e0c7c3049 100644 --- a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift +++ b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift @@ -26,8 +26,6 @@ import class PackageModel.SystemLibraryModule import struct PackageGraph.ResolvedModule import struct PackageGraph.ResolvedPackage -#if canImport(SwiftBuild) - import enum SwiftBuild.ProjectModel /// Extension to create PIF **modules** for a given package. @@ -884,5 +882,3 @@ extension PackagePIFProjectBuilder { self.builtModulesAndProducts.append(systemModule) } } - -#endif diff --git a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Products.swift b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Products.swift index 65a209fb8d2..9525b69ba76 100644 --- a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Products.swift +++ b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Products.swift @@ -28,8 +28,6 @@ import struct PackageGraph.ResolvedModule import struct PackageGraph.ResolvedPackage import struct PackageGraph.ResolvedProduct -#if canImport(SwiftBuild) - import enum SwiftBuild.ProjectModel /// Extension to create PIF **products** for a given package. @@ -1014,4 +1012,3 @@ private struct PackageRegistrySignature: Encodable { let formatVersion = 2 } -#endif diff --git a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder.swift b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder.swift index c37a6e6f3b9..2239072df56 100644 --- a/Sources/SwiftBuildSupport/PackagePIFProjectBuilder.swift +++ b/Sources/SwiftBuildSupport/PackagePIFProjectBuilder.swift @@ -31,8 +31,6 @@ import struct PackageGraph.ResolvedPackage import struct PackageLoading.FileRuleDescription import struct PackageLoading.TargetSourcesBuilder -#if canImport(SwiftBuild) - import struct SwiftBuild.Pair import enum SwiftBuild.ProjectModel import struct SwiftBuild.SwiftBuildFileType @@ -549,4 +547,3 @@ struct PackagePIFProjectBuilder { } } -#endif diff --git a/Sources/SwiftBuildSupport/SwiftBuildSystem.swift b/Sources/SwiftBuildSupport/SwiftBuildSystem.swift index 704259808a3..bdf91184927 100644 --- a/Sources/SwiftBuildSupport/SwiftBuildSystem.swift +++ b/Sources/SwiftBuildSupport/SwiftBuildSystem.swift @@ -30,13 +30,10 @@ import func TSCBasic.withTemporaryFile import enum TSCUtility.Diagnostics -#if canImport(SwiftBuild) import Foundation import SWBBuildService import SwiftBuild -#endif -#if canImport(SwiftBuild) struct SessionFailedError: Error { var error: Error @@ -155,7 +152,6 @@ private final class PlanningOperationDelegate: SWBPlanningOperationDelegate, Sen .deferred } } -#endif public final class SwiftBuildSystem: SPMBuildCore.BuildSystem { private let buildParameters: BuildParameters @@ -232,7 +228,6 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem { } public func build(subset: BuildSubset) async throws { - #if canImport(SwiftBuild) guard !buildParameters.shouldSkipBuilding else { return } @@ -247,12 +242,9 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem { try await startSWBuildOperation(pifTargetName: subset.pifTargetName) - #else - fatalError("Swift Build support is not linked in.") - #endif + } - #if canImport(SwiftBuild) private func startSWBuildOperation(pifTargetName: String) async throws { let buildStartTime = ContinuousClock.Instant.now @@ -511,7 +503,6 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem { return pifBuilder } } - #endif public func cancel(deadline: DispatchTime) throws {} @@ -545,8 +536,6 @@ extension Basics.Diagnostic.Severity { } } -#if canImport(SwiftBuild) - fileprivate extension SwiftBuild.SwiftBuildMessage.DiagnosticInfo.Location { var userDescription: String? { switch self { @@ -573,5 +562,3 @@ fileprivate extension SwiftBuild.SwiftBuildMessage.DiagnosticInfo.Location { } } } - -#endif diff --git a/Tests/CommandsTests/BuildCommandTests.swift b/Tests/CommandsTests/BuildCommandTests.swift index 08356ea7b2f..c2030da4632 100644 --- a/Tests/CommandsTests/BuildCommandTests.swift +++ b/Tests/CommandsTests/BuildCommandTests.swift @@ -942,10 +942,6 @@ class BuildCommandSwiftBuildTests: BuildCommandTestCases { override func testBuildSystemDefaultSettings() async throws { try XCTSkipIfWorkingDirectoryUnsupported() - if ProcessInfo.processInfo.environment["SWIFTPM_NO_SWBUILD_DEPENDENCY"] != nil { - throw XCTSkip("SWIFTPM_NO_SWBUILD_DEPENDENCY is set so skipping because SwiftPM doesn't have the swift-build capability built inside.") - } - try await super.testBuildSystemDefaultSettings() } diff --git a/Tests/CommandsTests/TestCommandTests.swift b/Tests/CommandsTests/TestCommandTests.swift index 134b3f2d900..681bd6f3eca 100644 --- a/Tests/CommandsTests/TestCommandTests.swift +++ b/Tests/CommandsTests/TestCommandTests.swift @@ -632,18 +632,10 @@ class TestCommandSwiftBuildTests: TestCommandTestCase { } override func testFatalErrorDisplayedCorrectNumberOfTimesWhenSingleXCTestHasFatalErrorInBuildCompilation() async throws { - guard ProcessInfo.processInfo.environment["SWIFTPM_NO_SWBUILD_DEPENDENCY"] == nil else { - throw XCTSkip("Skipping test because SwiftBuild is not linked in.") - } - try await super.testFatalErrorDisplayedCorrectNumberOfTimesWhenSingleXCTestHasFatalErrorInBuildCompilation() } override func testListWithSkipBuildAndNoBuildArtifacts() async throws { - guard ProcessInfo.processInfo.environment["SWIFTPM_NO_SWBUILD_DEPENDENCY"] == nil else { - throw XCTSkip("Skipping test because SwiftBuild is not linked in.") - } - try await super.testListWithSkipBuildAndNoBuildArtifacts() } diff --git a/Utilities/bootstrap b/Utilities/bootstrap index 374849a7050..d6bdd3d2f2f 100755 --- a/Utilities/bootstrap +++ b/Utilities/bootstrap @@ -243,6 +243,7 @@ def parse_global_args(args): args.source_dirs["swift-certificates"] = os.path.join(args.project_root, "..", "swift-certificates") args.source_dirs["swift-asn1"] = os.path.join(args.project_root, "..", "swift-asn1") args.source_dirs["swift-syntax"] = os.path.join(args.project_root, "..", "swift-syntax") + args.source_dirs["swift-build"] = os.path.join(args.project_root, "..", "swift-build") args.source_root = os.path.join(args.project_root, "Sources") if platform.system() == 'Darwin': @@ -442,6 +443,16 @@ def build(args): build_dependency(args, "swift-certificates", ["-DSwiftASN1_DIR=" + os.path.join(args.build_dirs["swift-asn1"], "cmake/modules"), "-DSwiftCrypto_DIR=" + os.path.join(args.build_dirs["swift-crypto"], "cmake/modules")]) + swift_build_cmake_flags = [ + get_llbuild_cmake_arg(args), + "-DSwiftSystem_DIR=" + os.path.join(args.build_dirs["swift-system"], "cmake/modules"), + "-DSwiftASN1_DIR=" + os.path.join(args.build_dirs["swift-asn1"], "cmake/modules"), + "-DSwiftCrypto_DIR=" + os.path.join(args.build_dirs["swift-crypto"], "cmake/modules"), + "-DTSC_DIR=" + os.path.join(args.build_dirs["tsc"], "cmake/modules"), + "-DArgumentParser_DIR=" + os.path.join(args.build_dirs["swift-argument-parser"], "cmake/modules"), + "-DSwiftDriver_DIR=" + os.path.join(args.build_dirs["swift-driver"], "cmake/modules"), + ] + build_dependency(args, "swift-build", swift_build_cmake_flags) build_swiftpm_with_cmake(args) build_swiftpm_with_swiftpm(args,integrated_swift_driver=False) @@ -718,6 +729,7 @@ def build_swiftpm_with_cmake(args): "-DSwiftCrypto_DIR=" + os.path.join(args.build_dirs["swift-crypto"], "cmake/modules"), "-DSwiftASN1_DIR=" + os.path.join(args.build_dirs["swift-asn1"], "cmake/modules"), "-DSwiftCertificates_DIR=" + os.path.join(args.build_dirs["swift-certificates"], "cmake/modules"), + "-DSwiftBuild_DIR=" + os.path.join(args.build_dirs["swift-build"], "cmake/modules"), "-DSWIFTPM_PATH_TO_SWIFT_SYNTAX_SOURCE=" + args.source_dirs["swift-syntax"], ] @@ -738,6 +750,7 @@ def build_swiftpm_with_cmake(args): add_rpath_for_cmake_build(args, os.path.join(args.build_dirs["swift-collections"], "lib")) add_rpath_for_cmake_build(args, os.path.join(args.build_dirs["swift-asn1"], "lib")) add_rpath_for_cmake_build(args, os.path.join(args.build_dirs["swift-certificates"], "lib")) + add_rpath_for_cmake_build(args, os.path.join(args.build_dirs["swift-build"], "lib")) # rpaths for compatibility libraries for lib_path in get_swift_backdeploy_library_paths(args): @@ -875,6 +888,7 @@ def get_swiftpm_env_cmd(args): os.path.join(args.build_dirs["swift-collections"], "lib"), os.path.join(args.build_dirs["swift-asn1"], "lib"), os.path.join(args.build_dirs["swift-certificates"], "lib"), + os.path.join(args.build_dirs["swift-build"], "lib"), ] if platform.system() == 'Darwin':