Merge topic 'xcode-native-arch'
26673bf480
Xcode: Explicitly specify default native architecture on macOSce624cfbd4
cmGlobalXCodeGenerator: Save CMAKE_SYSTEM_NAME in member Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5023
This commit is contained in:
commit
8abeec58f3
@ -318,3 +318,17 @@ Other Changes
|
||||
|
||||
* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object gained
|
||||
a new ``precompileHeaders`` field in the ``compileGroups`` objects.
|
||||
|
||||
Updates
|
||||
=======
|
||||
|
||||
Changes made since CMake 3.18.0 include the following.
|
||||
|
||||
3.18.1
|
||||
------
|
||||
|
||||
* The :generator:`Xcode` generator, when :variable:`CMAKE_OSX_ARCHITECTURES`
|
||||
is not defined, now selects ``$(NATIVE_ARCH_ACTUAL)`` as the default
|
||||
architecture (the Xcode ``ARCHS`` setting). This is needed for Xcode 12
|
||||
to select the host's architecture, which older versions of Xcode did
|
||||
by default.
|
||||
|
@ -490,6 +490,12 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
|
||||
set(id_clang_cxx_library "CLANG_CXX_LIBRARY = \"${CMAKE_MATCH_3}\";")
|
||||
endif()
|
||||
endif()
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_OSX_SYSROOT MATCHES "^$|[Mm][Aa][Cc][Oo][Ss]")
|
||||
# When targeting macOS, use only the host architecture.
|
||||
set(id_archs [[ARCHS = "$(NATIVE_ARCH_ACTUAL)";]])
|
||||
else()
|
||||
set(id_archs "")
|
||||
endif()
|
||||
configure_file(${CMAKE_ROOT}/Modules/CompilerId/Xcode-3.pbxproj.in
|
||||
${id_dir}/CompilerId${lang}.xcodeproj/project.pbxproj @ONLY)
|
||||
unset(_ENV_MACOSX_DEPLOYMENT_TARGET)
|
||||
|
@ -84,6 +84,7 @@
|
||||
CODE_SIGNING_REQUIRED = NO;
|
||||
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)";
|
||||
SYMROOT = .;
|
||||
@id_archs@
|
||||
@id_toolset@
|
||||
@id_lang_version@
|
||||
@id_clang_cxx_library@
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
#include <cm/memory>
|
||||
#include <cmext/algorithm>
|
||||
#include <cmext/string_view>
|
||||
|
||||
#include "cmsys/RegularExpression.hxx"
|
||||
|
||||
@ -272,6 +273,13 @@ std::string cmGlobalXCodeGenerator::FindXcodeBuildCommand()
|
||||
return makeProgram;
|
||||
}
|
||||
|
||||
bool cmGlobalXCodeGenerator::SetSystemName(std::string const& s,
|
||||
cmMakefile* mf)
|
||||
{
|
||||
this->SystemName = s;
|
||||
return this->cmGlobalGenerator::SetSystemName(s, mf);
|
||||
}
|
||||
|
||||
bool cmGlobalXCodeGenerator::SetGeneratorToolset(std::string const& ts,
|
||||
bool build, cmMakefile* mf)
|
||||
{
|
||||
@ -3375,6 +3383,14 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects(
|
||||
if (archs.empty()) {
|
||||
// Tell Xcode to use NATIVE_ARCH instead of ARCHS.
|
||||
buildSettings->AddAttribute("ONLY_ACTIVE_ARCH", this->CreateString("YES"));
|
||||
// When targeting macOS, use only the host architecture.
|
||||
if (this->SystemName == "Darwin"_s &&
|
||||
(!sysroot || !*sysroot ||
|
||||
cmSystemTools::LowerCase(sysroot).find("macos") !=
|
||||
std::string::npos)) {
|
||||
buildSettings->AddAttribute("ARCHS",
|
||||
this->CreateString("$(NATIVE_ARCH_ACTUAL)"));
|
||||
}
|
||||
} else {
|
||||
// Tell Xcode to use ARCHS (ONLY_ACTIVE_ARCH defaults to NO).
|
||||
buildSettings->AddAttribute("ARCHS", this->CreateString(archs));
|
||||
@ -3480,7 +3496,8 @@ void cmGlobalXCodeGenerator::ComputeArchitectures(cmMakefile* mf)
|
||||
}
|
||||
|
||||
if (this->Architectures.empty()) {
|
||||
// With no ARCHS we use ONLY_ACTIVE_ARCH.
|
||||
// With no ARCHS we use ONLY_ACTIVE_ARCH and possibly a
|
||||
// platform-specific default ARCHS placeholder value.
|
||||
// Look up the arch that Xcode chooses in this case.
|
||||
if (const char* arch = mf->GetDefinition("CMAKE_XCODE_ARCHS")) {
|
||||
this->ObjectDirArchDefault = arch;
|
||||
|
@ -109,6 +109,7 @@ public:
|
||||
|
||||
bool ShouldStripResourcePath(cmMakefile*) const override;
|
||||
|
||||
bool SetSystemName(std::string const& s, cmMakefile* mf) override;
|
||||
bool SetGeneratorToolset(std::string const& ts, bool build,
|
||||
cmMakefile* mf) override;
|
||||
void AppendFlag(std::string& flags, std::string const& flag) const;
|
||||
@ -301,6 +302,7 @@ private:
|
||||
std::vector<std::string> Architectures;
|
||||
std::string ObjectDirArchDefault;
|
||||
std::string ObjectDirArch;
|
||||
std::string SystemName;
|
||||
std::string GeneratorToolset;
|
||||
std::map<cmGeneratorTarget const*, size_t> TargetOrderIndex;
|
||||
std::vector<std::string> EnabledLangs;
|
||||
|
Loading…
Reference in New Issue
Block a user