Skip to content

Commit 4006737

Browse files
authored
Add build setting for enabling the builtin module (#6311)
* Add build setting for enabling the builtin module * Mark enableBuiltinModule as SPI
1 parent 98bfe78 commit 4006737

File tree

6 files changed

+31
-4
lines changed

6 files changed

+31
-4
lines changed

Sources/PackageDescription/BuildSettings.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,12 @@ public struct SwiftSetting {
387387
return SwiftSetting(
388388
name: "interoperabilityMode", value: values, condition: condition)
389389
}
390+
391+
@available(_PackageDescription, introduced: 5.9)
392+
@_spi(FrontendOptions)
393+
public static var enableBuiltinModule: SwiftSetting {
394+
SwiftSetting(name: "enableBuiltinModule", value: [], condition: nil)
395+
}
390396
}
391397

392398
/// A linker build setting.

Sources/PackageLoading/ManifestJSONParser.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,8 @@ extension TargetBuildSettingDescription.Kind {
704704
return .enableExperimentalFeature(value)
705705
case "unsafeFlags":
706706
return .unsafeFlags(values)
707+
case "enableBuiltinModule":
708+
return .enableBuiltinModule
707709
default:
708710
throw InternalError("invalid build setting \(name)")
709711
}

Sources/PackageLoading/PackageBuilder.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,6 +1059,18 @@ public final class PackageBuilder {
10591059
}
10601060

10611061
values = ["-enable-experimental-feature", value]
1062+
1063+
case .enableBuiltinModule:
1064+
switch setting.tool {
1065+
case .c, .cxx, .linker:
1066+
throw InternalError(
1067+
"only Swift supports enabling the builtin module")
1068+
1069+
case .swift:
1070+
decl = .OTHER_SWIFT_FLAGS
1071+
}
1072+
1073+
values = ["-enable-builtin-module"]
10621074
}
10631075

10641076
// Create an assignment for this setting.

Sources/PackageModel/Manifest/TargetBuildSettingDescription.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,14 @@ public enum TargetBuildSettingDescription {
4040

4141
case unsafeFlags([String])
4242

43+
case enableBuiltinModule
44+
4345
public var isUnsafeFlags: Bool {
4446
switch self {
4547
case .unsafeFlags(let flags):
4648
// If `.unsafeFlags` is used, but doesn't specify any flags, we treat it the same way as not specifying it.
4749
return !flags.isEmpty
48-
case .headerSearchPath, .define, .linkedLibrary, .linkedFramework, .interoperabilityMode, .enableUpcomingFeature, .enableExperimentalFeature:
50+
case .headerSearchPath, .define, .linkedLibrary, .linkedFramework, .interoperabilityMode, .enableUpcomingFeature, .enableExperimentalFeature, .enableBuiltinModule:
4951
return false
5052
}
5153
}

Sources/PackageModel/ManifestSourceGeneration.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,8 @@ fileprivate extension SourceCodeFragment {
526526
params.append(SourceCodeFragment(from: condition))
527527
}
528528
self.init(enum: setting.kind.name, subnodes: params)
529+
case .enableBuiltinModule:
530+
self.init(enum: setting.kind.name)
529531
}
530532
}
531533
}
@@ -678,6 +680,8 @@ extension TargetBuildSettingDescription.Kind {
678680
return "enableUpcomingFeature"
679681
case .enableExperimentalFeature:
680682
return "enableExperimentalFeature"
683+
case .enableBuiltinModule:
684+
return "enableBuiltinModule"
681685
}
682686
}
683687
}

Tests/BuildTests/BuildPlanTests.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3245,7 +3245,8 @@ final class BuildPlanTests: XCTestCase {
32453245
.init(tool: .swift, kind: .interoperabilityMode(.Cxx, "swift-5.9"), condition: .init(platformNames: ["linux"])),
32463246
.init(tool: .swift, kind: .interoperabilityMode(.Cxx, "swift-6.0"), condition: .init(platformNames: ["macos"])),
32473247
.init(tool: .swift, kind: .enableUpcomingFeature("BestFeature")),
3248-
.init(tool: .swift, kind: .enableUpcomingFeature("WorstFeature"), condition: .init(platformNames: ["macos"], config: "debug"))
3248+
.init(tool: .swift, kind: .enableUpcomingFeature("WorstFeature"), condition: .init(platformNames: ["macos"], config: "debug")),
3249+
.init(tool: .swift, kind: .enableBuiltinModule)
32493250
]
32503251
),
32513252
try TargetDescription(
@@ -3311,7 +3312,7 @@ final class BuildPlanTests: XCTestCase {
33113312
XCTAssertMatch(cbar, [.anySequence, "-DCCC=2", "-I\(A.appending(components: "Sources", "cbar", "Sources", "headers"))", "-I\(A.appending(components: "Sources", "cbar", "Sources", "cppheaders"))", "-Icfoo", "-L", "cbar", "-Icxxfoo", "-L", "cxxbar", .end])
33123313

33133314
let bar = try result.target(for: "bar").swiftTarget().compileArguments()
3314-
XCTAssertMatch(bar, [.anySequence, "-DLINUX", "-Isfoo", "-L", "sbar", "-cxx-interoperability-mode=swift-5.9", "-enable-upcoming-feature", "BestFeature", .end])
3315+
XCTAssertMatch(bar, [.anySequence, "-DLINUX", "-Isfoo", "-L", "sbar", "-cxx-interoperability-mode=swift-5.9", "-enable-upcoming-feature", "BestFeature", "-enable-builtin-module", .end])
33153316

33163317
let exe = try result.target(for: "exe").swiftTarget().compileArguments()
33173318
XCTAssertMatch(exe, [.anySequence, "-DFOO", .end])
@@ -3327,7 +3328,7 @@ final class BuildPlanTests: XCTestCase {
33273328
XCTAssertMatch(cbar, [.anySequence, "-DCCC=2", "-I\(A.appending(components: "Sources", "cbar", "Sources", "headers"))", "-I\(A.appending(components: "Sources", "cbar", "Sources", "cppheaders"))", "-Icfoo", "-L", "cbar", "-Icxxfoo", "-L", "cxxbar", .end])
33283329

33293330
let bar = try result.target(for: "bar").swiftTarget().compileArguments()
3330-
XCTAssertMatch(bar, [.anySequence, "-DDMACOS", "-Isfoo", "-L", "sbar", "-cxx-interoperability-mode=swift-6.0", "-enable-upcoming-feature", "BestFeature", "-enable-upcoming-feature", "WorstFeature", .end])
3331+
XCTAssertMatch(bar, [.anySequence, "-DDMACOS", "-Isfoo", "-L", "sbar", "-cxx-interoperability-mode=swift-6.0", "-enable-upcoming-feature", "BestFeature", "-enable-upcoming-feature", "WorstFeature", "-enable-builtin-module", .end])
33313332

33323333
let exe = try result.target(for: "exe").swiftTarget().compileArguments()
33333334
XCTAssertMatch(exe, [.anySequence, "-DFOO", .end])

0 commit comments

Comments
 (0)