Skip to content

Commit cf24508

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
1 parent 0b1b2a1 commit cf24508

File tree

1 file changed

+44
-32
lines changed

1 file changed

+44
-32
lines changed

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

Lines changed: 44 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1521,25 +1521,20 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
15211521

15221522
StreamString minimum_version_option;
15231523
bool use_current_os_version = false;
1524+
// If the SDK type is for the host OS, use its version number.
1525+
auto get_host_os = []() { return HostInfo::GetTargetTriple().getOS(); };
15241526
switch (sdk_type) {
1527+
case XcodeSDK::Type::MacOSX:
1528+
use_current_os_version = get_host_os() == llvm::Triple::MacOSX;
1529+
break;
15251530
case XcodeSDK::Type::iPhoneOS:
1526-
#if defined(__arm__) || defined(__arm64__) || defined(__aarch64__)
1527-
use_current_os_version = true;
1528-
#else
1529-
use_current_os_version = false;
1530-
#endif
1531+
use_current_os_version = get_host_os() == llvm::Triple::IOS;
15311532
break;
1532-
1533-
case XcodeSDK::Type::iPhoneSimulator:
1534-
use_current_os_version = false;
1533+
case XcodeSDK::Type::AppleTVOS:
1534+
use_current_os_version = get_host_os() == llvm::Triple::TvOS;
15351535
break;
1536-
1537-
case XcodeSDK::Type::MacOSX:
1538-
#if defined(__i386__) || defined(__x86_64__)
1539-
use_current_os_version = true;
1540-
#else
1541-
use_current_os_version = false;
1542-
#endif
1536+
case XcodeSDK::Type::watchOS:
1537+
use_current_os_version = get_host_os() == llvm::Triple::WatchOS;
15431538
break;
15441539
default:
15451540
break;
@@ -1559,32 +1554,49 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
15591554
}
15601555
}
15611556
// Only add the version-min options if we got a version from somewhere
1562-
if (!version.empty()) {
1557+
if (!version.empty() && sdk_type != XcodeSDK::Type::Linux) {
1558+
#define OPTION(PREFIX, NAME, VAR, ...) \
1559+
const char *opt_##VAR = NAME; \
1560+
(void)opt_##VAR;
1561+
#include "clang/Driver/Options.inc"
1562+
#undef OPTION
1563+
minimum_version_option << '-';
15631564
switch (sdk_type) {
1564-
case XcodeSDK::Type::iPhoneOS:
1565-
minimum_version_option.PutCString("-mios-version-min=");
1566-
minimum_version_option.PutCString(version.getAsString());
1565+
case XcodeSDK::Type::MacOSX:
1566+
minimum_version_option << opt_mmacosx_version_min_EQ;
15671567
break;
15681568
case XcodeSDK::Type::iPhoneSimulator:
1569-
minimum_version_option.PutCString("-mios-simulator-version-min=");
1570-
minimum_version_option.PutCString(version.getAsString());
1569+
minimum_version_option << opt_mios_simulator_version_min_EQ;
15711570
break;
1572-
case XcodeSDK::Type::MacOSX:
1573-
minimum_version_option.PutCString("-mmacosx-version-min=");
1574-
minimum_version_option.PutCString(version.getAsString());
1571+
case XcodeSDK::Type::iPhoneOS:
1572+
minimum_version_option << opt_mios_version_min_EQ;
1573+
break;
1574+
case XcodeSDK::Type::AppleTVSimulator:
1575+
minimum_version_option << opt_mtvos_simulator_version_min_EQ;
1576+
break;
1577+
case XcodeSDK::Type::AppleTVOS:
1578+
minimum_version_option << opt_mtvos_version_min_EQ;
15751579
break;
15761580
case XcodeSDK::Type::WatchSimulator:
1577-
minimum_version_option.PutCString("-mwatchos-simulator-version-min=");
1578-
minimum_version_option.PutCString(version.getAsString());
1581+
minimum_version_option << opt_mwatchos_simulator_version_min_EQ;
15791582
break;
1580-
case XcodeSDK::Type::AppleTVSimulator:
1581-
minimum_version_option.PutCString("-mtvos-version-min=");
1582-
minimum_version_option.PutCString(version.getAsString());
1583+
case XcodeSDK::Type::watchOS:
1584+
minimum_version_option << opt_mwatchos_version_min_EQ;
15831585
break;
1584-
default:
1585-
llvm_unreachable("unsupported sdk");
1586+
case XcodeSDK::Type::bridgeOS:
1587+
case XcodeSDK::Type::Linux:
1588+
case XcodeSDK::Type::unknown:
1589+
if (lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST)) {
1590+
XcodeSDK::Info info;
1591+
info.type = sdk_type;
1592+
LLDB_LOGF(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST),
1593+
"Clang modules on %s are not supported",
1594+
XcodeSDK::GetCanonicalName(info).c_str());
1595+
}
1596+
return;
15861597
}
1587-
options.push_back(std::string(minimum_version_option.GetString()));
1598+
minimum_version_option << version.getAsString();
1599+
options.emplace_back(std::string(minimum_version_option.GetString()));
15881600
}
15891601

15901602
FileSpec sysroot_spec;

0 commit comments

Comments
 (0)