Skip to content

Commit d09d510

Browse files
authored
Merge pull request #891 from owenv/owenv/targetresolution-refactors
Begin refactor target dependency resolution to be more easily extensible
2 parents de01002 + 0d58d2a commit d09d510

24 files changed

+299
-1197
lines changed

Sources/SWBBuildSystem/BuildOperation.swift

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -310,62 +310,6 @@ package final class BuildOperation: BuildSystemOperation {
310310
return effectiveStatus
311311
}
312312

313-
// Helper method to emit information to the CAPTURED_BUILD_INFO_DIR. This is mainly to be able to gracefully return after emitting a warning if something goes wrong, because not being able to emit this info is typically not serious enough to want to abort the whole build.
314-
func emitCapturedBuildInfo(to path: Path) {
315-
// If the build description doesn't have captured build info, then we don't emit it. Otherwise we proceed.
316-
guard let capturedBuildInfo = buildDescription.capturedBuildInfo else {
317-
buildOutputDelegate.warning("no captured build info available for incremental build - not emitting it")
318-
return
319-
}
320-
321-
guard path.isAbsolute else {
322-
buildOutputDelegate.warning("CAPTURED_BUILD_INFO_DIR must be an absolute path, but is \(path.str) (skipping emitting captured build info)")
323-
return
324-
}
325-
326-
// Create the directory if necessary.
327-
if !fs.exists(path) {
328-
do {
329-
try fs.createDirectory(path, recursive: true)
330-
}
331-
catch {
332-
buildOutputDelegate.warning("Could not create directory for CAPTURED_BUILD_INFO_DIR (\(path.str)): \(error) (skipping emitting captured build info)")
333-
return
334-
}
335-
}
336-
else {
337-
guard fs.isDirectory(path) else {
338-
buildOutputDelegate.warning("CAPTURED_BUILD_INFO_DIR (\(path.str)) exists but is not a directory (skipping emitting captured build info)")
339-
return
340-
}
341-
}
342-
343-
// The output path includes our process ID, since there might be multiple builds dumping information here, e.g. if there's a script which invokes another xcodebuild instance.
344-
let pid = ProcessInfo.processInfo.processIdentifier
345-
let outputFilePath = path.join("xcodebuildCapturedInfo_\(pid).\(capturedBuildInfoFileExtension)")
346-
347-
// Write the captured build info to the file.
348-
do {
349-
try fs.write(outputFilePath, contents: capturedBuildInfo.propertyListItem.asJSONFragment() + "\n")
350-
}
351-
catch {
352-
buildOutputDelegate.warning("Could not write captured build info to '\(outputFilePath.str)': \(error)")
353-
return
354-
}
355-
356-
buildOutputDelegate.note("Wrote captured build info to \(outputFilePath.str)")
357-
}
358-
359-
// If we were asked to emit information about the targets being built, then do so now, unless we're in "dry run" mode.
360-
if !request.useDryRun, let capturedBuildInfoDir = environment?["CAPTURED_BUILD_INFO_DIR"] {
361-
if !capturedBuildInfoDir.isEmpty {
362-
// If the resolved path is not empty, then emit the captured build info.
363-
emitCapturedBuildInfo(to: Path(capturedBuildInfoDir))
364-
} else {
365-
buildOutputDelegate.warning("CAPTURED_BUILD_INFO_DIR is set but is empty (skipping emitting captured build info)")
366-
}
367-
}
368-
369313
// If task construction had errors, fail the build immediately, unless `continueBuildingAfterErrors` is set.
370314
if !request.continueBuildingAfterErrors && buildDescription.hadErrors {
371315
let effectiveStatus = BuildOperationEnded.Status.failed

Sources/SWBCore/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ add_library(SWBCore
2121
BuildRuleAction.swift
2222
BuildRuleCondition.swift
2323
BuildRuleSet.swift
24-
CapturedBuildInfo.swift
2524
ClangModuleVerifier/ModuleVerifierFilenameMap.swift
2625
ClangModuleVerifier/ModuleVerifierFramework.swift
2726
ClangModuleVerifier/ModuleVerifierHeader.swift

Sources/SWBCore/CapturedBuildInfo.swift

Lines changed: 0 additions & 496 deletions
This file was deleted.

Sources/SWBCore/DependencyResolution.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ import struct SWBProtocol.RunDestinationInfo
1515
import SWBMacro
1616

1717
public protocol TargetGraph: Sendable {
18-
var workspaceContext: WorkspaceContext { get }
19-
2018
var allTargets: OrderedSet<ConfiguredTarget> { get }
2119

2220
func dependencies(of target: ConfiguredTarget) -> [ConfiguredTarget]

Sources/SWBCore/TargetDependencyResolver.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,12 @@ public struct TargetBuildGraph: TargetGraph, Sendable {
7979
}
8080

8181
/// The workspace context this graph is for.
82-
public let workspaceContext: WorkspaceContext
82+
private let workspaceContext: WorkspaceContext
8383

8484
/// The build request the graph is for.
85-
public let buildRequest: BuildRequest
85+
private let buildRequest: BuildRequest
8686

87-
public let buildRequestContext: BuildRequestContext
87+
private let buildRequestContext: BuildRequestContext
8888

8989
/// The complete list of configured targets, in topological order. That is, each target will be included in the array only after all of the targets that it depends on (unless there is a target dependency cycle).
9090
public let allTargets: OrderedSet<ConfiguredTarget>

Sources/SWBCore/WorkspaceSettingsCache.swift

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ final class WorkspaceSettingsCache: Sendable {
7070
}
7171

7272
/// Get the cached settings for the given parameters, without considering the context of any project/target.
73-
public func getCachedSettings(_ parameters: BuildParameters, buildRequestContext: BuildRequestContext, purpose: SettingsPurpose = .build, filesSignature: ([Path]) -> FilesSignature) -> Settings {
73+
public func getCachedSettings(_ parameters: BuildParameters, buildRequestContext: BuildRequestContext, purpose: SettingsPurpose, filesSignature: ([Path]) -> FilesSignature) -> Settings {
7474
let key = SettingsCacheKey(parameters: parameters, projectGUID: nil, targetGUID: nil, purpose: purpose, provisioningTaskInputs: nil, impartedBuildProperties: nil)
7575

7676
// Check if there were any changes in used xcconfigs
@@ -80,20 +80,10 @@ final class WorkspaceSettingsCache: Sendable {
8080
}
8181
}
8282

83-
/// Get the cached settings for the given parameters and project.
84-
public func getCachedSettings(_ parameters: BuildParameters, project: Project, purpose: SettingsPurpose = .build, provisioningTaskInputs: ProvisioningTaskInputs? = nil, impartedBuildProperties: [ImpartedBuildProperties]? = nil, buildRequestContext: BuildRequestContext, filesSignature: ([Path]) -> FilesSignature) -> Settings {
85-
return getCachedSettings(parameters, project: project, target: nil, purpose: purpose, provisioningTaskInputs: provisioningTaskInputs, impartedBuildProperties: impartedBuildProperties, buildRequestContext: buildRequestContext, filesSignature: filesSignature)
86-
}
87-
88-
/// Get the cached settings for the given parameters and target.
89-
public func getCachedSettings(_ parameters: BuildParameters, target: Target, purpose: SettingsPurpose = .build, provisioningTaskInputs: ProvisioningTaskInputs? = nil, impartedBuildProperties: [ImpartedBuildProperties]? = nil, buildRequestContext: BuildRequestContext, filesSignature: ([Path]) -> FilesSignature) -> Settings {
90-
return getCachedSettings(parameters, project: workspaceContext.workspace.project(for: target), target: target, purpose: purpose, provisioningTaskInputs: provisioningTaskInputs, impartedBuildProperties: impartedBuildProperties, buildRequestContext: buildRequestContext, filesSignature: filesSignature)
91-
}
92-
9383
/// Private method to get the cached settings for the given parameters, project, and target.
9484
///
9585
/// - remark: This is internal so that clients don't somehow call this with a project which doesn't match the target, except for `BuildRequestContext` which has a cover method for it. There are public methods covering this one.
96-
internal func getCachedSettings(_ parameters: BuildParameters, project: Project, target: Target? = nil, purpose: SettingsPurpose = .build, provisioningTaskInputs: ProvisioningTaskInputs? = nil, impartedBuildProperties: [ImpartedBuildProperties]? = nil, buildRequestContext: BuildRequestContext, filesSignature: ([Path]) -> FilesSignature) -> Settings {
86+
internal func getCachedSettings(_ parameters: BuildParameters, project: Project, target: Target?, purpose: SettingsPurpose, provisioningTaskInputs: ProvisioningTaskInputs?, impartedBuildProperties: [ImpartedBuildProperties]?, buildRequestContext: BuildRequestContext, filesSignature: ([Path]) -> FilesSignature) -> Settings {
9787
let key = SettingsCacheKey(parameters: parameters, projectGUID: project.guid, targetGUID: target?.guid, purpose: purpose, provisioningTaskInputs: provisioningTaskInputs, impartedBuildProperties: impartedBuildProperties)
9888

9989
// Check if there were any changes in used xcconfigs

0 commit comments

Comments
 (0)