Xcode: Set ARCHS only when CMAKE_OSX_ARCHITECTURES is specified (#14736)
Teach the Xcode generator that ONLY_ACTIVE_ARCH=YES means to use ARCHS, and that the default of ONLY_ACTIVE_ARCH=NO means to use NATIVE_ARCH and ignore ARCHS. In the latter case there is no reason to generate ARCHS.
This commit is contained in:
parent
9e14a5dee2
commit
b76b52c0b4
|
@ -79,7 +79,6 @@
|
|||
1DEB928A08733DD80010E9CD = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
CODE_SIGNING_REQUIRED = NO;
|
||||
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)";
|
||||
|
|
|
@ -3381,44 +3381,33 @@ bool cmGlobalXCodeGenerator
|
|||
this->CreateObject(cmXCodeObject::ATTRIBUTE_GROUP);
|
||||
const char* osxArch =
|
||||
this->CurrentMakefile->GetDefinition("CMAKE_OSX_ARCHITECTURES");
|
||||
if(!osxArch || strlen(osxArch) == 0)
|
||||
{
|
||||
if(this->XcodeVersion >= 32)
|
||||
{
|
||||
osxArch = "$(ARCHS_STANDARD_32_64_BIT)";
|
||||
}
|
||||
else if(this->XcodeVersion == 31)
|
||||
{
|
||||
osxArch = "$(ARCHS_STANDARD_32_BIT)";
|
||||
}
|
||||
else if(this->XcodeVersion <= 30)
|
||||
{
|
||||
#ifdef __ppc__
|
||||
osxArch = "ppc";
|
||||
#endif
|
||||
#ifdef __i386
|
||||
osxArch = "i386";
|
||||
#endif
|
||||
}
|
||||
buildSettings->AddAttribute("ONLY_ACTIVE_ARCH",
|
||||
this->CreateString("YES"));
|
||||
}
|
||||
|
||||
const char* sysroot =
|
||||
this->CurrentMakefile->GetDefinition("CMAKE_OSX_SYSROOT");
|
||||
const char* deploymentTarget =
|
||||
this->CurrentMakefile->GetDefinition("CMAKE_OSX_DEPLOYMENT_TARGET");
|
||||
if(osxArch && sysroot)
|
||||
std::string archs;
|
||||
if(sysroot)
|
||||
{
|
||||
// recompute this as it may have been changed since enable language
|
||||
this->Architectures.clear();
|
||||
cmSystemTools::ExpandListArgument(std::string(osxArch),
|
||||
this->Architectures);
|
||||
if(osxArch)
|
||||
{
|
||||
// recompute this as it may have been changed since enable language
|
||||
this->Architectures.clear();
|
||||
cmSystemTools::ExpandListArgument(std::string(osxArch),
|
||||
this->Architectures);
|
||||
archs = cmJoin(this->Architectures, " ");
|
||||
}
|
||||
buildSettings->AddAttribute("SDKROOT",
|
||||
this->CreateString(sysroot));
|
||||
std::string const& archString = cmJoin(this->Architectures, " ");
|
||||
buildSettings->AddAttribute("ARCHS",
|
||||
this->CreateString(archString.c_str()));
|
||||
}
|
||||
if (archs.empty())
|
||||
{
|
||||
// Tell Xcode to use NATIVE_ARCH instead of ARCHS.
|
||||
buildSettings->AddAttribute("ONLY_ACTIVE_ARCH", this->CreateString("YES"));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Tell Xcode to use ARCHS (ONLY_ACTIVE_ARCH defaults to NO).
|
||||
buildSettings->AddAttribute("ARCHS", this->CreateString(archs.c_str()));
|
||||
}
|
||||
if(deploymentTarget && *deploymentTarget)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue