Skip to content

Commit dfb0982

Browse files
committed
Modernize simulator test run destinations to arm64
Flip the simulator run destinations in RunDestinationTestSupport to arm64 and update the affected test expectations accordingly. Tests whose simulator arch derives from ARCHS_STANDARD (rather than the active arch) would otherwise break once x86_64 is clamped out of the simulators at OS 27. Assisted by Claude Opus 4.8
1 parent 7053c2f commit dfb0982

11 files changed

Lines changed: 62 additions & 43 deletions

Sources/SWBTestSupport/RunDestinationTestSupport.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ extension _RunDestinationInfo {
4343

4444
/// A generic run destination targeting iOS Simulator, using the public SDK.
4545
package static var anyiOSSimulator: Self {
46-
return generic(sdk: "iphonesimulator", supportedArchitectures: ["arm64", "i386", "x86_64"])
46+
return generic(sdk: "iphonesimulator", supportedArchitectures: ["arm64"])
4747
}
4848

4949
/// A generic run destination targeting tvOS, using the public SDK.
@@ -53,7 +53,7 @@ extension _RunDestinationInfo {
5353

5454
/// A generic run destination targeting tvOS Simulator, using the public SDK.
5555
package static var anytvOSSimulator: Self {
56-
return generic(sdk: "appletvsimulator", supportedArchitectures: ["arm64", "x86_64"])
56+
return generic(sdk: "appletvsimulator", supportedArchitectures: ["arm64"])
5757
}
5858

5959
/// A generic run destination targeting watchOS, using the public SDK.
@@ -63,7 +63,7 @@ extension _RunDestinationInfo {
6363

6464
/// A generic run destination targeting watchOS Simulator, using the public SDK.
6565
package static var anywatchOSSimulator: Self {
66-
return generic(sdk: "watchsimulator", supportedArchitectures: ["arm64", "i386", "x86_64"])
66+
return generic(sdk: "watchsimulator", supportedArchitectures: ["arm64"])
6767
}
6868

6969
/// A generic run destination targeting xrOS, using the public SDK.
@@ -73,7 +73,7 @@ extension _RunDestinationInfo {
7373

7474
/// A generic run destination targeting xrOS Simulator, using the public SDK.
7575
package static var anyxrOSSimulator: Self {
76-
return generic(sdk: "xrsimulator", supportedArchitectures: ["arm64", "x86_64"])
76+
return generic(sdk: "xrsimulator", supportedArchitectures: ["arm64"])
7777
}
7878

7979
/// A generic run destination targeting DriverKit, using the public SDK.
@@ -173,7 +173,7 @@ extension _RunDestinationInfo {
173173

174174
/// A run destination targeting iOS Simulator generic device, using the public SDK.
175175
package static var iOSSimulator: Self {
176-
return .init(platform: "iphonesimulator", sdk: "iphonesimulator", sdkVariant: "iphonesimulator", targetArchitecture: "x86_64", supportedArchitectures: ["x86_64"], disableOnlyActiveArch: false)
176+
return .init(platform: "iphonesimulator", sdk: "iphonesimulator", sdkVariant: "iphonesimulator", targetArchitecture: "arm64", supportedArchitectures: ["arm64"], disableOnlyActiveArch: false)
177177
}
178178

179179
/// A run destination targeting watchOS generic device, using the public SDK.
@@ -183,7 +183,7 @@ extension _RunDestinationInfo {
183183

184184
/// A run destination targeting watchOS Simulator generic device, using the public SDK.
185185
package static var watchOSSimulator: Self {
186-
return .init(platform: "watchsimulator", sdk: "watchsimulator", sdkVariant: "watchsimulator", targetArchitecture: "x86_64", supportedArchitectures: ["x86_64"], disableOnlyActiveArch: false)
186+
return .init(platform: "watchsimulator", sdk: "watchsimulator", sdkVariant: "watchsimulator", targetArchitecture: "arm64", supportedArchitectures: ["arm64"], disableOnlyActiveArch: false)
187187
}
188188

189189
/// A run destination targeting tvOS generic device, using the public SDK.
@@ -193,7 +193,7 @@ extension _RunDestinationInfo {
193193

194194
/// A run destination targeting tvOS Simulator generic device, using the public SDK.
195195
package static var tvOSSimulator: Self {
196-
return .init(platform: "appletvsimulator", sdk: "appletvsimulator", sdkVariant: "appletvsimulator", targetArchitecture: "x86_64", supportedArchitectures: ["x86_64"], disableOnlyActiveArch: false)
196+
return .init(platform: "appletvsimulator", sdk: "appletvsimulator", sdkVariant: "appletvsimulator", targetArchitecture: "arm64", supportedArchitectures: ["arm64"], disableOnlyActiveArch: false)
197197
}
198198

199199
/// A run destination targeting xrOS generic device, using the public SDK.
@@ -203,7 +203,7 @@ extension _RunDestinationInfo {
203203

204204
/// A run destination targeting xrOS Simulator generic device, using the public SDK.
205205
package static var xrOSSimulator: Self {
206-
return .init(platform: "xrsimulator", sdk: "xrsimulator", sdkVariant: "xrsimulator", targetArchitecture: "x86_64", supportedArchitectures: ["x86_64"], disableOnlyActiveArch: false)
206+
return .init(platform: "xrsimulator", sdk: "xrsimulator", sdkVariant: "xrsimulator", targetArchitecture: "arm64", supportedArchitectures: ["arm64"], disableOnlyActiveArch: false)
207207
}
208208

209209
/// A run destination targeting DriverKit, using the public SDK.

Tests/SWBBuildSystemTests/IndexBuildOperationTests.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,7 @@ fileprivate struct IndexBuildOperationTests: CoreBasedTests {
469469
TestBuildConfiguration("Debug", buildSettings: [
470470
"SDKROOT": "iphonesimulator",
471471
"SUPPORTED_PLATFORMS": "iphonesimulator",
472+
"IPHONEOS_DEPLOYMENT_TARGET": "18.0",
472473
])
473474
],
474475
buildPhases: [
@@ -623,7 +624,8 @@ fileprivate struct IndexBuildOperationTests: CoreBasedTests {
623624
"SDK_VARIANT": "auto",
624625
"SUPPORTED_PLATFORMS": "$(AVAILABLE_PLATFORMS)",
625626
"SWIFT_VERSION": swiftVersion,
626-
"MACOSX_DEPLOYMENT_TARGET": "26.0"
627+
"MACOSX_DEPLOYMENT_TARGET": "26.0",
628+
"IPHONEOS_DEPLOYMENT_TARGET": "26.0"
627629
])
628630
], buildPhases: [TestSourcesBuildPhase(["test.swift"])])
629631

Tests/SWBBuildSystemTests/PreviewsBuildOperationTests.swift

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ fileprivate struct PreviewsBuildOperationTests: CoreBasedTests {
117117
try await tester.checkBuild(parameters: buildParameters, runDestination: .iOSSimulator, buildCommand: .build(style: .buildOnly, skipDependencies: false), signableTargets: Set(provisioningInputs.keys), signableTargetInputs: provisioningInputs) { results in
118118
results.checkNoDiagnostics()
119119
results.checkNote(.equal("Emplaced \(srcRoot.str)/build/Debug-iphonesimulator/AppTarget.app/Assets.car (for task: [\"LinkAssetCatalog\", \"\(srcRoot.str)/Sources/Assets.xcassets\"])"))
120-
results.checkNote(.equal("Using stub executor library with Swift entry point. (for task: [\"ConstructStubExecutorLinkFileList\", \"\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget-ExecutorLinkFileList-normal-x86_64.txt\"])"))
120+
results.checkNote(.equal("Using stub executor library with Swift entry point. (for task: [\"ConstructStubExecutorLinkFileList\", \"\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget-ExecutorLinkFileList-normal-arm64.txt\"])"))
121121
results.checkNoNotes()
122122

123123
results.checkTasks(.matchRuleItemPattern(.prefix("Swift"))) { _ in }
@@ -140,7 +140,7 @@ fileprivate struct PreviewsBuildOperationTests: CoreBasedTests {
140140
results.checkTask(.matchRule(["Ld", "\(srcRoot.str)/build/Debug-iphonesimulator/AppTarget.app/AppTarget.debug.dylib", "normal"])) { _ in }
141141

142142
// We should construct the stub executor link file list
143-
results.checkTask(.matchRule(["ConstructStubExecutorLinkFileList", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget-ExecutorLinkFileList-normal-x86_64.txt"])) { _ in }
143+
results.checkTask(.matchRule(["ConstructStubExecutorLinkFileList", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget-ExecutorLinkFileList-normal-arm64.txt"])) { _ in }
144144

145145
// We should have the normal link task, which is the preview shim, and it should link the bootstrap static library
146146
results.checkTask(.matchRule(["Ld", "\(srcRoot.str)/build/Debug-iphonesimulator/AppTarget.app/AppTarget", "normal"])) { task in
@@ -162,7 +162,7 @@ fileprivate struct PreviewsBuildOperationTests: CoreBasedTests {
162162
"-e", "___debug_blank_executor_main",
163163
"-Xlinker", "-sectcreate", "-Xlinker", "__TEXT", "-Xlinker", "__debug_dylib", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget-DebugDylibPath-normal-\(results.runDestinationTargetArchitecture).txt",
164164
"-Xlinker", "-sectcreate", "-Xlinker", "__TEXT", "-Xlinker", "__debug_instlnm", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget-DebugDylibInstallName-normal-\(results.runDestinationTargetArchitecture).txt",
165-
"-Xlinker", "-filelist", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget-ExecutorLinkFileList-normal-x86_64.txt",
165+
"-Xlinker", "-filelist", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget-ExecutorLinkFileList-normal-arm64.txt",
166166
"-Xlinker", "-sectcreate", "-Xlinker", "__TEXT", "-Xlinker", "__entitlements", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget.app-Simulated.xcent",
167167
"-Xlinker", "-sectcreate", "-Xlinker", "__TEXT", "-Xlinker", "__ents_der", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget.app-Simulated.xcent.der",
168168
"\(srcRoot.str)/build/Debug-iphonesimulator/AppTarget.app/AppTarget.debug.dylib",
@@ -186,7 +186,7 @@ fileprivate struct PreviewsBuildOperationTests: CoreBasedTests {
186186
"-Xlinker", "-e", "-Xlinker", "___debug_blank_executor_main",
187187
"-Xlinker", "-sectcreate", "-Xlinker", "__TEXT", "-Xlinker", "__debug_dylib", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget-DebugDylibPath-normal-\(results.runDestinationTargetArchitecture).txt",
188188
"-Xlinker", "-sectcreate", "-Xlinker", "__TEXT", "-Xlinker", "__debug_instlnm", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget-DebugDylibInstallName-normal-\(results.runDestinationTargetArchitecture).txt",
189-
"-Xlinker", "-filelist", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget-ExecutorLinkFileList-normal-x86_64.txt",
189+
"-Xlinker", "-filelist", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget-ExecutorLinkFileList-normal-arm64.txt",
190190
"-Xlinker", "-sectcreate", "-Xlinker", "__TEXT", "-Xlinker", "__entitlements", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget.app-Simulated.xcent",
191191
"-Xlinker", "-sectcreate", "-Xlinker", "__TEXT", "-Xlinker", "__ents_der", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/AppTarget.app-Simulated.xcent.der",
192192
"\(srcRoot.str)/build/Debug-iphonesimulator/AppTarget.app/AppTarget.debug.dylib",
@@ -250,6 +250,8 @@ fileprivate struct PreviewsBuildOperationTests: CoreBasedTests {
250250
"\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/Objects-normal/\(results.runDestinationTargetArchitecture)/main.selection.preview-thunk.dia",
251251
"-target",
252252
"\(results.runDestinationTargetArchitecture)-apple-ios\(core.loadSDK(.iOSSimulator).defaultDeploymentTarget)-simulator",
253+
"-Xllvm",
254+
"-aarch64-use-tbi",
253255
"-enable-objc-interop",
254256
"-sdk",
255257
"\(core.loadSDK(.iOSSimulator).path.str)",
@@ -561,6 +563,8 @@ fileprivate struct PreviewsBuildOperationTests: CoreBasedTests {
561563
"\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppTarget.build/Objects-normal/\(results.runDestinationTargetArchitecture)/File1.selection.preview-thunk.dia",
562564
"-target",
563565
"\(results.runDestinationTargetArchitecture)-apple-ios\(core.loadSDK(.iOSSimulator).defaultDeploymentTarget)-simulator",
566+
"-Xllvm",
567+
"-aarch64-use-tbi",
564568
"-enable-objc-interop",
565569
"-sdk",
566570
"\(core.loadSDK(.iOSSimulator).path.str)",
@@ -705,6 +709,11 @@ fileprivate struct PreviewsBuildOperationTests: CoreBasedTests {
705709
let buildParameters = BuildParameters(configuration: "Debug", overrides: [
706710
// And XOJIT previews enabled, which should be passed when the workspace setting is on
707711
"ENABLE_XOJIT_PREVIEWS": "YES",
712+
// Exercise the multi-arch (universal binary) preview path. x86_64 simulators are
713+
// invalid at recent deployment targets, so pin low enough that x86_64 is still valid
714+
// and re-add it to VALID_ARCHS.
715+
"VALID_ARCHS": "$(inherited) x86_64",
716+
"IPHONEOS_DEPLOYMENT_TARGET": "18.0",
708717
])
709718

710719
try await tester.checkBuild(parameters: buildParameters, runDestination: .anyiOSSimulator, buildCommand: .build(style: .buildOnly, skipDependencies: false)) { results in
@@ -816,7 +825,7 @@ fileprivate struct PreviewsBuildOperationTests: CoreBasedTests {
816825
"-Xlinker", "-sectcreate", "-Xlinker", "__TEXT", "-Xlinker", "__debug_dylib", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppExTarget.build/AppExTarget-DebugDylibPath-normal-\(results.runDestinationTargetArchitecture).txt",
817826
"-Xlinker", "-sectcreate", "-Xlinker", "__TEXT", "-Xlinker", "__debug_entry", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppExTarget.build/AppExTarget-DebugEntryPoint-normal-\(results.runDestinationTargetArchitecture).txt",
818827
"-Xlinker", "-sectcreate", "-Xlinker", "__TEXT", "-Xlinker", "__debug_instlnm", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppExTarget.build/AppExTarget-DebugDylibInstallName-normal-\(results.runDestinationTargetArchitecture).txt",
819-
"-Xlinker", "-filelist", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppExTarget.build/AppExTarget-ExecutorLinkFileList-normal-x86_64.txt",
828+
"-Xlinker", "-filelist", "-Xlinker", "\(srcRoot.str)/build/ProjectName.build/Debug-iphonesimulator/AppExTarget.build/AppExTarget-ExecutorLinkFileList-normal-arm64.txt",
820829
"\(srcRoot.str)/build/Debug-iphonesimulator/AppExTarget.appex/AppExTarget.debug.dylib",
821830
"-o", "\(srcRoot.str)/build/Debug-iphonesimulator/AppExTarget.appex/AppExTarget"
822831
]

Tests/SWBCoreTests/SettingsTests.swift

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4922,9 +4922,9 @@ import SWBTestSupport
49224922
#expect(scope.evaluate(BuiltinMacros.PLATFORM_FAMILY_NAME) == "iOS")
49234923
#expect(scope.evaluate(BuiltinMacros.SDKROOT) == context.sdkRegistry.lookup("iphonesimulator")?.path)
49244924
#expect(scope.evaluate(BuiltinMacros.ONLY_ACTIVE_ARCH))
4925-
#expect(scope.evaluate(BuiltinMacros.ARCHS) == ["x86_64"])
4926-
try #require(scope.evaluate(try scope.namespace.declareStringMacro("x86_64")) == "YES")
4927-
try #require(scope.evaluate(try scope.namespace.declareStringMacro("arm64")) == "")
4925+
#expect(scope.evaluate(BuiltinMacros.ARCHS) == ["arm64"])
4926+
try #require(scope.evaluate(try scope.namespace.declareStringMacro("arm64")) == "YES")
4927+
try #require(scope.evaluate(try scope.namespace.declareStringMacro("x86_64")) == "")
49284928
}
49294929
}
49304930

@@ -4946,7 +4946,9 @@ import SWBTestSupport
49464946
@Test(.requireSDKs(.watchOS))
49474947
func activeRunDestination_Simulator_Device_Different_Platform() async throws {
49484948
// If a target supports both device+sim and the run destination is a simulator, we should build the target for its supported simulator
4949-
try await testActiveRunDestinationiOS(runDestination: .watchOSSimulator) { context, settings, scope throws in
4949+
try await testActiveRunDestinationiOS(extraBuildSettings: [
4950+
"IPHONEOS_DEPLOYMENT_TARGET": "26.0",
4951+
], runDestination: .watchOSSimulator) { context, settings, scope throws in
49504952
#expect(settings.errors == [])
49514953
#expect(settings.warnings == [])
49524954
#expect(scope.evaluate(BuiltinMacros.PLATFORM_NAME) == "iphonesimulator")
@@ -5039,6 +5041,8 @@ import SWBTestSupport
50395041
"SDKROOT": "iphonesimulator",
50405042
"VALID_ARCHS": "foo bar x86_64 baz x86_64h qux",
50415043
"ARCHS": "$(VALID_ARCHS)",
5044+
// x86_64 is only valid for older simulator deployment targets, so pin low enough to keep x86_64 in ARCHS for this multi-arch case.
5045+
"IPHONEOS_DEPLOYMENT_TARGET": "26.0",
50425046
],
50435047
runDestination: nil,
50445048
activeArchitecture: nil,

Tests/SWBTaskConstructionTests/ObjectiveCSymbolExtractorTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ fileprivate struct ObjectiveCSymbolExtractorTests: CoreBasedTests {
367367
"Debug",
368368
buildSettings: [
369369
"SDKROOT": "iphoneos",
370-
"ARCHS": "arm64 x86_64",
370+
"ARCHS": "arm64",
371371
"ONLY_ACTIVE_ARCH": "NO",
372372
"SWIFT_EXEC": swiftCompilerPath.str,
373373
// Set the real TAPI tool path so that we can check its version to determine what version of the "headers info" JSON file to pass to `tapi extractapi`.
@@ -547,7 +547,7 @@ fileprivate struct ObjectiveCSymbolExtractorTests: CoreBasedTests {
547547
results.checkNoDiagnostics()
548548

549549
results.checkTarget("iOS App") { target in
550-
for arch in ["x86_64", "arm64"] {
550+
for arch in ["arm64"] {
551551
let sdkdbFile = "/tmp/Test/aProject/build/aProject.build/Debug-iphonesimulator/iOS App.build/symbol-graph/clang/\(arch)-apple-ios\(results.runDestinationSDK.version)-simulator/iOS App.sdkdb"
552552
let symbolGraphFile = "/tmp/Test/aProject/build/aProject.build/Debug-iphonesimulator/iOS App.build/symbol-graph/clang/\(arch)-apple-ios\(results.runDestinationSDK.version)-simulator/iOS_App.symbols.json"
553553

Tests/SWBTaskConstructionTests/PlatformTaskConstructionTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ fileprivate struct PlatformTaskConstructionTests: CoreBasedTests {
270270
}
271271

272272
results.checkTarget("AppTarget") { target in
273-
results.checkTask(.matchTarget(target), .matchRuleType("CompileC"), .matchRuleItemBasename("main.m"), .matchRuleItem("x86_64")) { task in
273+
results.checkTask(.matchTarget(target), .matchRuleType("CompileC"), .matchRuleItemBasename("main.m"), .matchRuleItem("arm64")) { task in
274274
task.checkRuleInfo([.equal("CompileC"), .suffix("main.o"), .suffix("main.m"), .equal("normal"), .equal(results.runDestinationTargetArchitecture), .equal("objective-c"), .any])
275275
task.checkCommandLineLastArgumentEqual("\(SRCROOT)/build/aProject.build/Debug-iphonesimulator/AppTarget.build/Objects-normal/\(results.runDestinationTargetArchitecture)/main.o")
276276
}

0 commit comments

Comments
 (0)