1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2025 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import SWBProtocol
class SWBServiceConsoleShowPlatformsCommand: SWBServiceConsoleCommand {
static let name = "showPlatforms"
static func perform(invocation: SWBServiceConsoleCommandInvocation) async -> SWBCommandResult {
return await invocation.console.applyToActiveSession(SWBBuildServiceSession.getPlatformsDump, invocation.commandLine)
}
}
class SWBServiceConsoleShowSDKsCommand: SWBServiceConsoleCommand {
static let name = "showSDKs"
static func perform(invocation: SWBServiceConsoleCommandInvocation) async -> SWBCommandResult {
return await invocation.console.applyToActiveSession(SWBBuildServiceSession.getSDKsDump, invocation.commandLine)
}
}
class SWBServiceConsoleShowSpecsCommand: SWBServiceConsoleCommand {
static let name = "showSpecs"
static func validate(invocation: SWBServiceConsoleCommandInvocation) -> SWBServiceConsoleError? {
return nil
}
static func usage() -> String {
return "\(name) [--conforms-to <product-type-identifier>]"
}
static func perform(invocation: SWBServiceConsoleCommandInvocation) async -> SWBCommandResult {
return await invocation.console.applyToActiveSession(SWBBuildServiceSession.getSpecsDump, invocation.commandLine)
}
}
class SWBServiceConsoleShowToolchainsCommand: SWBServiceConsoleCommand {
static let name = "showToolchains"
static func perform(invocation: SWBServiceConsoleCommandInvocation) async -> SWBCommandResult {
return await invocation.console.applyToActiveSession(SWBBuildServiceSession.getToolchainsDump, invocation.commandLine)
}
}
class SWBServiceConsoleDescribeBuildSettingsCommand: SWBServiceConsoleCommand {
static let name = "describeBuildSettings"
static func perform(invocation: SWBServiceConsoleCommandInvocation) async -> SWBCommandResult {
return await invocation.console.applyToActiveSession(SWBBuildServiceSession.getBuildSettingsDescriptionDump, invocation.commandLine)
}
}
func registerXcodeCommands() {
for commandClass in ([
SWBServiceConsoleShowPlatformsCommand.self,
SWBServiceConsoleShowSDKsCommand.self,
SWBServiceConsoleShowSpecsCommand.self,
SWBServiceConsoleShowToolchainsCommand.self,
SWBServiceConsoleDescribeBuildSettingsCommand.self
] as [any SWBServiceConsoleCommand.Type]) {
SWBServiceConsoleCommandRegistry.registerCommandClass(commandClass)
}
}
extension SWBBuildService {
/// Dispatch a dump request.
fileprivate func requestDump(_ message: any SWBProtocol.Message) async -> SWBServiceConsoleResult {
switch await send(message) {
case let asError as ErrorResponse:
return SWBServiceConsoleResult(output: "error: \(asError.description)\n")
case let asString as StringResponse:
return SWBServiceConsoleResult(output: asString.value)
case let result:
return SWBServiceConsoleResult(output: "fatal error: unexpected reply: \(String(describing: result)))\n")
}
}
}
extension SWBBuildServiceSession {
/// Get a dump of the registered platforms.
public func getPlatformsDump(commandLine: [String]) async -> SWBServiceConsoleResult {
await service.requestDump(GetPlatformsRequest(sessionHandle: uid, commandLine: commandLine))
}
/// Get a dump of the registered SDKs.
public func getSDKsDump(commandLine: [String]) async -> SWBServiceConsoleResult {
await service.requestDump(GetSDKsRequest(sessionHandle: uid, commandLine: commandLine))
}
/// Get a dump of the registered specifications.
public func getSpecsDump(commandLine: [String]) async -> SWBServiceConsoleResult {
await service.requestDump(GetSpecsRequest(sessionHandle: uid, commandLine: commandLine))
}
/// Get a dump of the registered toolchains.
public func getToolchainsDump(commandLine: [String]) async -> SWBServiceConsoleResult {
await service.requestDump(GetToolchainsRequest(sessionHandle: uid, commandLine: commandLine))
}
/// Get a dump of the registered build settings.
public func getBuildSettingsDescriptionDump(commandLine: [String]) async -> SWBServiceConsoleResult {
await service.requestDump(GetBuildSettingsDescriptionRequest(sessionHandle: uid, commandLine: commandLine))
}
}
|