Skip to content

Commit 68d7a50

Browse files
[Caching] Disable caching when -disable-bridging-pch is used
When a bridging header is present but `-disable-bridging-pch` is used, the resulting build is not fully using explicit module build which swift caching is relied on. Emit a warning and disable caching in this case.
1 parent 5fae1fd commit 68d7a50

File tree

1 file changed

+30
-25
lines changed

1 file changed

+30
-25
lines changed

Sources/SwiftDriver/Driver/Driver.swift

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -646,31 +646,6 @@ public struct Driver {
646646
diagnosticEngine: diagnosticsEngine,
647647
compilerMode: compilerMode)
648648

649-
let cachingEnabled = parsedOptions.hasArgument(.cacheCompileJob) || env.keys.contains("SWIFT_ENABLE_CACHING")
650-
if cachingEnabled {
651-
if !parsedOptions.hasArgument(.driverExplicitModuleBuild) {
652-
diagnosticsEngine.emit(.warning("-cache-compile-job cannot be used without explicit module build, turn off caching"),
653-
location: nil)
654-
self.enableCaching = false
655-
} else {
656-
self.enableCaching = true
657-
}
658-
} else {
659-
self.enableCaching = false
660-
}
661-
self.useClangIncludeTree = !parsedOptions.hasArgument(.noClangIncludeTree) && !env.keys.contains("SWIFT_CACHING_USE_CLANG_CAS_FS")
662-
self.scannerPrefixMap = try Self.computeScanningPrefixMapper(&parsedOptions)
663-
if let sdkMapping = parsedOptions.getLastArgument(.scannerPrefixMapSdk)?.asSingle {
664-
self.scannerPrefixMapSDK = try AbsolutePath(validating: sdkMapping)
665-
} else {
666-
self.scannerPrefixMapSDK = nil
667-
}
668-
if let toolchainMapping = parsedOptions.getLastArgument(.scannerPrefixMapToolchain)?.asSingle {
669-
self.scannerPrefixMapToolchain = try AbsolutePath(validating: toolchainMapping)
670-
} else {
671-
self.scannerPrefixMapToolchain = nil
672-
}
673-
674649
// Compute the working directory.
675650
workingDirectory = try parsedOptions.getLastArgument(.workingDirectory).map { workingDirectoryArg in
676651
let cwd = fileSystem.currentWorkingDirectory
@@ -851,6 +826,36 @@ public struct Driver {
851826
}
852827
self.supportedFrontendFeatures = try Self.computeSupportedCompilerFeatures(of: self.toolchain, env: env)
853828

829+
// Caching options.
830+
let cachingEnabled = parsedOptions.hasArgument(.cacheCompileJob) || env.keys.contains("SWIFT_ENABLE_CACHING")
831+
if cachingEnabled {
832+
if !parsedOptions.hasArgument(.driverExplicitModuleBuild) {
833+
diagnosticsEngine.emit(.warning("-cache-compile-job cannot be used without explicit module build, turn off caching"),
834+
location: nil)
835+
self.enableCaching = false
836+
} else if importedObjCHeader != nil && bridgingPrecompiledHeader == nil {
837+
diagnosticsEngine.emit(.warning("-cache-compile-job cannot be used with -disable-bridging-pch, turn off caching"),
838+
location: nil)
839+
self.enableCaching = false
840+
} else {
841+
self.enableCaching = true
842+
}
843+
} else {
844+
self.enableCaching = false
845+
}
846+
self.useClangIncludeTree = !parsedOptions.hasArgument(.noClangIncludeTree) && !env.keys.contains("SWIFT_CACHING_USE_CLANG_CAS_FS")
847+
self.scannerPrefixMap = try Self.computeScanningPrefixMapper(&parsedOptions)
848+
if let sdkMapping = parsedOptions.getLastArgument(.scannerPrefixMapSdk)?.asSingle {
849+
self.scannerPrefixMapSDK = try AbsolutePath(validating: sdkMapping)
850+
} else {
851+
self.scannerPrefixMapSDK = nil
852+
}
853+
if let toolchainMapping = parsedOptions.getLastArgument(.scannerPrefixMapToolchain)?.asSingle {
854+
self.scannerPrefixMapToolchain = try AbsolutePath(validating: toolchainMapping)
855+
} else {
856+
self.scannerPrefixMapToolchain = nil
857+
}
858+
854859
self.enabledSanitizers = try Self.parseSanitizerArgValues(
855860
&parsedOptions,
856861
diagnosticEngine: diagnosticEngine,

0 commit comments

Comments
 (0)