Skip to content

Commit 7549f3c

Browse files
committed
Switch over to using V2 of the swiftscan_compiler_target_info_query API
This new version takes the path to the compiler executable as a parameter, in order for libSwiftScan to compute compiler-relative portions of runtimeLibraryPaths, runtimeResourcePath, etc.
1 parent f9e905d commit 7549f3c

File tree

4 files changed

+24
-30
lines changed

4 files changed

+24
-30
lines changed

Sources/CSwiftScan/include/swiftscan_header.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,8 @@ typedef struct {
211211

212212
//=== Target Info Functions-------- ---------------------------------------===//
213213
swiftscan_string_ref_t
214-
(*swiftscan_compiler_target_info_query)(swiftscan_scan_invocation_t);
214+
(*swiftscan_compiler_target_info_query_v2)(swiftscan_scan_invocation_t,
215+
const char *);
215216

216217
//=== Functionality Query Functions ---------------------------------------===//
217218
swiftscan_string_set_t *

Sources/SwiftDriver/Driver/Driver.swift

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2972,28 +2972,16 @@ extension Driver {
29722972

29732973
// Query the frontend for target information.
29742974
do {
2975-
var info: FrontendTargetInfo = try executor.execute(
2976-
job: toolchain.printTargetInfoJob(
2977-
target: explicitTarget, targetVariant: explicitTargetVariant,
2978-
sdkPath: sdkPath, resourceDirPath: resourceDirPath,
2979-
runtimeCompatibilityVersion:
2980-
parsedOptions.getLastArgument(.runtimeCompatibilityVersion)?.asSingle,
2981-
useStaticResourceDir: useStaticResourceDir,
2982-
swiftCompilerPrefixArgs: frontendOverride.prefixArgsForTargetInfo
2983-
),
2984-
capturingJSONOutputAs: FrontendTargetInfo.self,
2985-
forceResponseFiles: false,
2986-
recordedInputModificationDates: [:])
2987-
// var info: FrontendTargetInfo =
2988-
// try Self.computeTargetInfo(target: explicitTarget, targetVariant: explicitTargetVariant,
2989-
// sdkPath: sdkPath, resourceDirPath: resourceDirPath,
2990-
// runtimeCompatibilityVersion:
2991-
// parsedOptions.getLastArgument(.runtimeCompatibilityVersion)?.asSingle,
2992-
// useStaticResourceDir: useStaticResourceDir,
2993-
// swiftCompilerPrefixArgs: frontendOverride.prefixArgsForTargetInfo,
2994-
// toolchain: toolchain, fileSystem: fileSystem,
2995-
// workingDirectory: workingDirectory,
2996-
// executor: executor)
2975+
var info: FrontendTargetInfo =
2976+
try Self.computeTargetInfo(target: explicitTarget, targetVariant: explicitTargetVariant,
2977+
sdkPath: sdkPath, resourceDirPath: resourceDirPath,
2978+
runtimeCompatibilityVersion:
2979+
parsedOptions.getLastArgument(.runtimeCompatibilityVersion)?.asSingle,
2980+
useStaticResourceDir: useStaticResourceDir,
2981+
swiftCompilerPrefixArgs: frontendOverride.prefixArgsForTargetInfo,
2982+
toolchain: toolchain, fileSystem: fileSystem,
2983+
workingDirectory: workingDirectory,
2984+
executor: executor)
29972985

29982986
// Parse the runtime compatibility version. If present, it will override
29992987
// what is reported by the frontend.

Sources/SwiftDriver/Jobs/PrintTargetInfoJob.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,10 @@ extension Driver {
189189
let libSwiftScanInstance = try SwiftScan(dylib: swiftScanLibPath)
190190
if libSwiftScanInstance.canQueryTargetInfo() {
191191
let cwd = workingDirectory ?? fileSystem.currentWorkingDirectory!
192+
let compilerExecutablePath = try toolchain.resolvedTool(.swiftCompiler).path
192193
let targetInfoData =
193194
try libSwiftScanInstance.queryTargetInfoJSON(workingDirectory: cwd,
195+
compilerExecutablePath: compilerExecutablePath,
194196
invocationCommand: invocationCommand)
195197
do {
196198
return try JSONDecoder().decode(FrontendTargetInfo.self, from: targetInfoData)

Sources/SwiftDriver/SwiftScan/SwiftScan.swift

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -319,11 +319,12 @@ internal extension swiftscan_diagnostic_severity_t {
319319
}
320320

321321
@_spi(Testing) public func canQueryTargetInfo() -> Bool {
322-
return api.swiftscan_compiler_target_info_query != nil &&
322+
return api.swiftscan_compiler_target_info_query_v2 != nil &&
323323
api.swiftscan_string_set_dispose != nil
324324
}
325325

326326
func queryTargetInfoJSON(workingDirectory: AbsolutePath,
327+
compilerExecutablePath: AbsolutePath,
327328
invocationCommand: [String]) throws -> Data {
328329
// Create and configure the scanner invocation
329330
let invocation = api.swiftscan_scan_invocation_create()
@@ -337,11 +338,13 @@ internal extension swiftscan_diagnostic_severity_t {
337338
Int32(invocationCommand.count),
338339
invocationStringArray)
339340
}
340-
let targetInfoStringRef = api.swiftscan_compiler_target_info_query(invocation)
341-
let targetInfoString = try toSwiftString(targetInfoStringRef)
342-
if supportsStringDispose() {
343-
api.swiftscan_string_dispose(targetInfoStringRef)
341+
342+
let targetInfoString: String = try compilerExecutablePath.description.withCString { cstring in
343+
let targetInfoStringRef = api.swiftscan_compiler_target_info_query_v2(invocation, cstring)
344+
defer { api.swiftscan_string_dispose(targetInfoStringRef) }
345+
return try toSwiftString(targetInfoStringRef)
344346
}
347+
345348
let targetInfoData = Data(targetInfoString.utf8)
346349
return targetInfoData
347350
}
@@ -382,8 +385,8 @@ private extension swiftscan_functions_t {
382385
try loadOptional("swiftscan_compiler_supported_features_query")
383386

384387
// Target Info query
385-
self.swiftscan_compiler_target_info_query =
386-
try loadOptional("swiftscan_compiler_target_info_query")
388+
self.swiftscan_compiler_target_info_query_v2 =
389+
try loadOptional("swiftscan_compiler_target_info_query_v2")
387390

388391
// Dependency scanner serialization/deserialization features
389392
self.swiftscan_scanner_cache_serialize =

0 commit comments

Comments
 (0)