mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-02 11:49:55 -06:00
Merge branch 'backport-3.17-apple-arch-sysroots' into apple-arch-sysroots
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user