@@ -551,6 +551,35 @@ extension Driver {
551
551
}
552
552
}
553
553
554
+ /// Create a job if needed for simple requests that can be immediately
555
+ /// forwarded to the frontend.
556
+ public mutating func immediateForwardingJob( ) throws -> Job ? {
557
+ if parsedOptions. hasArgument ( . printTargetInfo) {
558
+ var commandLine : [ Job . ArgTemplate ] = [ . flag( " -frontend " ) ,
559
+ . flag( " -print-target-info " ) ]
560
+ try commandLine. appendLast ( . target, from: & parsedOptions)
561
+ try commandLine. appendLast ( . sdk, from: & parsedOptions)
562
+ try commandLine. appendLast ( . resourceDir, from: & parsedOptions)
563
+ return Job ( kind: . printTargetInfo,
564
+ tool: . absolute( try toolchain. getToolPath ( . swiftCompiler) ) ,
565
+ commandLine: commandLine,
566
+ inputs: [ ] ,
567
+ outputs: [ ] ,
568
+ requiresInPlaceExecution: true )
569
+ }
570
+
571
+ if parsedOptions. hasArgument ( . version) || parsedOptions. hasArgument ( . version_) {
572
+ return Job ( kind: . versionRequest,
573
+ tool: . absolute( try toolchain. getToolPath ( . swiftCompiler) ) ,
574
+ commandLine: [ . flag( " --version " ) ] ,
575
+ inputs: [ ] ,
576
+ outputs: [ ] ,
577
+ requiresInPlaceExecution: true )
578
+ }
579
+
580
+ return nil
581
+ }
582
+
554
583
/// Run the driver.
555
584
public mutating func run(
556
585
resolver: ArgsResolver ,
@@ -567,17 +596,18 @@ extension Driver {
567
596
return
568
597
}
569
598
570
- if parsedOptions. hasArgument ( . version) || parsedOptions. hasArgument ( . version_) {
571
- // Follow gcc/clang behavior and use stdout for --version and stderr for -v.
572
- try printVersion ( outputStream: & stdoutStream)
573
- return
574
- }
575
599
if parsedOptions. hasArgument ( . v) {
576
600
try printVersion ( outputStream: & stderrStream)
577
601
}
578
602
579
- // Plan the build.
580
- let jobs = try planBuild ( )
603
+ let jobs : [ Job ]
604
+ if let job = try immediateForwardingJob ( ) {
605
+ jobs = [ job]
606
+ } else {
607
+ // Plan the build.
608
+ jobs = try planBuild ( )
609
+ }
610
+
581
611
if jobs. isEmpty { return }
582
612
583
613
// If we're only supposed to print the jobs, do so now.
0 commit comments