Skip to content

Commit d404017

Browse files
JDevliegherecyndyishida
authored andcommitted
[clang] Upstream XROS support in Clang (llvm#78392)
Upstream XROS support in the clang frontend and driver. (cherry picked from commit a4fe6a1)
1 parent d5c4988 commit d404017

File tree

10 files changed

+142
-13
lines changed

10 files changed

+142
-13
lines changed

clang/lib/Basic/Targets/OSTargets.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ class LLVM_LIBRARY_VISIBILITY DarwinTargetInfo : public OSTargetInfo<Target> {
104104
this->TLSSupported = !Triple.isOSVersionLT(3);
105105
} else if (Triple.isDriverKit()) {
106106
// No TLS on DriverKit.
107-
}
107+
} else if (Triple.isXROS())
108+
this->TLSSupported = true;
108109

109110
this->MCountName = "\01mcount";
110111
}
@@ -139,6 +140,9 @@ class LLVM_LIBRARY_VISIBILITY DarwinTargetInfo : public OSTargetInfo<Target> {
139140
case llvm::Triple::WatchOS: // Earliest supporting version is 5.0.0.
140141
MinVersion = llvm::VersionTuple(5U);
141142
break;
143+
case llvm::Triple::XROS:
144+
MinVersion = llvm::VersionTuple(0);
145+
break;
142146
default:
143147
// Conservatively return 8 bytes if OS is unknown.
144148
return 64;

clang/lib/CodeGen/CGObjC.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3967,6 +3967,8 @@ static unsigned getBaseMachOPlatformID(const llvm::Triple &TT) {
39673967
return llvm::MachO::PLATFORM_TVOS;
39683968
case llvm::Triple::WatchOS:
39693969
return llvm::MachO::PLATFORM_WATCHOS;
3970+
case llvm::Triple::XROS:
3971+
return llvm::MachO::PLATFORM_XROS;
39703972
case llvm::Triple::DriverKit:
39713973
return llvm::MachO::PLATFORM_DRIVERKIT;
39723974
default:
@@ -4050,6 +4052,9 @@ static bool isFoundationNeededForDarwinAvailabilityCheck(
40504052
case llvm::Triple::MacOSX:
40514053
FoundationDroppedInVersion = VersionTuple(/*Major=*/10, /*Minor=*/15);
40524054
break;
4055+
case llvm::Triple::XROS:
4056+
// XROS doesn't need Foundation.
4057+
return false;
40534058
case llvm::Triple::DriverKit:
40544059
// DriverKit doesn't need Foundation.
40554060
return false;

clang/lib/Driver/Driver.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6212,6 +6212,7 @@ const ToolChain &Driver::getToolChain(const ArgList &Args,
62126212
case llvm::Triple::IOS:
62136213
case llvm::Triple::TvOS:
62146214
case llvm::Triple::WatchOS:
6215+
case llvm::Triple::XROS:
62156216
case llvm::Triple::DriverKit:
62166217
TC = std::make_unique<toolchains::DarwinClang>(*this, Target, Args);
62176218
break;

clang/lib/Driver/ToolChains/Arch/AArch64.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ std::string aarch64::getAArch64TargetCPU(const ArgList &Args,
5353
return "apple-m1";
5454
}
5555

56+
if (Triple.isXROS()) {
57+
// The xrOS simulator runs on M1 as well, it should have been covered above.
58+
assert(!Triple.isSimulatorEnvironment() && "xrossim should be mac-like");
59+
return "apple-a12";
60+
}
5661
// arm64e requires v8.3a and only runs on apple-a12 and later CPUs.
5762
if (Triple.isArm64e())
5863
return "apple-a12";

clang/lib/Driver/ToolChains/Arch/ARM.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,7 @@ arm::FloatABI arm::getDefaultFloatABI(const llvm::Triple &Triple) {
367367
case llvm::Triple::IOS:
368368
case llvm::Triple::TvOS:
369369
case llvm::Triple::DriverKit:
370+
case llvm::Triple::XROS:
370371
// Darwin defaults to "softfp" for v6 and v7.
371372
if (Triple.isWatchABI())
372373
return FloatABI::Hard;
@@ -830,8 +831,8 @@ llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D,
830831
if (A->getOption().matches(options::OPT_mlong_calls))
831832
Features.push_back("+long-calls");
832833
} else if (KernelOrKext && (!Triple.isiOS() || Triple.isOSVersionLT(6)) &&
833-
!Triple.isWatchOS()) {
834-
Features.push_back("+long-calls");
834+
!Triple.isWatchOS() && !Triple.isXROS()) {
835+
Features.push_back("+long-calls");
835836
}
836837

837838
// Generate execute-only output (no data access to code sections).

clang/lib/Driver/ToolChains/Darwin.cpp

Lines changed: 63 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,8 @@ static bool shouldLinkerNotDedup(bool IsLinkerOnlyAction, const ArgList &Args) {
222222
void darwin::Linker::AddLinkArgs(Compilation &C, const ArgList &Args,
223223
ArgStringList &CmdArgs,
224224
const InputInfoList &Inputs,
225-
VersionTuple Version, bool LinkerIsLLD) const {
225+
VersionTuple Version, bool LinkerIsLLD,
226+
bool UsePlatformVersion) const {
226227
const Driver &D = getToolChain().getDriver();
227228
const toolchains::MachO &MachOTC = getMachOToolChain();
228229

@@ -358,7 +359,7 @@ void darwin::Linker::AddLinkArgs(Compilation &C, const ArgList &Args,
358359
Args.AddAllArgs(CmdArgs, options::OPT_init);
359360

360361
// Add the deployment target.
361-
if (Version >= VersionTuple(520) || LinkerIsLLD)
362+
if (Version >= VersionTuple(520) || LinkerIsLLD || UsePlatformVersion)
362363
MachOTC.addPlatformVersionArgs(Args, CmdArgs);
363364
else
364365
MachOTC.addMinVersionArgs(Args, CmdArgs);
@@ -701,9 +702,13 @@ void darwin::Linker::ConstructJob(Compilation &C, const JobAction &JA,
701702
const char *Exec =
702703
Args.MakeArgString(getToolChain().GetLinkerPath(&LinkerIsLLD));
703704

705+
// xrOS always uses -platform-version.
706+
bool UsePlatformVersion = getToolChain().getTriple().isXROS();
707+
704708
// I'm not sure why this particular decomposition exists in gcc, but
705709
// we follow suite for ease of comparison.
706-
AddLinkArgs(C, Args, CmdArgs, Inputs, Version, LinkerIsLLD);
710+
AddLinkArgs(C, Args, CmdArgs, Inputs, Version, LinkerIsLLD,
711+
UsePlatformVersion);
707712

708713
if (willEmitRemarks(Args) &&
709714
checkRemarksOptions(getToolChain().getDriver(), Args,
@@ -1075,14 +1080,21 @@ ObjCRuntime Darwin::getDefaultObjCRuntime(bool isNonFragile) const {
10751080
return ObjCRuntime(ObjCRuntime::WatchOS, TargetVersion);
10761081
if (isTargetIOSBased())
10771082
return ObjCRuntime(ObjCRuntime::iOS, TargetVersion);
1083+
if (isTargetXROS()) {
1084+
// XROS uses the iOS runtime.
1085+
auto T = llvm::Triple(Twine("arm64-apple-") +
1086+
llvm::Triple::getOSTypeName(llvm::Triple::XROS) +
1087+
TargetVersion.getAsString());
1088+
return ObjCRuntime(ObjCRuntime::iOS, T.getiOSVersion());
1089+
}
10781090
if (isNonFragile)
10791091
return ObjCRuntime(ObjCRuntime::MacOSX, TargetVersion);
10801092
return ObjCRuntime(ObjCRuntime::FragileMacOSX, TargetVersion);
10811093
}
10821094

10831095
/// Darwin provides a blocks runtime starting in MacOS X 10.6 and iOS 3.2.
10841096
bool Darwin::hasBlocksRuntime() const {
1085-
if (isTargetWatchOSBased() || isTargetDriverKit())
1097+
if (isTargetWatchOSBased() || isTargetDriverKit() || isTargetXROS())
10861098
return true;
10871099
else if (isTargetIOSBased())
10881100
return !isIPhoneOSVersionLT(3, 2);
@@ -1213,6 +1225,8 @@ std::string Darwin::ComputeEffectiveClangTriple(const ArgList &Args,
12131225
Str += "driverkit";
12141226
else if (isTargetIOSBased() || isTargetMacCatalyst())
12151227
Str += "ios";
1228+
else if (isTargetXROS())
1229+
Str += llvm::Triple::getOSTypeName(llvm::Triple::XROS);
12161230
else
12171231
Str += "macosx";
12181232
Str += getTripleTargetVersion().getAsString();
@@ -1358,6 +1372,8 @@ void DarwinClang::AddLinkARCArgs(const ArgList &Args,
13581372
// ARC runtime is supported everywhere on arm64e.
13591373
if (getTriple().isArm64e())
13601374
return;
1375+
if (isTargetXROS())
1376+
return;
13611377

13621378
ObjCRuntime runtime = getDefaultObjCRuntime(/*nonfragile*/ true);
13631379

@@ -1493,6 +1509,8 @@ StringRef Darwin::getPlatformFamily() const {
14931509
return "Watch";
14941510
case DarwinPlatformKind::DriverKit:
14951511
return "DriverKit";
1512+
case DarwinPlatformKind::XROS:
1513+
return "XR";
14961514
}
14971515
llvm_unreachable("Unsupported platform");
14981516
}
@@ -1524,6 +1542,9 @@ StringRef Darwin::getOSLibraryNameSuffix(bool IgnoreSim) const {
15241542
case DarwinPlatformKind::WatchOS:
15251543
return TargetEnvironment == NativeEnvironment || IgnoreSim ? "watchos"
15261544
: "watchossim";
1545+
case DarwinPlatformKind::XROS:
1546+
return TargetEnvironment == NativeEnvironment || IgnoreSim ? "xros"
1547+
: "xrossim";
15271548
case DarwinPlatformKind::DriverKit:
15281549
return "driverkit";
15291550
}
@@ -1829,6 +1850,9 @@ struct DarwinPlatform {
18291850
case DarwinPlatformKind::WatchOS:
18301851
Opt = options::OPT_mwatchos_version_min_EQ;
18311852
break;
1853+
case DarwinPlatformKind::XROS:
1854+
// xrOS always explicitly provides a version in the triple.
1855+
return;
18321856
case DarwinPlatformKind::DriverKit:
18331857
// DriverKit always explicitly provides a version in the triple.
18341858
return;
@@ -1974,6 +1998,8 @@ struct DarwinPlatform {
19741998
return DarwinPlatformKind::TvOS;
19751999
case llvm::Triple::WatchOS:
19762000
return DarwinPlatformKind::WatchOS;
2001+
case llvm::Triple::XROS:
2002+
return DarwinPlatformKind::XROS;
19772003
case llvm::Triple::DriverKit:
19782004
return DarwinPlatformKind::DriverKit;
19792005
default:
@@ -2153,8 +2179,12 @@ inferDeploymentTargetFromSDK(DerivedArgList &Args,
21532179
else if (SDK.startswith("AppleTVOS") || SDK.startswith("AppleTVSimulator"))
21542180
return DarwinPlatform::createFromSDK(
21552181
Darwin::TvOS, Version,
2156-
/*IsSimulator=*/SDK.startswith("AppleTVSimulator"));
2157-
else if (SDK.startswith("DriverKit"))
2182+
/*IsSimulator=*/SDK.starts_with("AppleTVSimulator"));
2183+
else if (SDK.starts_with("XR"))
2184+
return DarwinPlatform::createFromSDK(
2185+
Darwin::XROS, Version,
2186+
/*IsSimulator=*/SDK.contains("Simulator"));
2187+
else if (SDK.starts_with("DriverKit"))
21582188
return DarwinPlatform::createFromSDK(Darwin::DriverKit, Version);
21592189
return std::nullopt;
21602190
};
@@ -2192,6 +2222,11 @@ std::string getOSVersion(llvm::Triple::OSType OS, const llvm::Triple &Triple,
21922222
case llvm::Triple::WatchOS:
21932223
OsVersion = Triple.getWatchOSVersion();
21942224
break;
2225+
case llvm::Triple::XROS:
2226+
OsVersion = Triple.getOSVersion();
2227+
if (!OsVersion.getMajor())
2228+
OsVersion = OsVersion.withMajorReplaced(1);
2229+
break;
21952230
case llvm::Triple::DriverKit:
21962231
OsVersion = Triple.getDriverKitVersion();
21972232
break;
@@ -2283,6 +2318,7 @@ std::optional<DarwinPlatform> getDeploymentTargetFromMTargetOSArg(
22832318
case llvm::Triple::IOS:
22842319
case llvm::Triple::TvOS:
22852320
case llvm::Triple::WatchOS:
2321+
case llvm::Triple::XROS:
22862322
break;
22872323
default:
22882324
TheDriver.Diag(diag::err_drv_invalid_os_in_arg)
@@ -2498,6 +2534,13 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
24982534
Micro >= 100)
24992535
getDriver().Diag(diag::err_drv_invalid_version_number)
25002536
<< OSTarget->getAsString(Args, Opts);
2537+
} else if (Platform == XROS) {
2538+
if (!Driver::GetReleaseVersion(OSTarget->getOSVersion(), Major, Minor,
2539+
Micro, HadExtra) ||
2540+
HadExtra || Major < 1 || Major >= MajorVersionLimit || Minor >= 100 ||
2541+
Micro >= 100)
2542+
getDriver().Diag(diag::err_drv_invalid_version_number)
2543+
<< OSTarget->getAsString(Args, Opts);
25012544
} else
25022545
llvm_unreachable("unknown kind of Darwin platform");
25032546

@@ -2802,6 +2845,10 @@ void DarwinClang::AddCCKextLibArgs(const ArgList &Args,
28022845
llvm::sys::path::append(P, "libclang_rt.cc_kext_ios.a");
28032846
} else if (isTargetDriverKit()) {
28042847
// DriverKit doesn't want extra runtime support.
2848+
} else if (isTargetXROSDevice()) {
2849+
llvm::sys::path::append(
2850+
P, llvm::Twine("libclang_rt.cc_kext_") +
2851+
llvm::Triple::getOSTypeName(llvm::Triple::XROS) + ".a");
28052852
} else {
28062853
llvm::sys::path::append(P, "libclang_rt.cc_kext.a");
28072854
}
@@ -3016,6 +3063,8 @@ bool Darwin::isAlignedAllocationUnavailable() const {
30163063
case WatchOS: // Earlier than 4.0.
30173064
OS = llvm::Triple::WatchOS;
30183065
break;
3066+
case XROS: // Always available.
3067+
return false;
30193068
case DriverKit: // Always available.
30203069
return false;
30213070
}
@@ -3037,6 +3086,8 @@ static bool sdkSupportsBuiltinModules(const Darwin::DarwinPlatformKind &TargetPl
30373086
return SDKVersion >= VersionTuple(99U);
30383087
case Darwin::WatchOS:
30393088
return SDKVersion >= VersionTuple(99U);
3089+
case Darwin::XROS:
3090+
return SDKVersion >= VersionTuple(99U);
30403091
default:
30413092
return true;
30423093
}
@@ -3159,7 +3210,7 @@ Darwin::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch,
31593210
// FIXME: It would be far better to avoid inserting those -static arguments,
31603211
// but we can't check the deployment target in the translation code until
31613212
// it is set here.
3162-
if (isTargetWatchOSBased() || isTargetDriverKit() ||
3213+
if (isTargetWatchOSBased() || isTargetDriverKit() || isTargetXROS() ||
31633214
(isTargetIOSBased() && !isIPhoneOSVersionLT(6, 0))) {
31643215
for (ArgList::iterator it = DAL->begin(), ie = DAL->end(); it != ie; ) {
31653216
Arg *A = *it;
@@ -3253,6 +3304,8 @@ void Darwin::addMinVersionArgs(const ArgList &Args,
32533304
ArgStringList &CmdArgs) const {
32543305
VersionTuple TargetVersion = getTripleTargetVersion();
32553306

3307+
assert(!isTargetXROS() && "xrOS always uses -platform-version");
3308+
32563309
if (isTargetWatchOS())
32573310
CmdArgs.push_back("-watchos_version_min");
32583311
else if (isTargetWatchOSSimulator())
@@ -3312,6 +3365,8 @@ static const char *getPlatformName(Darwin::DarwinPlatformKind Platform,
33123365
return "tvos";
33133366
case Darwin::WatchOS:
33143367
return "watchos";
3368+
case Darwin::XROS:
3369+
return "xros";
33153370
case Darwin::DriverKit:
33163371
return "driverkit";
33173372
}
@@ -3508,7 +3563,7 @@ void Darwin::addStartObjectFileArgs(const ArgList &Args,
35083563
}
35093564

35103565
void Darwin::CheckObjCARC() const {
3511-
if (isTargetIOSBased() || isTargetWatchOSBased() ||
3566+
if (isTargetIOSBased() || isTargetWatchOSBased() || isTargetXROS() ||
35123567
(isTargetMacOSBased() && !isMacosxVersionLT(10, 6)))
35133568
return;
35143569
getDriver().Diag(diag::err_arc_unsupported_on_toolchain);

clang/lib/Driver/ToolChains/Darwin.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class LLVM_LIBRARY_VISIBILITY Linker : public MachOTool {
6666
void AddLinkArgs(Compilation &C, const llvm::opt::ArgList &Args,
6767
llvm::opt::ArgStringList &CmdArgs,
6868
const InputInfoList &Inputs, VersionTuple Version,
69-
bool LinkerIsLLD) const;
69+
bool LinkerIsLLD, bool UsePlatformVersion) const;
7070

7171
public:
7272
Linker(const ToolChain &TC) : MachOTool("darwin::Linker", "linker", TC) {}
@@ -299,6 +299,7 @@ class LLVM_LIBRARY_VISIBILITY Darwin : public MachO {
299299
TvOS,
300300
WatchOS,
301301
DriverKit,
302+
XROS,
302303
LastDarwinPlatform = DriverKit
303304
};
304305
enum DarwinEnvironmentKind {
@@ -405,6 +406,16 @@ class LLVM_LIBRARY_VISIBILITY Darwin : public MachO {
405406
return isTargetIPhoneOS() || isTargetIOSSimulator();
406407
}
407408

409+
bool isTargetXROSDevice() const {
410+
return TargetPlatform == XROS && TargetEnvironment == NativeEnvironment;
411+
}
412+
413+
bool isTargetXROSSimulator() const {
414+
return TargetPlatform == XROS && TargetEnvironment == Simulator;
415+
}
416+
417+
bool isTargetXROS() const { return TargetPlatform == XROS; }
418+
408419
bool isTargetTvOS() const {
409420
assert(TargetInitialized && "Target not initialized!");
410421
return TargetPlatform == TvOS && TargetEnvironment == NativeEnvironment;
@@ -547,7 +558,8 @@ class LLVM_LIBRARY_VISIBILITY Darwin : public MachO {
547558
GetDefaultStackProtectorLevel(bool KernelOrKext) const override {
548559
// Stack protectors default to on for user code on 10.5,
549560
// and for everything in 10.6 and beyond
550-
if (isTargetIOSBased() || isTargetWatchOSBased() || isTargetDriverKit())
561+
if (isTargetIOSBased() || isTargetWatchOSBased() || isTargetDriverKit() ||
562+
isTargetXROS())
551563
return LangOptions::SSPOn;
552564
else if (isTargetMacOSBased() && !isMacosxVersionLT(10, 6))
553565
return LangOptions::SSPOn;

clang/lib/StaticAnalyzer/Checkers/CheckSecuritySyntaxOnly.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -974,6 +974,8 @@ void WalkAST::checkMsg_decodeValueOfObjCType(const ObjCMessageExpr *ME) {
974974
if (VT < VersionTuple(11, 0))
975975
return;
976976
break;
977+
case llvm::Triple::XROS:
978+
break;
977979
default:
978980
return;
979981
}

clang/test/Driver/xros-driver.c

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// RUN: %clang -target arm64-apple-xros1 -c -### %s 2>&1 | FileCheck --check-prefix=VERSION1 %s
2+
// RUN: %clang -target arm64-apple-xros -c -### %s 2>&1 | FileCheck --check-prefix=VERSION1 %s
3+
4+
// RUN: %clang -target arm64-apple-xros1-simulator -c -### %s 2>&1 | FileCheck --check-prefix=VERSION1_ASi %s
5+
6+
// RUN: not %clang -target arm64-apple-xros1000 -c -### %s 2>&1 | FileCheck --check-prefix=INVALID-VERSION %s
7+
8+
// RUN: %clang -target arm64-apple-xros1 -### %s 2>&1 | FileCheck --check-prefix=LINK %s
9+
// RUN: %clang -target arm64-apple-xros1-simulator -### %s 2>&1 | FileCheck --check-prefix=LINK-SIM %s
10+
11+
// RUN: %clang -target arm64-apple-xros1 -c -x objective-c -fobjc-arc -### %s 2>&1 | FileCheck --check-prefix=ARC %s
12+
// RUN: %clang -target arm64-apple-xros -c -x objective-c -fobjc-arc -### %s 2>&1 | FileCheck --check-prefix=OBJC-RUNTIME %s
13+
// RUN: %clang -target arm64-apple-xros2 -c -x objective-c -fobjc-arc -### %s 2>&1 | FileCheck --check-prefix=OBJC-RUNTIME2 %s
14+
15+
// RUN: %clang -target arm64-apple-xros1 -c -x objective-c -fobjc-arc -### %s 2>&1 | FileCheck --check-prefix=ARC %s
16+
// RUN: %clang -target arm64-apple-xros1-simulator -c -x objective-c -fobjc-arc -### %s 2>&1 | FileCheck --check-prefix=ARC %s
17+
18+
// RUN: %clang -target arm64-apple-xros -c -### %s 2>&1 | FileCheck --check-prefix=SSP_ON %s
19+
20+
// RUN: %clang -target arm64e-apple-xros -c -### %s 2>&1 | FileCheck --check-prefix=CPU-ARM64E %s
21+
// RUN: %clang -target arm64-apple-xros -c -### %s 2>&1 | FileCheck --check-prefix=CPU-ARM64 %s
22+
// RUN: %clang -target arm64-apple-xros-simulator -c -### %s 2>&1 | FileCheck --check-prefix=CPU-ARM64-SIM %s
23+
24+
// VERSION1: "-cc1"{{.*}} "-triple" "arm64-apple-xros1.0.0"
25+
// VERSION1_ASi: "-cc1"{{.*}} "-triple" "arm64-apple-xros1.0.0-simulator"
26+
// INVALID-VERSION: error: invalid version number in
27+
28+
// VERSION1-NOT: -faligned-alloc-unavailable
29+
30+
// LINK: "-platform_version" "xros" "1.0.0" "1.0.0"
31+
// LINK-SIM: "-platform_version" "xros-simulator" "1.0.0" "1.0.0"
32+
33+
// OBJC-RUNTIME: "-fobjc-runtime=ios-17.0.0.0"
34+
// OBJC-RUNTIME2: "-fobjc-runtime=ios-18.0.0.0"
35+
// ARC-NOT: error:
36+
37+
// SSP_ON: "-stack-protector" "1"
38+
39+
// CPU-ARM64E: "-cc1"{{.*}} "-triple" "arm64e-apple-xros1.0.0"{{.*}} "-target-cpu" "apple-a12"{{.*}}
40+
// CPU-ARM64: "-cc1"{{.*}} "-triple" "arm64-apple-xros1.0.0"{{.*}} "-target-cpu" "apple-a12"
41+
// CPU-ARM64-SIM: "-cc1"{{.*}} "-triple" "arm64-apple-xros1.0.0-simulator"{{.*}} "-target-cpu" "apple-m1"

0 commit comments

Comments
 (0)