summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2020-04-09 12:10:46 (GMT)
committerKitware Robot <kwrobot@kitware.com>2020-04-09 12:10:55 (GMT)
commit73d358442c3e2bdf2b43038e54e3d534ecc915c8 (patch)
tree5ce3b6cf7a5291736214aeefd173a15cd13163bd
parentdf543e37f1c60919c98bb11494458e5dedd72c11 (diff)
parentda25220d83c25ceabad09b8386fb004b53400bd4 (diff)
downloadCMake-73d358442c3e2bdf2b43038e54e3d534ecc915c8.zip
CMake-73d358442c3e2bdf2b43038e54e3d534ecc915c8.tar.gz
CMake-73d358442c3e2bdf2b43038e54e3d534ecc915c8.tar.bz2
Merge topic 'apple-arch-sysroots'
da25220d83 Merge branch 'backport-3.17-apple-arch-sysroots' into apple-arch-sysroots 84a1e67380 Apple: Fix mapping CMAKE_APPLE_ARCH_SYSROOTS to custom OSX_ARCHITECTURES 45fa9b32ca Apple: Improve handling of missing SDKs in CMAKE_APPLE_ARCH_SYSROOTS Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !4583
-rw-r--r--Modules/Platform/Darwin-Initialize.cmake4
-rw-r--r--Source/cmLocalGenerator.cxx41
-rw-r--r--Source/cmLocalGenerator.h1
3 files changed, 32 insertions, 14 deletions
diff --git a/Modules/Platform/Darwin-Initialize.cmake b/Modules/Platform/Darwin-Initialize.cmake
index 729217c..80e668e 100644
--- a/Modules/Platform/Darwin-Initialize.cmake
+++ b/Modules/Platform/Darwin-Initialize.cmake
@@ -136,7 +136,7 @@ endfunction()
# Handle multi-arch sysroots. Do this before CMAKE_OSX_SYSROOT is
# transformed into a path, so that we know the sysroot name.
function(_apple_resolve_multi_arch_sysroots)
- if(CMAKE_APPLE_ARCH_SYSROOTS)
+ if(DEFINED CMAKE_APPLE_ARCH_SYSROOTS)
return() # Already cached
endif()
@@ -202,7 +202,7 @@ function(_apple_resolve_multi_arch_sysroots)
list(APPEND _arch_sysroots ${_arch_sysroot})
else()
message(WARNING "No SDK found for architecture '${arch}'")
- list(APPEND _arch_sysroots "") # Placeholder
+ list(APPEND _arch_sysroots "${arch}-SDK-NOTFOUND")
endif()
endforeach()
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index a49a7f8..f5ca5f4 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -131,6 +131,28 @@ cmLocalGenerator::cmLocalGenerator(cmGlobalGenerator* gg, cmMakefile* makefile)
this->LinkerSysroot = this->Makefile->GetSafeDefinition("CMAKE_SYSROOT");
}
+ if (std::string const* appleArchSysroots =
+ this->Makefile->GetDef("CMAKE_APPLE_ARCH_SYSROOTS")) {
+ std::string const& appleArchs =
+ this->Makefile->GetSafeDefinition("CMAKE_OSX_ARCHITECTURES");
+ std::vector<std::string> archs;
+ std::vector<std::string> sysroots;
+ cmExpandList(appleArchs, archs);
+ cmExpandList(*appleArchSysroots, sysroots, true);
+ if (archs.size() == sysroots.size()) {
+ for (size_t i = 0; i < archs.size(); ++i) {
+ this->AppleArchSysroots[archs[i]] = sysroots[i];
+ }
+ } else {
+ std::string const e =
+ cmStrCat("CMAKE_APPLE_ARCH_SYSROOTS:\n ", *appleArchSysroots,
+ "\n"
+ "is not the same length as CMAKE_OSX_ARCHITECTURES:\n ",
+ appleArchs);
+ this->IssueMessage(MessageType::FATAL_ERROR, e);
+ }
+ }
+
for (std::string const& lang : enabledLanguages) {
if (lang == "NONE") {
continue;
@@ -1868,21 +1890,16 @@ void cmLocalGenerator::AddArchitectureFlags(std::string& flags,
std::string("CMAKE_") + lang + "_SYSROOT_FLAG";
const char* sysrootFlag = this->Makefile->GetDefinition(sysrootFlagVar);
if (sysrootFlag && *sysrootFlag) {
- std::vector<std::string> arch_sysroots;
- if (const char* arch_sysroots_str =
- this->Makefile->GetDefinition("CMAKE_APPLE_ARCH_SYSROOTS")) {
- cmExpandList(std::string(arch_sysroots_str), arch_sysroots, true);
- }
- if (!arch_sysroots.empty()) {
- assert(arch_sysroots.size() == archs.size());
- for (size_t i = 0; i < archs.size(); ++i) {
- if (arch_sysroots[i].empty()) {
+ if (!this->AppleArchSysroots.empty()) {
+ for (std::string const& arch : archs) {
+ std::string const& archSysroot = this->AppleArchSysroots[arch];
+ if (cmIsOff(archSysroot)) {
continue;
}
- if (filterArch.empty() || filterArch == archs[i]) {
- flags += " -Xarch_" + archs[i] + " ";
+ if (filterArch.empty() || filterArch == arch) {
+ flags += " -Xarch_" + arch + " ";
// Combine sysroot flag and path to work with -Xarch
- std::string arch_sysroot = sysrootFlag + arch_sysroots[i];
+ std::string arch_sysroot = sysrootFlag + archSysroot;
flags += this->ConvertToOutputFormat(arch_sysroot, SHELL);
}
}
diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h
index 25ed265..71cc63e 100644
--- a/Source/cmLocalGenerator.h
+++ b/Source/cmLocalGenerator.h
@@ -514,6 +514,7 @@ protected:
std::map<std::string, std::string> VariableMappings;
std::string CompilerSysroot;
std::string LinkerSysroot;
+ std::unordered_map<std::string, std::string> AppleArchSysroots;
bool EmitUniversalBinaryFlags;