Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .swift-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6.1.2
6.1.2
2 changes: 1 addition & 1 deletion Sources/Build/BuildOperation.swift
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ public final class BuildOperation: PackageStructureDelegate, SPMBuildCore.BuildS
// Perform the build.
let llbuildTarget = try await computeLLBuildTargetName(for: subset)
let success = buildSystem.build(target: llbuildTarget)

let duration = buildStartTime.distance(to: .now())

let subsetDescriptor: String?
Expand Down
2 changes: 0 additions & 2 deletions Sources/PackageModel/Platform.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,6 @@ public struct Platform: Equatable, Hashable, Codable, Sendable {
public static let wasi: Platform = Platform(name: "wasi", oldestSupportedVersion: .unknown)
public static let openbsd: Platform = Platform(name: "openbsd", oldestSupportedVersion: .unknown)
public static let freebsd: Platform = Platform(name: "freebsd", oldestSupportedVersion: .unknown)


}

/// Represents a platform supported by a target.
Expand Down
69 changes: 65 additions & 4 deletions Sources/SwiftBuildSupport/SwiftBuildSystem.swift
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,7 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
var serializedDiagnosticPathsByTargetName: [String: [Basics.AbsolutePath]] = [:]
do {
try await withSession(service: service, name: self.buildParameters.pifManifest.pathString, toolchainPath: self.buildParameters.toolchain.toolchainDir, packageManagerResourcesDirectory: self.packageManagerResourcesDirectory) { session, _ in
// TODO bp possible duplication of this message being sent to stdout
self.outputStream.send("Building for \(self.buildParameters.configuration == .debug ? "debugging" : "production")...\n")

// Load the workspace, and set the system information to the default
Expand Down Expand Up @@ -427,6 +428,7 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {

struct BuildState {
private var targetsByID: [Int: SwiftBuild.SwiftBuildMessage.TargetStartedInfo] = [:]
private var targetsByGUID: [SWBProjectModel.PIF.GUID: SwiftBuild.SwiftBuildMessage.TargetStartedInfo] = [:]
private var activeTasks: [Int: SwiftBuild.SwiftBuildMessage.TaskStartedInfo] = [:]

mutating func started(task: SwiftBuild.SwiftBuildMessage.TaskStartedInfo) throws {
Expand All @@ -447,7 +449,19 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
if targetsByID[target.targetID] != nil {
throw Diagnostics.fatalError
}
if targetsByGUID[target.targetGUID] != nil {
throw Diagnostics.fatalError
}
targetsByID[target.targetID] = target
targetsByGUID[target.targetGUID] = target
}

mutating func completed(target: SwiftBuild.SwiftBuildMessage.TargetCompleteInfo) throws -> SwiftBuild.SwiftBuildMessage.TargetStartedInfo {
guard let target = targetsByID[target.targetID] else {
// TODO bp better error here?
throw Diagnostics.fatalError
}
return target
}

mutating func target(for task: SwiftBuild.SwiftBuildMessage.TaskStartedInfo) throws -> SwiftBuild.SwiftBuildMessage.TargetStartedInfo? {
Expand All @@ -459,6 +473,27 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
}
return target
}

mutating func target(for guid: SWBProjectModel.PIF.GUID) throws -> SwiftBuild.SwiftBuildMessage.TargetStartedInfo? {
guard let target = targetsByGUID[guid] else {
// throw Diagnostics.fatalError
return nil
}

return target
}

mutating func task(for target: SwiftBuild.SwiftBuildMessage.TargetStartedInfo) throws -> SwiftBuild.SwiftBuildMessage.TaskStartedInfo {

guard let task = activeTasks.values.first(where: { $0.targetID == target.targetID }) else {
// TODO bp: better error message here
throw Diagnostics.fatalError
}

// TODO bp should check if targetsByID has entry for this target?

return task
}
}

func emitEvent(_ message: SwiftBuild.SwiftBuildMessage, buildState: inout BuildState) throws {
Expand Down Expand Up @@ -508,7 +543,9 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {

emitInfoAsDiagnostic(info: info)
case .output(let info):
self.observabilityScope.emit(info: "\(String(decoding: info.data, as: UTF8.self))")
// TODO bp error code block being emitted under info severity here
let message = "\(String(decoding: info.data, as: UTF8.self))"
self.observabilityScope.emit(info: message)
case .taskStarted(let info):
try buildState.started(task: info)

Expand Down Expand Up @@ -542,14 +579,38 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
}
case .targetStarted(let info):
try buildState.started(target: info)
case .planningOperationStarted, .planningOperationCompleted, .reportBuildDescription, .reportPathMap, .preparedForIndex, .backtraceFrame, .buildStarted, .preparationComplete, .targetUpToDate, .targetComplete, .taskUpToDate:
case .targetComplete(let info):
let startedTargetInfo = try buildState.completed(target: info)
let taskInfo = try buildState.task(for: startedTargetInfo) // TODO bp can simplify to passing just targetID
// TODO bp: get task associated with the target id?
// if info.result != .success {
//
// }
let targetName = startedTargetInfo.targetName
self.delegate?.buildSystem(self, didFinishCommand: BuildSystemCommand(taskInfo, targetInfo: startedTargetInfo))
serializedDiagnosticPathsByTargetName[targetName, default: []].append(contentsOf: taskInfo.serializedDiagnosticsPaths.compactMap {
try? Basics.AbsolutePath(validating: $0.pathString)
})
self.observabilityScope.emit(error: "TARGET COMPLETE: \(message)")
case .targetUpToDate(let info):
let targetInfo = try buildState.target(for: info.guid)
self.observabilityScope.emit(error: "TARGET UP TO DATE \(targetInfo?.targetName ?? "<unknown>")")

case .planningOperationStarted, .planningOperationCompleted, .reportBuildDescription, .reportPathMap, .preparedForIndex, .backtraceFrame, .buildStarted, .preparationComplete, /*.targetUpToDate,*/ /*.targetComplete,*/ .taskUpToDate:
// TODO bp print out every message here for investigation (--vv)
self.observabilityScope.emit(error: "Unhandled message: \(message)")
break
case .buildDiagnostic, .targetDiagnostic, .taskDiagnostic:
break // deprecated
case .buildOutput, .targetOutput, .taskOutput:
break // deprecated
@unknown default:
break

// default:
// self.outputStream.send(<#T##value: ArraySlice<UInt8>##ArraySlice<UInt8>#>)
// self.observabilityScope.emit(info: "\(message)")
// @unknown default:
// break
// TODO bp print(message) instead of switch
}
}

Expand Down
3 changes: 3 additions & 0 deletions err_output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Building for debugging...
[0/3] Write swift-version-4C9A2395E9159513.txt
Build of product 'swift-build' complete! (0.31s)
6 changes: 6 additions & 0 deletions output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Building for debugging...
[0/3] Write swift-version-4C9A2395E9159513.txt
Build of product 'swift-build' complete! (0.29s)
Building for debugging...
Write auxiliary file /Users/bripeticca/dev/swift-tooling/test-projects/swift-crypto/.build/arm64-apple-macosx/debug/swift-version-61A6B76668897818.txt
Build complete! (0.29s)
Loading