Changeset View
Changeset View
Standalone View
Standalone View
clang/lib/Driver/ToolChains/Darwin.cpp
Show First 20 Lines • Show All 1,803 Lines • ▼ Show 20 Lines | getDeploymentTargetFromEnvironmentVariables(const Driver &TheDriver, | ||||
std::string Targets[Darwin::LastDarwinPlatform + 1]; | std::string Targets[Darwin::LastDarwinPlatform + 1]; | ||||
const char *EnvVars[] = { | const char *EnvVars[] = { | ||||
"MACOSX_DEPLOYMENT_TARGET", | "MACOSX_DEPLOYMENT_TARGET", | ||||
"IPHONEOS_DEPLOYMENT_TARGET", | "IPHONEOS_DEPLOYMENT_TARGET", | ||||
"TVOS_DEPLOYMENT_TARGET", | "TVOS_DEPLOYMENT_TARGET", | ||||
"WATCHOS_DEPLOYMENT_TARGET", | "WATCHOS_DEPLOYMENT_TARGET", | ||||
"DRIVERKIT_DEPLOYMENT_TARGET", | "DRIVERKIT_DEPLOYMENT_TARGET", | ||||
}; | }; | ||||
static_assert(llvm::array_lengthof(EnvVars) == Darwin::LastDarwinPlatform + 1, | static_assert(std::size(EnvVars) == Darwin::LastDarwinPlatform + 1, | ||||
"Missing platform"); | "Missing platform"); | ||||
for (const auto &I : llvm::enumerate(llvm::makeArrayRef(EnvVars))) { | for (const auto &I : llvm::enumerate(llvm::makeArrayRef(EnvVars))) { | ||||
if (char *Env = ::getenv(I.value())) | if (char *Env = ::getenv(I.value())) | ||||
Targets[I.index()] = Env; | Targets[I.index()] = Env; | ||||
} | } | ||||
// Allow conflicts among OSX and iOS for historical reasons, but choose the | // Allow conflicts among OSX and iOS for historical reasons, but choose the | ||||
// default platform. | // default platform. | ||||
if (!Targets[Darwin::MacOS].empty() && | if (!Targets[Darwin::MacOS].empty() && | ||||
(!Targets[Darwin::IPhoneOS].empty() || | (!Targets[Darwin::IPhoneOS].empty() || | ||||
!Targets[Darwin::WatchOS].empty() || !Targets[Darwin::TvOS].empty())) { | !Targets[Darwin::WatchOS].empty() || !Targets[Darwin::TvOS].empty())) { | ||||
if (Triple.getArch() == llvm::Triple::arm || | if (Triple.getArch() == llvm::Triple::arm || | ||||
Triple.getArch() == llvm::Triple::aarch64 || | Triple.getArch() == llvm::Triple::aarch64 || | ||||
Triple.getArch() == llvm::Triple::thumb) | Triple.getArch() == llvm::Triple::thumb) | ||||
Targets[Darwin::MacOS] = ""; | Targets[Darwin::MacOS] = ""; | ||||
else | else | ||||
Targets[Darwin::IPhoneOS] = Targets[Darwin::WatchOS] = | Targets[Darwin::IPhoneOS] = Targets[Darwin::WatchOS] = | ||||
Targets[Darwin::TvOS] = ""; | Targets[Darwin::TvOS] = ""; | ||||
} else { | } else { | ||||
// Don't allow conflicts in any other platform. | // Don't allow conflicts in any other platform. | ||||
unsigned FirstTarget = llvm::array_lengthof(Targets); | unsigned FirstTarget = std::size(Targets); | ||||
for (unsigned I = 0; I != llvm::array_lengthof(Targets); ++I) { | for (unsigned I = 0; I != std::size(Targets); ++I) { | ||||
if (Targets[I].empty()) | if (Targets[I].empty()) | ||||
continue; | continue; | ||||
if (FirstTarget == llvm::array_lengthof(Targets)) | if (FirstTarget == std::size(Targets)) | ||||
FirstTarget = I; | FirstTarget = I; | ||||
else | else | ||||
TheDriver.Diag(diag::err_drv_conflicting_deployment_targets) | TheDriver.Diag(diag::err_drv_conflicting_deployment_targets) | ||||
<< Targets[FirstTarget] << Targets[I]; | << Targets[FirstTarget] << Targets[I]; | ||||
} | } | ||||
} | } | ||||
for (const auto &Target : llvm::enumerate(llvm::makeArrayRef(Targets))) { | for (const auto &Target : llvm::enumerate(llvm::makeArrayRef(Targets))) { | ||||
▲ Show 20 Lines • Show All 1,434 Lines • Show Last 20 Lines |