Skip to content

Commit 94d66ce

Browse files
authored
Serialize platform options in the PIF (#2639)
1 parent 48485dd commit 94d66ce

File tree

3 files changed

+78
-0
lines changed

3 files changed

+78
-0
lines changed

Sources/XCBuildSupport/PIF.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,6 +711,7 @@ public enum PIF {
711711
case OTHER_LDRFLAGS
712712
case OTHER_SWIFT_FLAGS
713713
case PRELINK_FLAGS
714+
case SPECIALIZATION_SDK_OPTIONS
714715
case SUPPORTED_PLATFORMS
715716
case SWIFT_ACTIVE_COMPILATION_CONDITIONS
716717
}

Sources/XCBuildSupport/PIFBuilder.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,12 @@ final class PackagePIFProjectBuilder: PIFProjectBuilder {
270270
.append("$(PLATFORM_DIR)/Developer/Library/Frameworks")
271271
}
272272

273+
PlatformRegistry.default.knownPlatforms.forEach {
274+
guard let platform = PIF.BuildSettings.Platform.from(platform: $0) else { return }
275+
guard let supportedPlatform = firstTarget?.getSupportedPlatform(for: $0) else { return }
276+
settings[.SPECIALIZATION_SDK_OPTIONS, for: platform] = supportedPlatform.options
277+
}
278+
273279
// Disable signing for all the things since there is no way to configure
274280
// signing information in packages right now.
275281
settings[.ENTITLEMENTS_REQUIRED] = "NO"
@@ -1480,3 +1486,16 @@ extension PIF.PlatformFilter {
14801486
}
14811487
}()
14821488
}
1489+
1490+
private extension PIF.BuildSettings.Platform {
1491+
static func from(platform: PackageModel.Platform) -> PIF.BuildSettings.Platform? {
1492+
switch platform {
1493+
case .iOS: return .iOS
1494+
case .linux: return .linux
1495+
case .macOS: return .macOS
1496+
case .tvOS: return .tvOS
1497+
case .watchOS: return .watchOS
1498+
default: return nil
1499+
}
1500+
}
1501+
}

Tests/XCBuildSupportTests/PIFBuilderTests.swift

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,10 @@ class PIFBuilderTests: XCTestCase {
191191
for platform in [PIF.BuildSettings.Platform.macOS, .iOS, .tvOS] {
192192
XCTAssertEqual(settings[.FRAMEWORK_SEARCH_PATHS, for: platform], frameworksSearchPaths)
193193
}
194+
195+
for platform in PIF.BuildSettings.Platform.allCases {
196+
XCTAssertEqual(settings[.SPECIALIZATION_SDK_OPTIONS, for: platform], [])
197+
}
194198
}
195199
}
196200

@@ -230,6 +234,10 @@ class PIFBuilderTests: XCTestCase {
230234
for platform in [PIF.BuildSettings.Platform.macOS, .iOS, .tvOS] {
231235
XCTAssertEqual(settings[.FRAMEWORK_SEARCH_PATHS, for: platform], frameworksSearchPaths)
232236
}
237+
238+
for platform in PIF.BuildSettings.Platform.allCases {
239+
XCTAssertEqual(settings[.SPECIALIZATION_SDK_OPTIONS, for: platform], [])
240+
}
233241
}
234242
}
235243
}
@@ -281,6 +289,10 @@ class PIFBuilderTests: XCTestCase {
281289
for platform in [PIF.BuildSettings.Platform.macOS, .iOS, .tvOS] {
282290
XCTAssertEqual(settings[.FRAMEWORK_SEARCH_PATHS, for: platform], frameworksSearchPaths)
283291
}
292+
293+
for platform in PIF.BuildSettings.Platform.allCases {
294+
XCTAssertEqual(settings[.SPECIALIZATION_SDK_OPTIONS, for: platform], [])
295+
}
284296
}
285297
}
286298

@@ -320,6 +332,10 @@ class PIFBuilderTests: XCTestCase {
320332
for platform in [PIF.BuildSettings.Platform.macOS, .iOS, .tvOS] {
321333
XCTAssertEqual(settings[.FRAMEWORK_SEARCH_PATHS, for: platform], frameworksSearchPaths)
322334
}
335+
336+
for platform in PIF.BuildSettings.Platform.allCases {
337+
XCTAssertEqual(settings[.SPECIALIZATION_SDK_OPTIONS, for: platform], [])
338+
}
323339
}
324340
}
325341
}
@@ -2029,6 +2045,48 @@ class PIFBuilderTests: XCTestCase {
20292045
}
20302046
}
20312047
}
2048+
2049+
func testSDKOptions() {
2050+
let fs = InMemoryFileSystem(emptyFiles:
2051+
"/Foo/Sources/foo/main.swift"
2052+
)
2053+
2054+
let diagnostics = DiagnosticsEngine()
2055+
let graph = loadPackageGraph(
2056+
fs: fs,
2057+
diagnostics: diagnostics,
2058+
manifests: [
2059+
Manifest.createManifest(
2060+
name: "Foo",
2061+
platforms: [
2062+
PlatformDescription(name: "macos", version: "10.14", options: ["best"]),
2063+
],
2064+
path: "/Foo",
2065+
url: "/Foo",
2066+
v: .vNext,
2067+
packageKind: .root,
2068+
targets: [
2069+
.init(name: "foo", dependencies: []),
2070+
]),
2071+
],
2072+
shouldCreateMultipleTestProducts: true
2073+
)
2074+
2075+
let builder = PIFBuilder(graph: graph, parameters: .mock(), diagnostics: diagnostics)
2076+
let pif = builder.construct()
2077+
2078+
XCTAssertNoDiagnostics(diagnostics)
2079+
2080+
PIFTester(pif) { workspace in
2081+
workspace.checkProject("PACKAGE:/Foo") { project in
2082+
project.checkBuildConfiguration("Debug") { configuration in
2083+
configuration.checkBuildSettings { settings in
2084+
XCTAssertEqual(settings[.SPECIALIZATION_SDK_OPTIONS, for: .macOS], ["best"])
2085+
}
2086+
}
2087+
}
2088+
}
2089+
}
20322090
#endif
20332091
}
20342092

0 commit comments

Comments
 (0)