diff options
author | Brad King <brad.king@kitware.com> | 2020-04-09 12:10:46 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2020-04-09 12:10:55 (GMT) |
commit | 73d358442c3e2bdf2b43038e54e3d534ecc915c8 (patch) | |
tree | 5ce3b6cf7a5291736214aeefd173a15cd13163bd | |
parent | df543e37f1c60919c98bb11494458e5dedd72c11 (diff) | |
parent | da25220d83c25ceabad09b8386fb004b53400bd4 (diff) | |
download | CMake-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.cmake | 4 | ||||
-rw-r--r-- | Source/cmLocalGenerator.cxx | 41 | ||||
-rw-r--r-- | Source/cmLocalGenerator.h | 1 |
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; |