Skip to content

Commit 20412fa

Browse files
authored
Merge pull request #1941 from artemcm/NewDriverComboEmitVariantModuleFlag
Guard emission of variant module behind a flag
2 parents 781fa03 + 38be297 commit 20412fa

File tree

4 files changed

+15
-8
lines changed

4 files changed

+15
-8
lines changed

Sources/SwiftDriver/Jobs/Planning.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,9 @@ extension Driver {
184184

185185
private mutating func addVariantModuleJobs(addJobBeforeCompiles: (Job) -> Void,
186186
addJobAfterCompiles: (Job) -> Void) throws {
187+
guard parsedOptions.contains(.experimentalEmitVariantModule) else {
188+
return
189+
}
187190
guard variantModuleOutputInfo != nil else {
188191
return
189192
}

Sources/SwiftOptions/Options.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,7 @@ extension Option {
535535
public static let experimentalCForeignReferenceTypes: Option = Option("-experimental-c-foreign-reference-types", .flag, attributes: [.helpHidden, .frontend, .moduleInterface], helpText: "Enable experimental C foreign references types (with reference counting).")
536536
public static let experimentalClangImporterDirectCc1Scan: Option = Option("-experimental-clang-importer-direct-cc1-scan", .flag, attributes: [.helpHidden, .frontend], helpText: "Enables swift driver to construct swift-frontend invocations using -direct-clang-cc1-module-build")
537537
public static let emitModuleSeparately: Option = Option("-experimental-emit-module-separately", .flag, attributes: [.helpHidden], helpText: "Emit module files as a distinct job")
538+
public static let experimentalEmitVariantModule: Option = Option("-experimental-emit-variant-module", .flag, attributes: [], helpText: "When a target variant triple is specified, the same driver invocation will emit two Swift modules, one for the primary target and one for the variant.")
538539
public static let driverExperimentalExplicitModuleBuild: Option = Option("-experimental-explicit-module-build", .flag, alias: Option.driverExplicitModuleBuild, attributes: [.helpHidden], helpText: "Prebuild module dependencies to make them explicit")
539540
public static let forceWorkaroundBrokenModules: Option = Option("-experimental-force-workaround-broken-modules", .flag, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Attempt unsafe recovery for imported modules with broken modularization")
540541
public static let experimentalHermeticSealAtLink: Option = Option("-experimental-hermetic-seal-at-link", .flag, attributes: [.helpHidden, .frontend], helpText: "Library code can assume that all clients are visible at linktime, and aggressively strip unused code")
@@ -742,7 +743,6 @@ extension Option {
742743
public static let pcMacro: Option = Option("-pc-macro", .flag, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Apply the 'program counter simulation' macro")
743744
public static let pchDisableValidation: Option = Option("-pch-disable-validation", .flag, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Disable validating the persistent PCH")
744745
public static let pchOutputDir: Option = Option("-pch-output-dir", .separate, attributes: [.helpHidden, .frontend, .argumentIsPath], helpText: "Directory to persist automatically created precompiled bridging headers")
745-
public static let placeholderDependencyModuleMap: Option = Option("-placeholder-dependency-module-map-file", .separate, attributes: [.frontend, .noDriver], metaVar: "<path>", helpText: "Specify a JSON file containing information of external Swift module dependencies")
746746
public static let platformAvailabilityInheritanceMapPath: Option = Option("-platform-availability-inheritance-map-path", .separate, attributes: [.helpHidden, .frontend, .noDriver], metaVar: "<path>", helpText: "Path of the platform inheritance platform map")
747747
public static let playgroundHighPerformance: Option = Option("-playground-high-performance", .flag, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Omit instrumentation that has a high runtime performance impact")
748748
public static let playgroundOption: Option = Option("-playground-option", .separate, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Provide an option to the playground transform (if enabled)")
@@ -798,9 +798,11 @@ extension Option {
798798
public static let requireExplicitAvailability: Option = Option("-require-explicit-availability", .flag, attributes: [.frontend, .noInteractive], helpText: "Warn on public declarations without an availability attribute")
799799
public static let requireExplicitSendable: Option = Option("-require-explicit-sendable", .flag, attributes: [.frontend, .noInteractive], helpText: "Require explicit Sendable annotations on public declarations")
800800
public static let requirementMachineMaxConcreteNesting: Option = Option("-requirement-machine-max-concrete-nesting=", .joined, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Set the maximum concrete type nesting depth before giving up")
801+
public static let requirementMachineMaxConcreteSize: Option = Option("-requirement-machine-max-concrete-size=", .joined, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Set the maximum concrete type total size before giving up")
801802
public static let requirementMachineMaxRuleCount: Option = Option("-requirement-machine-max-rule-count=", .joined, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Set the maximum number of rules before giving up")
802803
public static let requirementMachineMaxRuleLength: Option = Option("-requirement-machine-max-rule-length=", .joined, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Set the maximum rule length before giving up")
803804
public static let requirementMachineMaxSplitConcreteEquivClassAttempts: Option = Option("-requirement-machine-max-split-concrete-equiv-class-attempts=", .joined, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Set the maximum concrete number of attempts at splitting concrete equivalence classes before giving up. There should never be a reason to change this")
805+
public static let requirementMachineMaxTypeDifferences: Option = Option("-requirement-machine-max-type-differences=", .joined, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Set the maximum number of type difference structures allocated before giving up")
804806
public static let resolveImports: Option = Option("-resolve-imports", .flag, attributes: [.frontend, .noInteractive, .doesNotAffectIncrementalBuild], helpText: "Parse and resolve imports in input file(s)", group: .modes)
805807
public static let resolvedPluginVerification: Option = Option("-resolved-plugin-verification", .flag, attributes: [.frontend, .noDriver], helpText: "verify resolved plugins")
806808
public static let resourceDir: Option = Option("-resource-dir", .separate, attributes: [.helpHidden, .frontend, .synthesizeInterface, .argumentIsPath], metaVar: "</usr/lib/swift>", helpText: "The directory that holds the compiler resource files")
@@ -856,7 +858,6 @@ extension Option {
856858
public static let skipInheritedDocs: Option = Option("-skip-inherited-docs", .flag, attributes: [.helpHidden, .frontend, .noInteractive, .supplementaryOutput], helpText: "Skip emitting doc comments for members inherited through classes or default implementations")
857859
public static let skipProtocolImplementations: Option = Option("-skip-protocol-implementations", .flag, attributes: [.helpHidden, .frontend, .noInteractive, .supplementaryOutput], helpText: "Skip emitting symbols that are implementations of protocol requirements or inherited from protocol extensions")
858860
public static let skipSynthesizedMembers: Option = Option("-skip-synthesized-members", .flag, attributes: [.noDriver], helpText: "Skip members inherited through classes or default implementations")
859-
public static let solverDisableShrink: Option = Option("-solver-disable-shrink", .flag, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Disable the shrink phase of expression type checking")
860861
public static let solverDisableSplitter: Option = Option("-solver-disable-splitter", .flag, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Disable the component splitter phase of expression type checking")
861862
public static let solverExpressionTimeThresholdEQ: Option = Option("-solver-expression-time-threshold=", .joined, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Expression type checking timeout, in seconds")
862863
public static let solverMemoryThreshold: Option = Option("-solver-memory-threshold", .separate, attributes: [.helpHidden, .frontend, .doesNotAffectIncrementalBuild], helpText: "Set the upper bound for memory consumption, in bytes, by the constraint solver")
@@ -1501,6 +1502,7 @@ extension Option {
15011502
Option.experimentalCForeignReferenceTypes,
15021503
Option.experimentalClangImporterDirectCc1Scan,
15031504
Option.emitModuleSeparately,
1505+
Option.experimentalEmitVariantModule,
15041506
Option.driverExperimentalExplicitModuleBuild,
15051507
Option.forceWorkaroundBrokenModules,
15061508
Option.experimentalHermeticSealAtLink,
@@ -1708,7 +1710,6 @@ extension Option {
17081710
Option.pcMacro,
17091711
Option.pchDisableValidation,
17101712
Option.pchOutputDir,
1711-
Option.placeholderDependencyModuleMap,
17121713
Option.platformAvailabilityInheritanceMapPath,
17131714
Option.playgroundHighPerformance,
17141715
Option.playgroundOption,
@@ -1764,9 +1765,11 @@ extension Option {
17641765
Option.requireExplicitAvailability,
17651766
Option.requireExplicitSendable,
17661767
Option.requirementMachineMaxConcreteNesting,
1768+
Option.requirementMachineMaxConcreteSize,
17671769
Option.requirementMachineMaxRuleCount,
17681770
Option.requirementMachineMaxRuleLength,
17691771
Option.requirementMachineMaxSplitConcreteEquivClassAttempts,
1772+
Option.requirementMachineMaxTypeDifferences,
17701773
Option.resolveImports,
17711774
Option.resolvedPluginVerification,
17721775
Option.resourceDir,
@@ -1822,7 +1825,6 @@ extension Option {
18221825
Option.skipInheritedDocs,
18231826
Option.skipProtocolImplementations,
18241827
Option.skipSynthesizedMembers,
1825-
Option.solverDisableShrink,
18261828
Option.solverDisableSplitter,
18271829
Option.solverExpressionTimeThresholdEQ,
18281830
Option.solverMemoryThreshold,

Tests/SwiftDriverTests/ExplicitModuleBuildTests.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2816,6 +2816,7 @@ final class ExplicitModuleBuildTests: XCTestCase {
28162816
"""
28172817
)
28182818
var driver = try Driver(args: ["swiftc",
2819+
"-experimental-emit-variant-module",
28192820
"-target", "x86_64-apple-macosx10.14",
28202821
"-target-variant", "x86_64-apple-ios13.1-macabi",
28212822
"-clang-target", "x86_64-apple-macosx12.14",
@@ -2920,6 +2921,7 @@ final class ExplicitModuleBuildTests: XCTestCase {
29202921
$0.send("struct Profiler { void* ptr; };")
29212922
}
29222923
var driver = try Driver(args: ["swiftc",
2924+
"-experimental-emit-variant-module",
29232925
"-target", "x86_64-apple-macosx10.14",
29242926
"-target-variant", "x86_64-apple-ios13.1-macabi",
29252927
"-clang-target", "x86_64-apple-macosx12.14",

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4084,7 +4084,7 @@ final class SwiftDriverTests: XCTestCase {
40844084
var driver = try Driver(args: ["swiftc",
40854085
"-target", "x86_64-apple-macosx10.14",
40864086
"-target-variant", "x86_64-apple-ios13.1-macabi",
4087-
"-enable-library-evolution",
4087+
"-enable-library-evolution", "-experimental-emit-variant-module",
40884088
"-emit-module",
40894089
"-emit-module-path", "foo.swiftmodule/target.swiftmodule",
40904090
"-emit-variant-module-path", "foo.swiftmodule/variant.swiftmodule",
@@ -4115,7 +4115,7 @@ final class SwiftDriverTests: XCTestCase {
41154115
var driver = try Driver(args: ["swiftc",
41164116
"-target", "x86_64-apple-macosx10.14",
41174117
"-target-variant", "x86_64-apple-ios13.1-macabi",
4118-
"-enable-library-evolution",
4118+
"-enable-library-evolution", "-experimental-emit-variant-module",
41194119
"-package-name", "Susan",
41204120
"-emit-module",
41214121
"-emit-module-path", "target.swiftmodule",
@@ -4192,7 +4192,7 @@ final class SwiftDriverTests: XCTestCase {
41924192
"-target", "x86_64-apple-macosx10.14",
41934193
"-target-variant", "x86_64-apple-ios13.1-macabi",
41944194
"-emit-variant-module-path", "foo.swiftmodule/x86_64-apple-ios13.1-macabi.swiftmodule",
4195-
"-enable-library-evolution",
4195+
"-enable-library-evolution", "-experimental-emit-variant-module",
41964196
"-emit-module",
41974197
"foo.swift"], env: env)
41984198

@@ -4217,7 +4217,7 @@ final class SwiftDriverTests: XCTestCase {
42174217
"-target", "x86_64-apple-macosx10.14",
42184218
"-target-variant", "x86_64-apple-ios13.1-macabi",
42194219
"-emit-variant-module-path", "foo.swiftmodule/x86_64-apple-ios13.1-macabi.swiftmodule",
4220-
"-enable-library-evolution",
4220+
"-enable-library-evolution", "-experimental-emit-variant-module",
42214221
"-emit-module",
42224222
"-emit-api-descriptor-path", "foo.swiftmodule/target.api.json",
42234223
"-emit-variant-api-descriptor-path", "foo.swiftmodule/variant.api.json",

0 commit comments

Comments
 (0)