[clang][modules] Enable built-in modules for the upcoming Apple releases (#102239)
The upcoming Apple SDK releases will support the clang built-in headers being in the clang built-in modules: stop passing -fbuiltin-headers-in-system-modules for those SDK versions.
This commit is contained in:
parent
445023f173
commit
9616399622
@ -2923,22 +2923,47 @@ bool Darwin::isAlignedAllocationUnavailable() const {
|
||||
return TargetVersion < alignedAllocMinVersion(OS);
|
||||
}
|
||||
|
||||
static bool sdkSupportsBuiltinModules(const Darwin::DarwinPlatformKind &TargetPlatform, const std::optional<DarwinSDKInfo> &SDKInfo) {
|
||||
static bool sdkSupportsBuiltinModules(
|
||||
const Darwin::DarwinPlatformKind &TargetPlatform,
|
||||
const Darwin::DarwinEnvironmentKind &TargetEnvironment,
|
||||
const std::optional<DarwinSDKInfo> &SDKInfo) {
|
||||
switch (TargetEnvironment) {
|
||||
case Darwin::NativeEnvironment:
|
||||
case Darwin::Simulator:
|
||||
case Darwin::MacCatalyst:
|
||||
// Standard xnu/Mach/Darwin based environments
|
||||
// depend on the SDK version.
|
||||
break;
|
||||
default:
|
||||
// All other environments support builtin modules from the start.
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!SDKInfo)
|
||||
// If there is no SDK info, assume this is building against a
|
||||
// pre-SDK version of macOS (i.e. before Mac OS X 10.4). Those
|
||||
// don't support modules anyway, but the headers definitely
|
||||
// don't support builtin modules either. It might also be some
|
||||
// kind of degenerate build environment, err on the side of
|
||||
// the old behavior which is to not use builtin modules.
|
||||
return false;
|
||||
|
||||
VersionTuple SDKVersion = SDKInfo->getVersion();
|
||||
switch (TargetPlatform) {
|
||||
// Existing SDKs added support for builtin modules in the fall
|
||||
// 2024 major releases.
|
||||
case Darwin::MacOS:
|
||||
return SDKVersion >= VersionTuple(99U);
|
||||
return SDKVersion >= VersionTuple(15U);
|
||||
case Darwin::IPhoneOS:
|
||||
return SDKVersion >= VersionTuple(99U);
|
||||
return SDKVersion >= VersionTuple(18U);
|
||||
case Darwin::TvOS:
|
||||
return SDKVersion >= VersionTuple(99U);
|
||||
return SDKVersion >= VersionTuple(18U);
|
||||
case Darwin::WatchOS:
|
||||
return SDKVersion >= VersionTuple(99U);
|
||||
return SDKVersion >= VersionTuple(11U);
|
||||
case Darwin::XROS:
|
||||
return SDKVersion >= VersionTuple(99U);
|
||||
return SDKVersion >= VersionTuple(2U);
|
||||
|
||||
// New SDKs support builtin modules from the start.
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
@ -3030,7 +3055,7 @@ void Darwin::addClangTargetOptions(
|
||||
// i.e. when the builtin stdint.h is in the Darwin module too, the cycle
|
||||
// goes away. Note that -fbuiltin-headers-in-system-modules does nothing
|
||||
// to fix the same problem with C++ headers, and is generally fragile.
|
||||
if (!sdkSupportsBuiltinModules(TargetPlatform, SDKInfo))
|
||||
if (!sdkSupportsBuiltinModules(TargetPlatform, TargetEnvironment, SDKInfo))
|
||||
CC1Args.push_back("-fbuiltin-headers-in-system-modules");
|
||||
|
||||
if (!DriverArgs.hasArgNoClaim(options::OPT_fdefine_target_os_macros,
|
||||
|
@ -0,0 +1 @@
|
||||
{"Version":"23.0", "MaximumDeploymentTarget": "23.0.99"}
|
@ -6,6 +6,7 @@
|
||||
// RUN: %clang -isysroot %S/Inputs/iPhoneOS13.0.sdk -target arm64-apple-ios13.0 -### %s 2>&1 | FileCheck %s
|
||||
// CHECK: -fbuiltin-headers-in-system-modules
|
||||
|
||||
// RUN: %clang -isysroot %S/Inputs/MacOSX99.0.sdk -target x86_64-apple-macos98.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
|
||||
// RUN: %clang -isysroot %S/Inputs/MacOSX99.0.sdk -target x86_64-apple-macos99.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
|
||||
// RUN: %clang -isysroot %S/Inputs/MacOSX15.0.sdk -target x86_64-apple-macos14.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
|
||||
// RUN: %clang -isysroot %S/Inputs/MacOSX15.0.sdk -target x86_64-apple-macos15.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
|
||||
// RUN: %clang -isysroot %S/Inputs/DriverKit23.0.sdk -target arm64-apple-driverkit23.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
|
||||
// CHECK_FUTURE-NOT: -fbuiltin-headers-in-system-modules
|
||||
|
Loading…
x
Reference in New Issue
Block a user