diff --git a/Tools/Sources/BuildSDK.swift b/Tools/Sources/BuildSDK.swift index c316a900f..b5e29432d 100644 --- a/Tools/Sources/BuildSDK.swift +++ b/Tools/Sources/BuildSDK.swift @@ -21,8 +21,14 @@ struct BuildSDK: ParsableCommand { @Argument(help: "An optional argument to specify a branch of the SDK.") var branch: String? + @Flag(help: "Build the SDK to run on an iPhone or iPad. This flag takes precedence over --simulator and --target.") + var device + + @Flag(help: "Build the SDK to run on the simulator. This flag takes precedence over --target.") + var simulator + @Option(help: "The target to build for such as aarch64-apple-ios. Omit this option to build for all targets.") - var target: Target? + var target: [Target] @Option(help: "The profile to use when building the SDK. Omit this option to build in debug mode.") var profile: Profile = .reldbg @@ -60,7 +66,7 @@ struct BuildSDK: ParsableCommand { /// Checks that all of the required targets have been added through rustup /// but only when the ``target`` option hasn't been supplied. func checkRustupTargets() throws { - guard target == nil else { return } + guard target.isEmpty, device == 0, simulator == 0 else { return } guard let output = try Utilities.zsh("rustup show") else { throw Error.rustupOutputFailure } var requiredTargets = Target.allCases.reduce(into: [String: Bool]()) { partialResult, target in @@ -94,8 +100,17 @@ struct BuildSDK: ParsableCommand { // unset fixes an issue where swift compilation prevents building for targets other than macOS X var buildCommand = "unset SDKROOT && cargo xtask swift build-framework" buildCommand.append(" --profile \(profile.rawValue)") - if let target { - buildCommand.append(" --only-target \(target.rawValue)") + if device > 0 { + buildCommand.append(" --target \(Target.iOS.rawValue)") + } else if simulator > 0 { + let hostArchitecture = try Utilities.zsh("arch") + if hostArchitecture?.trimmingCharacters(in: .whitespacesAndNewlines) == "arm64" { + buildCommand.append(" --target \(Target.simulatorARM64.rawValue)") + } else { + buildCommand.append(" --target \(Target.simulatorIntel.rawValue)") + } + } else if !target.isEmpty { + target.forEach { buildCommand.append(" --target \($0.rawValue)") } } try Utilities.zsh(buildCommand, workingDirectoryURL: Utilities.sdkDirectoryURL) }