Skip to content

Commit 8dbfeac

Browse files
authored
Merge pull request #456 from swiftlang/upward-link-deps
Add an "upward" link library type for BuildDependencyInfo
2 parents 63c7f50 + efb2b10 commit 8dbfeac

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

Sources/SWBBuildService/BuildDependencyInfo.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ package struct BuildDependencyInfo: Codable {
117117
package enum LibraryType: String, Codable, Sendable {
118118
case dynamic
119119
case `static`
120+
case upward
120121
case unknown
121122
}
122123

@@ -434,9 +435,11 @@ extension BuildDependencyInfo {
434435
/// - remark: This is written somewhat generically (with the callback blocks) in the hopes that `LinkageDependencyResolver.dependencies(for:...)` can someday adopt it, as the general approach was stolen from there.
435436
package static func findLinkedInputsFromBuildSettings(_ settings: Settings, addFramework: @Sendable (TargetDependencyInfo.Input) async -> Void, addLibrary: @Sendable (TargetDependencyInfo.Input) async -> Void, addError: @Sendable (String) async -> Void) async {
436437
await LdLinkerSpec.processLinkerSettingsForLibraryOptions(settings: settings) { macro, flag, stem in
437-
await addFramework(TargetDependencyInfo.Input(inputType: .framework, name: .stem(stem), linkType: .searchPath, libraryType: .dynamic))
438+
let libType: TargetDependencyInfo.Input.LibraryType = (flag == "-upward_framework") ? .upward : .dynamic
439+
await addFramework(TargetDependencyInfo.Input(inputType: .framework, name: .stem(stem), linkType: .searchPath, libraryType: libType))
438440
} addLibrary: { macro, flag, stem in
439-
await addLibrary(TargetDependencyInfo.Input(inputType: .library, name: .stem(stem), linkType: .searchPath, libraryType: .unknown))
441+
let libType: TargetDependencyInfo.Input.LibraryType = (flag == "-upward-l") ? .upward : .unknown
442+
await addLibrary(TargetDependencyInfo.Input(inputType: .library, name: .stem(stem), linkType: .searchPath, libraryType: libType))
440443
} addError: { error in
441444
await addError(error)
442445
}

Tests/SWBBuildServiceTests/BuildDependencyInfoTests.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ import Foundation
313313
"-merge_framework MergeFwk",
314314
"-no_merge_framework NoMergeFwk",
315315
"-lazy_framework LazyFwk",
316+
"-upward_framework UpwardFwk",
316317

317318
// Apparently both of these uses of -Xlinker are valid
318319
"-Xlinker -reexport_framework -Xlinker XlinkXlinkFwk",
@@ -328,6 +329,7 @@ import Foundation
328329
"-merge-lMergeLib",
329330
"-no_merge-lNoMergeLib",
330331
"-lazy-lLazyLib",
332+
"-upward-lUpwardLib",
331333

332334
"-Xlinker -reexport-lXlinkerLib",
333335
"-Wl,-reexport-lQuoteLib",
@@ -397,6 +399,15 @@ import Foundation
397399
}
398400
}
399401

402+
// Check upward framework
403+
for fwkStem in ["UpwardFwk"] {
404+
results.checkTargetInputName(target, .stem(fwkStem)) { input in
405+
#expect(input.inputType == .framework)
406+
#expect(input.linkType == .searchPath)
407+
#expect(input.libraryType == .upward)
408+
}
409+
}
410+
400411
// Check library linkage
401412
for fwkStem in ["Lib", "WeakLib", "ReexportLib", "MergeLib", "NoMergeLib", "LazyLib"] {
402413
results.checkTargetInputName(target, .stem(fwkStem)) { input in
@@ -413,6 +424,15 @@ import Foundation
413424
}
414425
}
415426

427+
// Check upward library
428+
for fwkStem in ["UpwardLib"] {
429+
results.checkTargetInputName(target, .stem(fwkStem)) { input in
430+
#expect(input.inputType == .library)
431+
#expect(input.linkType == .searchPath)
432+
#expect(input.libraryType == .upward)
433+
}
434+
}
435+
416436
results.checkNoMoreTargetInputs(target)
417437

418438
results.checkTargetOutputPath(target, "/Applications/AppTarget.app")

0 commit comments

Comments
 (0)