@@ -454,7 +454,7 @@ class UpToDateModuleCheker {
454
454
: ctx(ctx),
455
455
fs (*ctx.SourceMgr.getFileSystem()),
456
456
requiresOSSAModules(requiresOSSAModules) {}
457
-
457
+
458
458
// Check if all the provided file dependencies are up-to-date compared to
459
459
// what's currently on disk.
460
460
bool dependenciesAreUpToDate (StringRef modulePath,
@@ -524,7 +524,7 @@ class UpToDateModuleCheker {
524
524
moduleBuffer = std::move (*OutBuf);
525
525
return serializedASTBufferIsUpToDate (modulePath, *moduleBuffer, rebuildInfo, AllDeps);
526
526
}
527
-
527
+
528
528
enum class DependencyStatus {
529
529
UpToDate,
530
530
OutOfDate,
@@ -1513,7 +1513,8 @@ bool ModuleInterfaceLoader::buildSwiftModuleFromSwiftInterface(
1513
1513
static bool readSwiftInterfaceVersionAndArgs (
1514
1514
SourceManager &SM, DiagnosticEngine &Diags, llvm::StringSaver &ArgSaver,
1515
1515
SwiftInterfaceInfo &interfaceInfo, StringRef interfacePath,
1516
- SourceLoc diagnosticLoc, llvm::Triple preferredTarget) {
1516
+ SourceLoc diagnosticLoc, llvm::Triple preferredTarget,
1517
+ std::optional<llvm::Triple> preferredTargetVariant) {
1517
1518
llvm::vfs::FileSystem &fs = *SM.getFileSystem ();
1518
1519
auto FileOrError = swift::vfs::getFileOrSTDIN (fs, interfacePath);
1519
1520
if (!FileOrError) {
@@ -1537,7 +1538,8 @@ static bool readSwiftInterfaceVersionAndArgs(
1537
1538
1538
1539
if (extractCompilerFlagsFromInterface (interfacePath, SB, ArgSaver,
1539
1540
interfaceInfo.Arguments ,
1540
- preferredTarget)) {
1541
+ preferredTarget,
1542
+ preferredTargetVariant)) {
1541
1543
InterfaceSubContextDelegateImpl::diagnose (
1542
1544
interfacePath, diagnosticLoc, SM, &Diags,
1543
1545
diag::error_extracting_version_from_module_interface);
@@ -1592,7 +1594,7 @@ bool ModuleInterfaceLoader::buildExplicitSwiftModuleFromSwiftInterface(
1592
1594
StringRef outputPath, bool ShouldSerializeDeps,
1593
1595
ArrayRef<std::string> CompiledCandidates,
1594
1596
DependencyTracker *tracker) {
1595
-
1597
+
1596
1598
if (!Instance.getInvocation ().getIRGenOptions ().AlwaysCompile ) {
1597
1599
// First, check if the expected output already exists and possibly
1598
1600
// up-to-date w.r.t. all of the dependencies it was built with. If so, early
@@ -1613,15 +1615,16 @@ bool ModuleInterfaceLoader::buildExplicitSwiftModuleFromSwiftInterface(
1613
1615
return false ;
1614
1616
}
1615
1617
}
1616
-
1618
+
1617
1619
// Read out the compiler version.
1618
1620
llvm::BumpPtrAllocator alloc;
1619
1621
llvm::StringSaver ArgSaver (alloc);
1620
1622
SwiftInterfaceInfo InterfaceInfo;
1621
1623
readSwiftInterfaceVersionAndArgs (
1622
1624
Instance.getSourceMgr (), Instance.getDiags (), ArgSaver, InterfaceInfo,
1623
1625
interfacePath, SourceLoc (),
1624
- Instance.getInvocation ().getLangOptions ().Target );
1626
+ Instance.getInvocation ().getLangOptions ().Target ,
1627
+ Instance.getInvocation ().getLangOptions ().TargetVariant );
1625
1628
1626
1629
auto Builder = ExplicitModuleInterfaceBuilder (
1627
1630
Instance, &Instance.getDiags (), Instance.getSourceMgr (),
@@ -1670,6 +1673,15 @@ void InterfaceSubContextDelegateImpl::inheritOptionsForBuildingInterface(
1670
1673
GenericArgs.push_back (triple);
1671
1674
}
1672
1675
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
+
1673
1685
// Inherit the target SDK name and version
1674
1686
if (!LangOpts.SDKName .empty ()) {
1675
1687
genericSubInvocation.getLangOptions ().SDKName = LangOpts.SDKName ;
@@ -1835,7 +1847,8 @@ bool InterfaceSubContextDelegateImpl::extractSwiftInterfaceVersionAndArgs(
1835
1847
StringRef interfacePath, SourceLoc diagnosticLoc) {
1836
1848
if (readSwiftInterfaceVersionAndArgs (SM, *Diags, ArgSaver, interfaceInfo,
1837
1849
interfacePath, diagnosticLoc,
1838
- subInvocation.getLangOptions ().Target ))
1850
+ subInvocation.getLangOptions ().Target ,
1851
+ subInvocation.getLangOptions ().TargetVariant ))
1839
1852
return true ;
1840
1853
1841
1854
// Prior to Swift 5.9, swiftinterfaces were always built (accidentally) with
0 commit comments