Skip to content

Commit 684581c

Browse files
authored
Merge pull request #54 from cltnschlosser/cs_pchFixes
generatePCH: Add -frontend, reorder flags to more closely match cpp driver. compile: Add -pch-output-dir
2 parents 44bc7a9 + eb65ca0 commit 684581c

File tree

3 files changed

+28
-21
lines changed

3 files changed

+28
-21
lines changed

Sources/SwiftDriver/Jobs/FrontendJobHelpers.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,9 @@ extension Driver {
161161
if requestPrecompiledObjCHeader, let pch = bridgingPrecompiledHeader {
162162
if parsedOptions.contains(.pchOutputDir) {
163163
commandLine.appendPath(importedObjCHeader)
164-
switch compilerMode {
165-
case .standardCompile, .batchCompile, .repl, .immediate:
164+
try commandLine.appendLast(.pchOutputDir, from: &parsedOptions)
165+
if !compilerMode.isSingleCompilation {
166166
commandLine.appendFlag(.pchDisableValidation)
167-
case .singleCompile:
168-
// Don't disable validation for single compile
169-
break
170167
}
171168
} else {
172169
commandLine.appendPath(pch)

Sources/SwiftDriver/Jobs/GeneratePCHJob.swift

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,10 @@ extension Driver {
1919
var outputs = [TypedVirtualPath]()
2020

2121
var commandLine: [Job.ArgTemplate] = swiftCompilerPrefixArgs.map { Job.ArgTemplate.flag($0) }
22-
23-
inputs.append(input)
24-
commandLine.appendPath(input.file)
25-
commandLine.appendFlag(.emitPch)
26-
27-
outputs.append(output)
22+
23+
commandLine.appendFlag("-frontend")
2824

2925
try addCommonFrontendOptions(commandLine: &commandLine, requestPrecompiledObjCHeader: false)
30-
31-
try commandLine.appendLast(.indexStorePath, from: &parsedOptions)
3226

3327
// TODO: Should this just be pch output with extension changed?
3428
if parsedOptions.hasArgument(.serializeDiagnostics), let outputDirectory = parsedOptions.getLastArgument(.pchOutputDir)?.asSingle {
@@ -48,13 +42,21 @@ extension Driver {
4842
commandLine.appendPath(path)
4943
outputs.append(.init(file: path, type: .diagnostics))
5044
}
45+
46+
inputs.append(input)
47+
commandLine.appendPath(input.file)
48+
49+
try commandLine.appendLast(.indexStorePath, from: &parsedOptions)
50+
51+
commandLine.appendFlag(.emitPch)
5152

5253
if parsedOptions.hasArgument(.pchOutputDir) {
5354
try commandLine.appendLast(.pchOutputDir, from: &parsedOptions)
5455
} else {
5556
commandLine.appendFlag(.o)
5657
commandLine.appendPath(output.file)
5758
}
59+
outputs.append(output)
5860

5961
return Job(
6062
kind: .generatePCH,

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,6 +1218,7 @@ final class SwiftDriverTests: XCTestCase {
12181218
XCTAssertEqual(plannedJobs[0].outputs.count, 1)
12191219
XCTAssertEqual(plannedJobs[0].outputs[0].file, .temporary(RelativePath("TestInputHeader.pch")))
12201220
XCTAssertEqual(plannedJobs[0].outputs[0].type, .pch)
1221+
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-frontend")))
12211222
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-emit-pch")))
12221223
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-o")))
12231224
XCTAssert(plannedJobs[0].commandLine.contains(.path(.temporary(RelativePath("TestInputHeader.pch")))))
@@ -1252,6 +1253,7 @@ final class SwiftDriverTests: XCTestCase {
12521253
XCTAssertEqual(plannedJobs[0].outputs.count, 1)
12531254
XCTAssertEqual(plannedJobs[0].outputs[0].file, .temporary(RelativePath("TestInputHeader.pch")))
12541255
XCTAssertEqual(plannedJobs[0].outputs[0].type, .pch)
1256+
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-frontend")))
12551257
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-emit-pch")))
12561258
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-index-store-path")))
12571259
XCTAssert(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "idx"))))
@@ -1275,6 +1277,7 @@ final class SwiftDriverTests: XCTestCase {
12751277
XCTAssertEqual(plannedJobs[0].outputs.count, 1)
12761278
XCTAssertEqual(plannedJobs[0].outputs[0].file, try VirtualPath(path: "/pch/TestInputHeader.pch"))
12771279
XCTAssertEqual(plannedJobs[0].outputs[0].type, .pch)
1280+
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-frontend")))
12781281
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-emit-pch")))
12791282
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-pch-output-dir")))
12801283
XCTAssert(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "/pch"))))
@@ -1297,6 +1300,7 @@ final class SwiftDriverTests: XCTestCase {
12971300
XCTAssertEqual(plannedJobs[0].outputs.count, 1)
12981301
XCTAssertEqual(plannedJobs[0].outputs[0].file, try VirtualPath(path: "/pch/TestInputHeader.pch"))
12991302
XCTAssertEqual(plannedJobs[0].outputs[0].type, .pch)
1303+
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-frontend")))
13001304
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-emit-pch")))
13011305
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-pch-output-dir")))
13021306
XCTAssert(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "/pch"))))
@@ -1341,12 +1345,13 @@ final class SwiftDriverTests: XCTestCase {
13411345
XCTAssertEqual(plannedJobs[0].inputs[0].file, .relative(RelativePath("TestInputHeader.h")))
13421346
XCTAssertEqual(plannedJobs[0].inputs[0].type, .objcHeader)
13431347
XCTAssertEqual(plannedJobs[0].outputs.count, 2)
1344-
XCTAssertEqual(plannedJobs[0].outputs[0].file, try VirtualPath(path: "/pch/TestInputHeader.pch"))
1345-
XCTAssertEqual(plannedJobs[0].outputs[0].type, .pch)
1346-
XCTAssertEqual(plannedJobs[0].outputs[1].file, .temporary(RelativePath("TestInputHeader.dia")))
1347-
XCTAssertEqual(plannedJobs[0].outputs[1].type, .diagnostics)
1348+
XCTAssertEqual(plannedJobs[0].outputs[0].file, .temporary(RelativePath("TestInputHeader.dia")))
1349+
XCTAssertEqual(plannedJobs[0].outputs[0].type, .diagnostics)
1350+
XCTAssertEqual(plannedJobs[0].outputs[1].file, try VirtualPath(path: "/pch/TestInputHeader.pch"))
1351+
XCTAssertEqual(plannedJobs[0].outputs[1].type, .pch)
13481352
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-serialize-diagnostics-path")))
13491353
XCTAssert(plannedJobs[0].commandLine.contains(.path(.temporary(RelativePath("TestInputHeader.dia")))))
1354+
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-frontend")))
13501355
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-emit-pch")))
13511356
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-pch-output-dir")))
13521357
XCTAssert(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "/pch"))))
@@ -1367,15 +1372,16 @@ final class SwiftDriverTests: XCTestCase {
13671372
XCTAssertEqual(plannedJobs[0].inputs[0].file, .relative(RelativePath("TestInputHeader.h")))
13681373
XCTAssertEqual(plannedJobs[0].inputs[0].type, .objcHeader)
13691374
XCTAssertEqual(plannedJobs[0].outputs.count, 2)
1370-
XCTAssertEqual(plannedJobs[0].outputs[0].file, try VirtualPath(path: "/pch/TestInputHeader.pch"))
1371-
XCTAssertEqual(plannedJobs[0].outputs[0].type, .pch)
1372-
XCTAssertNotNil(plannedJobs[0].outputs[1].file.name.range(of: #"/pch/TestInputHeader-.*.dia"#, options: .regularExpression))
1373-
XCTAssertEqual(plannedJobs[0].outputs[1].type, .diagnostics)
1375+
XCTAssertNotNil(plannedJobs[0].outputs[0].file.name.range(of: #"/pch/TestInputHeader-.*.dia"#, options: .regularExpression))
1376+
XCTAssertEqual(plannedJobs[0].outputs[0].type, .diagnostics)
1377+
XCTAssertEqual(plannedJobs[0].outputs[1].file, try VirtualPath(path: "/pch/TestInputHeader.pch"))
1378+
XCTAssertEqual(plannedJobs[0].outputs[1].type, .pch)
13741379
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-serialize-diagnostics-path")))
13751380
XCTAssert(plannedJobs[0].commandLine.contains {
13761381
guard case .path(let path) = $0 else { return false }
13771382
return path.name.range(of: #"/pch/TestInputHeader-.*.dia"#, options: .regularExpression) != nil
13781383
})
1384+
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-frontend")))
13791385
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-emit-pch")))
13801386
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-pch-output-dir")))
13811387
XCTAssert(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "/pch"))))
@@ -1400,6 +1406,7 @@ final class SwiftDriverTests: XCTestCase {
14001406
XCTAssertEqual(plannedJobs[0].outputs.count, 1)
14011407
XCTAssertEqual(plannedJobs[0].outputs[0].file, try VirtualPath(path: "/pch/TestInputHeader.pch"))
14021408
XCTAssertEqual(plannedJobs[0].outputs[0].type, .pch)
1409+
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-frontend")))
14031410
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-emit-pch")))
14041411
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-pch-output-dir")))
14051412
XCTAssert(plannedJobs[0].commandLine.contains(.path(try VirtualPath(path: "/pch"))))
@@ -1423,6 +1430,7 @@ final class SwiftDriverTests: XCTestCase {
14231430
XCTAssertEqual(plannedJobs[0].outputs[0].file, .temporary(RelativePath("TestInputHeader.pch")))
14241431
XCTAssertEqual(plannedJobs[0].outputs[0].type, .pch)
14251432
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-O")))
1433+
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-frontend")))
14261434
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-emit-pch")))
14271435
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-o")))
14281436
XCTAssert(plannedJobs[0].commandLine.contains(.path(.temporary(RelativePath("TestInputHeader.pch")))))

0 commit comments

Comments
 (0)