Skip to content

Commit 21c8e6e

Browse files
Bigcheesevsarunas
authored andcommitted
Move the SDK EMB cache out of ModuleCache.noindex (swiftlang#1416)
Add SDK_EXPLICIT_MODULES_OUTPUT_PATH and use it for -sdk-module-cache-path instead of MODULE_CACHE_DIR. Putting the scanning and EBM cache in the same directory was confusing when looking at logs. This defaults to $(DERIVED_DATA_DIR)/SDKExplicitPrecompiledModules rdar://175038966
1 parent 0a810a4 commit 21c8e6e

11 files changed

Lines changed: 25 additions & 7 deletions

File tree

Sources/SWBBuildSystem/BuildOperation.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1660,6 +1660,7 @@ internal final class OperationSystemAdaptor: SWBLLBuild.BuildSystemDelegate, Act
16601660
let targetSettings = operation.requestContext.getCachedSettings(operation.request.parameters, target: target.target)
16611661
directories.insert(targetSettings.globalScope.evaluate(BuiltinMacros.CLANG_EXPLICIT_MODULES_OUTPUT_PATH))
16621662
directories.insert(targetSettings.globalScope.evaluate(BuiltinMacros.SWIFT_EXPLICIT_MODULES_OUTPUT_PATH))
1663+
directories.insert(targetSettings.globalScope.evaluate(BuiltinMacros.SDK_EXPLICIT_MODULES_OUTPUT_PATH))
16631664
if let value = TimeInterval(targetSettings.globalScope.evaluate(BuiltinMacros.CLANG_MODULES_PRUNE_AFTER)) {
16641665
pruneAfter = value
16651666
}

Sources/SWBCore/ClangSerializedDiagnostics.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public struct LibclangDiagnosticAttachmentInfo: SerializableCodable, Sendable {
2727
BuiltinMacros.MODULE_CACHE_DIR,
2828
BuiltinMacros.CLANG_EXPLICIT_MODULES_OUTPUT_PATH,
2929
BuiltinMacros.SWIFT_EXPLICIT_MODULES_OUTPUT_PATH,
30+
BuiltinMacros.SDK_EXPLICIT_MODULES_OUTPUT_PATH,
3031
].compactMap {
3132
scope.evaluate($0).nilIfEmpty
3233
}

Sources/SWBCore/Settings/BuiltinMacros.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,7 @@ public final class BuiltinMacros {
532532
public static let CLANG_EXPLICIT_MODULES_IGNORE_LIBCLANG_VERSION_MISMATCH = BuiltinMacros.declareBooleanMacro("CLANG_EXPLICIT_MODULES_IGNORE_LIBCLANG_VERSION_MISMATCH")
533533
public static let CLANG_EXPLICIT_MODULES_OUTPUT_PATH = BuiltinMacros.declarePathMacro("CLANG_EXPLICIT_MODULES_OUTPUT_PATH")
534534
public static let SWIFT_EXPLICIT_MODULES_OUTPUT_PATH = BuiltinMacros.declarePathMacro("SWIFT_EXPLICIT_MODULES_OUTPUT_PATH")
535+
public static let SDK_EXPLICIT_MODULES_OUTPUT_PATH = BuiltinMacros.declarePathMacro("SDK_EXPLICIT_MODULES_OUTPUT_PATH")
535536
public static let CLANG_EXPLICIT_MODULES_ENABLE_REPRODUCER_FOR_ERRORS = BuiltinMacros.declareBooleanMacro("_EXPERIMENTAL_CLANG_EXPLICIT_MODULES_ENABLE_REPRODUCER_FOR_ERRORS")
536537
public static let CLANG_EXPLICIT_MODULES_REPRODUCER_OUTPUT_PATH = BuiltinMacros.declarePathMacro("CLANG_CRASH_DIAGNOSTICS_DIR")
537538
public static let CLANG_ENABLE_COMPILE_CACHE = BuiltinMacros.declareBooleanMacro("CLANG_ENABLE_COMPILE_CACHE")
@@ -1581,6 +1582,7 @@ public final class BuiltinMacros {
15811582
CLANG_EXPLICIT_MODULES_IGNORE_LIBCLANG_VERSION_MISMATCH,
15821583
CLANG_EXPLICIT_MODULES_OUTPUT_PATH,
15831584
SWIFT_EXPLICIT_MODULES_OUTPUT_PATH,
1585+
SDK_EXPLICIT_MODULES_OUTPUT_PATH,
15841586
CLANG_EXPLICIT_MODULES_ENABLE_REPRODUCER_FOR_ERRORS,
15851587
CLANG_EXPLICIT_MODULES_REPRODUCER_OUTPUT_PATH,
15861588
CLANG_EXTRACT_API_EXEC,

Sources/SWBCore/Settings/Settings.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,9 @@ final class WorkspaceSettings: Sendable {
537537
// Add shared output path for Swift explicit modules
538538
table.push(BuiltinMacros.SWIFT_EXPLICIT_MODULES_OUTPUT_PATH, Static { BuiltinMacros.namespace.parseString("$(OBJROOT)/SwiftExplicitPrecompiledModules") })
539539

540+
// Shared output path for SDK explicit modules. Lives adjacent to ModuleCache.noindex under DerivedData so it is shared across projects (SDK PCMs are invariant across projects that share an SDK and toolchain).
541+
table.push(BuiltinMacros.SDK_EXPLICIT_MODULES_OUTPUT_PATH, Static { BuiltinMacros.namespace.parseString("$(DERIVED_DATA_DIR)/SDKExplicitPrecompiledModules") })
542+
540543
// Add default values for the compilation caching plugin (off-by-default).
541544
table.push(BuiltinMacros.COMPILATION_CACHE_PLUGIN_PATH, Static { BuiltinMacros.namespace.parseString("$(DEVELOPER_USR_DIR)/lib/libToolchainCASPlugin.dylib") })
542545

@@ -4111,8 +4114,9 @@ private class SettingsBuilder: ProjectMatchLookup {
41114114
derivedDataPath = workspaceContext.workspaceSettings.getCacheRoot()
41124115
}
41134116

4114-
// If there is no DerivedData then intentionally remove the MODULE_CACHE_DIR setting (which is defined in terms of it).
4117+
// If there is no DerivedData then intentionally remove the MODULE_CACHE_DIR and SDK_EXPLICIT_MODULES_OUTPUT_PATH settings (which are defined in terms of it).
41154118
table.push(BuiltinMacros.MODULE_CACHE_DIR, literal: "")
4119+
table.push(BuiltinMacros.SDK_EXPLICIT_MODULES_OUTPUT_PATH, literal: "")
41164120
}
41174121

41184122
table.push(BuiltinMacros.DERIVED_DATA_DIR, BuiltinMacros.namespace.parseString(derivedDataPath!.str))

Sources/SWBCore/SpecImplementations/Tools/SwiftCompiler.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1443,9 +1443,11 @@ public final class SwiftCompilerSpec : CompilerSpec, SpecIdentifierType, SwiftDi
14431443
// Specify the Clang scanner cache separately as a shared cache among different projects
14441444
args.append(contentsOf: ["-clang-scanner-module-cache-path", moduleCacheDir.str])
14451445
}
1446-
if LibSwiftDriver.supportsDriverFlag(spelled: "-sdk-module-cache-path"),
1447-
!moduleCacheDir.isEmpty {
1448-
args.append(contentsOf: ["-sdk-module-cache-path", moduleCacheDir.str])
1446+
if LibSwiftDriver.supportsDriverFlag(spelled: "-sdk-module-cache-path") {
1447+
let sdkExplicitModulesDir = cbc.scope.evaluate(BuiltinMacros.SDK_EXPLICIT_MODULES_OUTPUT_PATH)
1448+
if !sdkExplicitModulesDir.isEmpty {
1449+
args.append(contentsOf: ["-sdk-module-cache-path", sdkExplicitModulesDir.str])
1450+
}
14491451
}
14501452
}
14511453
} else {

Sources/SWBCore/WorkspaceContext.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ public final class WorkspaceContext: Sendable {
356356
}
357357

358358
public var cacheDirectoryMacros: [PathMacroDeclaration] {
359-
return [BuiltinMacros.MODULE_CACHE_DIR, BuiltinMacros.COMPILATION_CACHE_CAS_PATH, BuiltinMacros.SWIFT_EXPLICIT_MODULES_OUTPUT_PATH, BuiltinMacros.CLANG_EXPLICIT_MODULES_OUTPUT_PATH, BuiltinMacros.SHARED_PRECOMPS_DIR]
359+
return [BuiltinMacros.MODULE_CACHE_DIR, BuiltinMacros.COMPILATION_CACHE_CAS_PATH, BuiltinMacros.SWIFT_EXPLICIT_MODULES_OUTPUT_PATH, BuiltinMacros.CLANG_EXPLICIT_MODULES_OUTPUT_PATH, BuiltinMacros.SDK_EXPLICIT_MODULES_OUTPUT_PATH, BuiltinMacros.SHARED_PRECOMPS_DIR]
360360
}
361361

362362
/// The path to the module session file for the workspace given a set of build parameters.

Sources/SWBTaskExecution/BuildDescriptionManager.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ package final class BuildDescriptionManager: Sendable {
214214
settings.globalScope.evaluate(BuiltinMacros.MODULE_CACHE_DIR),
215215
settings.globalScope.evaluate(BuiltinMacros.SWIFT_EXPLICIT_MODULES_OUTPUT_PATH),
216216
settings.globalScope.evaluate(BuiltinMacros.CLANG_EXPLICIT_MODULES_OUTPUT_PATH),
217+
settings.globalScope.evaluate(BuiltinMacros.SDK_EXPLICIT_MODULES_OUTPUT_PATH),
217218
]
218219

219220
artifactInfoPerTarget[target] = settings.productType?.artifactInfo(in: settings.globalScope)

Tests/SWBBuildSystemTests/CleanOperationTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ fileprivate struct CleanOperationTests: CoreBasedTests {
266266
let buildRequest = BuildRequest(parameters: parameters, buildTargets: buildTargets, continueBuildingAfterErrors: true, useParallelTargets: true, useImplicitDependencies: false, useDryRun: false)
267267
try await tester.checkBuild(runDestination: .macOS, buildRequest: buildRequest, persistent: true) { results in
268268
results.checkTasks(.matchRuleType("CreateBuildDirectory")) { tasks in
269-
#expect(tasks.count == 12)
269+
#expect(tasks.count == 13)
270270
}
271271

272272
results.checkNoTask(.matchRuleType("CreateBuildDirectory"))

Tests/SWBCoreTests/SettingsTests.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,8 @@ import SWBTestSupport
403403
#expect(settings.globalScope.evaluate(BuiltinMacros.OBJROOT) == Path("\(project.sourceRoot.str)/build"))
404404
#expect(settings.globalScope.evaluate(BuiltinMacros.CONFIGURATION_BUILD_DIR) == Path("\(project.sourceRoot.str)/build/Config1"))
405405
#expect(settings.globalScope.evaluate(BuiltinMacros.CLANG_EXPLICIT_MODULES_OUTPUT_PATH).str == "\(project.sourceRoot.str)/build/ExplicitPrecompiledModules")
406+
// SDK_EXPLICIT_MODULES_OUTPUT_PATH is defined in terms of DERIVED_DATA_DIR, so it is explicitly cleared when there is no DerivedData (as with MODULE_CACHE_DIR above).
407+
#expect(settings.tableForTesting.lookupMacro(BuiltinMacros.SDK_EXPLICIT_MODULES_OUTPUT_PATH)?.expression.stringRep == "")
406408
}
407409

408410
// check that we get the right value for VERSION_INFO_STRING, which validates we parsed it correctly.

Tests/SWBTaskConstructionTests/SwiftTaskConstructionTests.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1248,6 +1248,7 @@ fileprivate struct SwiftTaskConstructionTests: CoreBasedTests {
12481248
"GCC_GENERATE_DEBUGGING_SYMBOLS": "NO",
12491249
"SWIFT_ENABLE_EXPLICIT_MODULES": "YES",
12501250
"SWIFT_EXPLICIT_MODULES_OUTPUT_PATH": "/path/to/ExplicitModules",
1251+
"SDK_EXPLICIT_MODULES_OUTPUT_PATH": "/path/to/SDKExplicitModules",
12511252
]),
12521253
],
12531254
targets: [
@@ -1281,7 +1282,7 @@ fileprivate struct SwiftTaskConstructionTests: CoreBasedTests {
12811282
task.checkCommandLineContains(["-clang-scanner-module-cache-path", "/path/to/DerivedData/ModuleCache.noindex"])
12821283
}
12831284
if LibSwiftDriver.supportsDriverFlag(spelled: "-sdk-module-cache-path") {
1284-
task.checkCommandLineContains(["-sdk-module-cache-path", "/path/to/DerivedData/ModuleCache.noindex"])
1285+
task.checkCommandLineContains(["-sdk-module-cache-path", "/path/to/SDKExplicitModules"])
12851286
}
12861287

12871288
// Check module cache pruning options are passed.

0 commit comments

Comments
 (0)