@@ -454,7 +454,7 @@ class UpToDateModuleCheker {
454454 : ctx(ctx),
455455 fs (*ctx.SourceMgr.getFileSystem()),
456456 requiresOSSAModules(requiresOSSAModules) {}
457-
457+
458458 // Check if all the provided file dependencies are up-to-date compared to
459459 // what's currently on disk.
460460 bool dependenciesAreUpToDate (StringRef modulePath,
@@ -524,7 +524,7 @@ class UpToDateModuleCheker {
524524 moduleBuffer = std::move (*OutBuf);
525525 return serializedASTBufferIsUpToDate (modulePath, *moduleBuffer, rebuildInfo, AllDeps);
526526 }
527-
527+
528528 enum class DependencyStatus {
529529 UpToDate,
530530 OutOfDate,
@@ -1513,7 +1513,8 @@ bool ModuleInterfaceLoader::buildSwiftModuleFromSwiftInterface(
15131513static bool readSwiftInterfaceVersionAndArgs (
15141514 SourceManager &SM, DiagnosticEngine &Diags, llvm::StringSaver &ArgSaver,
15151515 SwiftInterfaceInfo &interfaceInfo, StringRef interfacePath,
1516- SourceLoc diagnosticLoc, llvm::Triple preferredTarget) {
1516+ SourceLoc diagnosticLoc, llvm::Triple preferredTarget,
1517+ std::optional<llvm::Triple> preferredTargetVariant) {
15171518 llvm::vfs::FileSystem &fs = *SM.getFileSystem ();
15181519 auto FileOrError = swift::vfs::getFileOrSTDIN (fs, interfacePath);
15191520 if (!FileOrError) {
@@ -1537,7 +1538,8 @@ static bool readSwiftInterfaceVersionAndArgs(
15371538
15381539 if (extractCompilerFlagsFromInterface (interfacePath, SB, ArgSaver,
15391540 interfaceInfo.Arguments ,
1540- preferredTarget)) {
1541+ preferredTarget,
1542+ preferredTargetVariant)) {
15411543 InterfaceSubContextDelegateImpl::diagnose (
15421544 interfacePath, diagnosticLoc, SM, &Diags,
15431545 diag::error_extracting_version_from_module_interface);
@@ -1592,7 +1594,7 @@ bool ModuleInterfaceLoader::buildExplicitSwiftModuleFromSwiftInterface(
15921594 StringRef outputPath, bool ShouldSerializeDeps,
15931595 ArrayRef<std::string> CompiledCandidates,
15941596 DependencyTracker *tracker) {
1595-
1597+
15961598 if (!Instance.getInvocation ().getIRGenOptions ().AlwaysCompile ) {
15971599 // First, check if the expected output already exists and possibly
15981600 // up-to-date w.r.t. all of the dependencies it was built with. If so, early
@@ -1613,15 +1615,16 @@ bool ModuleInterfaceLoader::buildExplicitSwiftModuleFromSwiftInterface(
16131615 return false ;
16141616 }
16151617 }
1616-
1618+
16171619 // Read out the compiler version.
16181620 llvm::BumpPtrAllocator alloc;
16191621 llvm::StringSaver ArgSaver (alloc);
16201622 SwiftInterfaceInfo InterfaceInfo;
16211623 readSwiftInterfaceVersionAndArgs (
16221624 Instance.getSourceMgr (), Instance.getDiags (), ArgSaver, InterfaceInfo,
16231625 interfacePath, SourceLoc (),
1624- Instance.getInvocation ().getLangOptions ().Target );
1626+ Instance.getInvocation ().getLangOptions ().Target ,
1627+ Instance.getInvocation ().getLangOptions ().TargetVariant );
16251628
16261629 auto Builder = ExplicitModuleInterfaceBuilder (
16271630 Instance, &Instance.getDiags (), Instance.getSourceMgr (),
@@ -1670,6 +1673,15 @@ void InterfaceSubContextDelegateImpl::inheritOptionsForBuildingInterface(
16701673 GenericArgs.push_back (triple);
16711674 }
16721675
1676+ if (LangOpts.TargetVariant .has_value ()) {
1677+ genericSubInvocation.getLangOptions ().TargetVariant = LangOpts.TargetVariant ;
1678+ auto variantTriple = ArgSaver.save (genericSubInvocation.getLangOptions ().TargetVariant ->str ());
1679+ if (!variantTriple.empty ()) {
1680+ GenericArgs.push_back (" -target-variant" );
1681+ GenericArgs.push_back (variantTriple);
1682+ }
1683+ }
1684+
16731685 // Inherit the target SDK name and version
16741686 if (!LangOpts.SDKName .empty ()) {
16751687 genericSubInvocation.getLangOptions ().SDKName = LangOpts.SDKName ;
@@ -1835,7 +1847,8 @@ bool InterfaceSubContextDelegateImpl::extractSwiftInterfaceVersionAndArgs(
18351847 StringRef interfacePath, SourceLoc diagnosticLoc) {
18361848 if (readSwiftInterfaceVersionAndArgs (SM, *Diags, ArgSaver, interfaceInfo,
18371849 interfacePath, diagnosticLoc,
1838- subInvocation.getLangOptions ().Target ))
1850+ subInvocation.getLangOptions ().Target ,
1851+ subInvocation.getLangOptions ().TargetVariant ))
18391852 return true ;
18401853
18411854 // Prior to Swift 5.9, swiftinterfaces were always built (accidentally) with
0 commit comments