@@ -395,8 +395,53 @@ public final class DarwinToolchain: Toolchain {
395
395
driver: inout Driver ,
396
396
skipMacroOptions: Bool
397
397
) throws {
398
- guard let sdkPath = frontendTargetInfo. sdkPath? . path,
399
- let sdkInfo = getTargetSDKInfo ( sdkPath: sdkPath) else { return }
398
+ let sdkPath = frontendTargetInfo. sdkPath? . path
399
+ let sdkInfo : DarwinSDKInfo ? = sdkPath != nil ? getTargetSDKInfo ( sdkPath: sdkPath!) : nil
400
+
401
+ // Pass down -clang-target.
402
+ // If not specified otherwise, we should use the same triple as -target
403
+ if !driver. parsedOptions. hasArgument ( . disableClangTarget) &&
404
+ driver. isFrontendArgSupported ( . clangTarget) &&
405
+ driver. parsedOptions. contains ( . driverExplicitModuleBuild) {
406
+ // The common target triple for all Clang dependencies of this compilation,
407
+ // both direct and transitive is computed as:
408
+ // 1. An explicitly-specified `-clang-target` argument to this driver invocation
409
+ // 2. (On Darwin) The target triple of the selected SDK
410
+ var clangTargetTriple : String ? = nil
411
+ if let explicitClangTripleArg = driver. parsedOptions. getLastArgument ( . clangTarget) ? . asSingle {
412
+ clangTargetTriple = explicitClangTripleArg
413
+ } else if let sdkInfo = sdkInfo {
414
+ let currentTriple = frontendTargetInfo. target. triple
415
+ let sdkVersionedOSString = currentTriple. osNameUnversioned + sdkInfo. sdkVersion ( for: currentTriple) . sdkVersionString
416
+ clangTargetTriple = currentTriple. triple. replacingOccurrences ( of: currentTriple. osName, with: sdkVersionedOSString)
417
+ }
418
+
419
+ if let clangTargetTriple {
420
+ commandLine. appendFlag ( . clangTarget)
421
+ commandLine. appendFlag ( clangTargetTriple)
422
+ }
423
+
424
+ // Repeat the above for the '-target-variant' flag
425
+ if driver. parsedOptions. contains ( . targetVariant) ,
426
+ driver. isFrontendArgSupported ( . clangTargetVariant) ,
427
+ let targetVariantTripleStr = frontendTargetInfo. targetVariant? . triple {
428
+ var clangTargetVariantTriple : String ? = nil
429
+ if let explicitClangTargetVariantArg = driver. parsedOptions. getLastArgument ( . clangTargetVariant) ? . asSingle {
430
+ clangTargetVariantTriple = explicitClangTargetVariantArg
431
+ } else if let sdkInfo {
432
+ let currentVariantTriple = targetVariantTripleStr
433
+ let sdkVersionedOSSString = currentVariantTriple. osNameUnversioned + sdkInfo. sdkVersion ( for: currentVariantTriple) . sdkVersionString
434
+ clangTargetVariantTriple = currentVariantTriple. triple. replacingOccurrences ( of: currentVariantTriple. osName, with: sdkVersionedOSSString)
435
+ }
436
+
437
+ if let clangTargetVariantTriple {
438
+ commandLine. appendFlag ( . clangTargetVariant)
439
+ commandLine. appendFlag ( clangTargetVariantTriple)
440
+ }
441
+ }
442
+ }
443
+
444
+ guard let sdkPath, let sdkInfo else { return }
400
445
401
446
commandLine. append ( . flag( " -target-sdk-version " ) )
402
447
commandLine. append ( . flag( sdkInfo. sdkVersion ( for: frontendTargetInfo. target. triple) . sdkVersionString) )
@@ -439,45 +484,6 @@ public final class DarwinToolchain: Toolchain {
439
484
commandLine. appendPath ( prebuiltModulesPath)
440
485
}
441
486
442
- // Pass down -clang-target.
443
- // If not specified otherwise, we should use the same triple as -target
444
- if !driver. parsedOptions. hasArgument ( . disableClangTarget) &&
445
- driver. isFrontendArgSupported ( . clangTarget) &&
446
- driver. parsedOptions. contains ( . driverExplicitModuleBuild) {
447
- // The common target triple for all Clang dependencies of this compilation,
448
- // both direct and transitive is computed as:
449
- // 1. An explicitly-specified `-clang-target` argument to this driver invocation
450
- // 2. (On Darwin) The target triple of the selected SDK
451
- let clangTargetTriple : String
452
- if let explicitClangTripleArg = driver. parsedOptions. getLastArgument ( . clangTarget) ? . asSingle {
453
- clangTargetTriple = explicitClangTripleArg
454
- } else {
455
- let currentTriple = frontendTargetInfo. target. triple
456
- let sdkVersionedOSString = currentTriple. osNameUnversioned + sdkInfo. sdkVersion ( for: currentTriple) . sdkVersionString
457
- clangTargetTriple = currentTriple. triple. replacingOccurrences ( of: currentTriple. osName, with: sdkVersionedOSString)
458
- }
459
-
460
- commandLine. appendFlag ( . clangTarget)
461
- commandLine. appendFlag ( clangTargetTriple)
462
-
463
- // Repeat the above for the '-target-variant' flag
464
- if driver. parsedOptions. contains ( . targetVariant) ,
465
- driver. isFrontendArgSupported ( . clangTargetVariant) ,
466
- let targetVariantTripleStr = frontendTargetInfo. targetVariant? . triple {
467
- let clangTargetVariantTriple : String
468
- if let explicitClangTargetVariantArg = driver. parsedOptions. getLastArgument ( . clangTargetVariant) ? . asSingle {
469
- clangTargetVariantTriple = explicitClangTargetVariantArg
470
- } else {
471
- let currentVariantTriple = targetVariantTripleStr
472
- let sdkVersionedOSSString = currentVariantTriple. osNameUnversioned + sdkInfo. sdkVersion ( for: currentVariantTriple) . sdkVersionString
473
- clangTargetVariantTriple = currentVariantTriple. triple. replacingOccurrences ( of: currentVariantTriple. osName, with: sdkVersionedOSSString)
474
- }
475
-
476
- commandLine. appendFlag ( . clangTargetVariant)
477
- commandLine. appendFlag ( clangTargetVariantTriple)
478
- }
479
- }
480
-
481
487
if driver. isFrontendArgSupported ( . externalPluginPath) && !skipMacroOptions {
482
488
// If the PLATFORM_DIR environment variable is set, also add plugin
483
489
// paths into it. Since this is a user override, it comes beore the
0 commit comments