@@ -3081,22 +3081,47 @@ bool Darwin::isAlignedAllocationUnavailable() const {
30813081 return TargetVersion < alignedAllocMinVersion (OS);
30823082}
30833083
3084- static bool sdkSupportsBuiltinModules (const Darwin::DarwinPlatformKind &TargetPlatform, const std::optional<DarwinSDKInfo> &SDKInfo) {
3084+ static bool sdkSupportsBuiltinModules (
3085+ const Darwin::DarwinPlatformKind &TargetPlatform,
3086+ const Darwin::DarwinEnvironmentKind &TargetEnvironment,
3087+ const std::optional<DarwinSDKInfo> &SDKInfo) {
3088+ switch (TargetEnvironment) {
3089+ case Darwin::NativeEnvironment:
3090+ case Darwin::Simulator:
3091+ case Darwin::MacCatalyst:
3092+ // Standard xnu/Mach/Darwin based environments
3093+ // depend on the SDK version.
3094+ break ;
3095+ default :
3096+ // All other environments support builtin modules from the start.
3097+ return true ;
3098+ }
3099+
30853100 if (!SDKInfo)
3101+ // If there is no SDK info, assume this is building against a
3102+ // pre-SDK version of macOS (i.e. before Mac OS X 10.4). Those
3103+ // don't support modules anyway, but the headers definitely
3104+ // don't support builtin modules either. It might also be some
3105+ // kind of degenerate build environment, err on the side of
3106+ // the old behavior which is to not use builtin modules.
30863107 return false ;
30873108
30883109 VersionTuple SDKVersion = SDKInfo->getVersion ();
30893110 switch (TargetPlatform) {
3111+ // Existing SDKs added support for builtin modules in the fall
3112+ // 2024 major releases.
30903113 case Darwin::MacOS:
3091- return SDKVersion >= VersionTuple (99U );
3114+ return SDKVersion >= VersionTuple (15U );
30923115 case Darwin::IPhoneOS:
3093- return SDKVersion >= VersionTuple (99U );
3116+ return SDKVersion >= VersionTuple (18U );
30943117 case Darwin::TvOS:
3095- return SDKVersion >= VersionTuple (99U );
3118+ return SDKVersion >= VersionTuple (18U );
30963119 case Darwin::WatchOS:
3097- return SDKVersion >= VersionTuple (99U );
3120+ return SDKVersion >= VersionTuple (11U );
30983121 case Darwin::XROS:
3099- return SDKVersion >= VersionTuple (99U );
3122+ return SDKVersion >= VersionTuple (2U );
3123+
3124+ // New SDKs support builtin modules from the start.
31003125 default :
31013126 return true ;
31023127 }
@@ -3136,7 +3161,7 @@ void Darwin::addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
31363161 // i.e. when the builtin stdint.h is in the Darwin module too, the cycle
31373162 // goes away. Note that -fbuiltin-headers-in-system-modules does nothing
31383163 // to fix the same problem with C++ headers, and is generally fragile.
3139- if (!sdkSupportsBuiltinModules (TargetPlatform, SDKInfo))
3164+ if (!sdkSupportsBuiltinModules (TargetPlatform, TargetEnvironment, SDKInfo))
31403165 CC1Args.push_back (" -fbuiltin-headers-in-system-modules" );
31413166}
31423167
0 commit comments