Skip to content

Commit f6b1a6a

Browse files
committed
Add support for more OS types to AddClangModuleCompilationOptionsForSDKType()
This patch also avoids hardcoding the clang options, which makes it less likely for them to become out-of-date. rdar://problem/63791367+66927829 Differential Revision: https://reviews.llvm.org/D89428 (cherry picked from commit cf24508) Conflicts: lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
1 parent 6c474d2 commit f6b1a6a

File tree

1 file changed

+47
-27
lines changed

1 file changed

+47
-27
lines changed

lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp

Lines changed: 47 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1477,25 +1477,20 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
14771477

14781478
StreamString minimum_version_option;
14791479
bool use_current_os_version = false;
1480+
// If the SDK type is for the host OS, use its version number.
1481+
auto get_host_os = []() { return HostInfo::GetTargetTriple().getOS(); };
14801482
switch (sdk_type) {
1483+
case XcodeSDK::Type::MacOSX:
1484+
use_current_os_version = get_host_os() == llvm::Triple::MacOSX;
1485+
break;
14811486
case XcodeSDK::Type::iPhoneOS:
1482-
#if defined(__arm__) || defined(__arm64__) || defined(__aarch64__)
1483-
use_current_os_version = true;
1484-
#else
1485-
use_current_os_version = false;
1486-
#endif
1487+
use_current_os_version = get_host_os() == llvm::Triple::IOS;
14871488
break;
1488-
1489-
case XcodeSDK::Type::iPhoneSimulator:
1490-
use_current_os_version = false;
1489+
case XcodeSDK::Type::AppleTVOS:
1490+
use_current_os_version = get_host_os() == llvm::Triple::TvOS;
14911491
break;
1492-
1493-
case XcodeSDK::Type::MacOSX:
1494-
#if defined(__i386__) || defined(__x86_64__)
1495-
use_current_os_version = true;
1496-
#else
1497-
use_current_os_version = false;
1498-
#endif
1492+
case XcodeSDK::Type::watchOS:
1493+
use_current_os_version = get_host_os() == llvm::Triple::WatchOS;
14991494
break;
15001495
default:
15011496
break;
@@ -1515,24 +1510,49 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
15151510
}
15161511
}
15171512
// Only add the version-min options if we got a version from somewhere
1518-
if (!version.empty()) {
1513+
if (!version.empty() && sdk_type != XcodeSDK::Type::Linux) {
1514+
#define OPTION(PREFIX, NAME, VAR, ...) \
1515+
const char *opt_##VAR = NAME; \
1516+
(void)opt_##VAR;
1517+
#include "clang/Driver/Options.inc"
1518+
#undef OPTION
1519+
minimum_version_option << '-';
15191520
switch (sdk_type) {
1520-
case XcodeSDK::Type::iPhoneOS:
1521-
minimum_version_option.PutCString("-mios-version-min=");
1522-
minimum_version_option.PutCString(version.getAsString());
1521+
case XcodeSDK::Type::MacOSX:
1522+
minimum_version_option << opt_mmacosx_version_min_EQ;
15231523
break;
15241524
case XcodeSDK::Type::iPhoneSimulator:
1525-
minimum_version_option.PutCString("-mios-simulator-version-min=");
1526-
minimum_version_option.PutCString(version.getAsString());
1525+
minimum_version_option << opt_mios_simulator_version_min_EQ;
15271526
break;
1528-
case XcodeSDK::Type::MacOSX:
1529-
minimum_version_option.PutCString("-mmacosx-version-min=");
1530-
minimum_version_option.PutCString(version.getAsString());
1527+
case XcodeSDK::Type::iPhoneOS:
1528+
minimum_version_option << opt_mios_version_min_EQ;
15311529
break;
1532-
default:
1533-
llvm_unreachable("unsupported sdk");
1530+
case XcodeSDK::Type::AppleTVSimulator:
1531+
minimum_version_option << opt_mtvos_simulator_version_min_EQ;
1532+
break;
1533+
case XcodeSDK::Type::AppleTVOS:
1534+
minimum_version_option << opt_mtvos_version_min_EQ;
1535+
break;
1536+
case XcodeSDK::Type::WatchSimulator:
1537+
minimum_version_option << opt_mwatchos_simulator_version_min_EQ;
1538+
break;
1539+
case XcodeSDK::Type::watchOS:
1540+
minimum_version_option << opt_mwatchos_version_min_EQ;
1541+
break;
1542+
case XcodeSDK::Type::bridgeOS:
1543+
case XcodeSDK::Type::Linux:
1544+
case XcodeSDK::Type::unknown:
1545+
if (lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST)) {
1546+
XcodeSDK::Info info;
1547+
info.type = sdk_type;
1548+
LLDB_LOGF(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST),
1549+
"Clang modules on %s are not supported",
1550+
XcodeSDK::GetCanonicalName(info).c_str());
1551+
}
1552+
return;
15341553
}
1535-
options.push_back(std::string(minimum_version_option.GetString()));
1554+
minimum_version_option << version.getAsString();
1555+
options.emplace_back(std::string(minimum_version_option.GetString()));
15361556
}
15371557

15381558
FileSpec sysroot_spec;

0 commit comments

Comments
 (0)