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:
Brad King 2015-03-27 10:46:11 -04:00
parent 9e14a5dee2
commit b76b52c0b4
2 changed files with 20 additions and 32 deletions

View File

@ -79,7 +79,6 @@
1DEB928A08733DD80010E9CD = { 1DEB928A08733DD80010E9CD = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
CODE_SIGNING_REQUIRED = NO; CODE_SIGNING_REQUIRED = NO;
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)";

View File

@ -3381,44 +3381,33 @@ bool cmGlobalXCodeGenerator
this->CreateObject(cmXCodeObject::ATTRIBUTE_GROUP); this->CreateObject(cmXCodeObject::ATTRIBUTE_GROUP);
const char* osxArch = const char* osxArch =
this->CurrentMakefile->GetDefinition("CMAKE_OSX_ARCHITECTURES"); 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 = const char* sysroot =
this->CurrentMakefile->GetDefinition("CMAKE_OSX_SYSROOT"); this->CurrentMakefile->GetDefinition("CMAKE_OSX_SYSROOT");
const char* deploymentTarget = const char* deploymentTarget =
this->CurrentMakefile->GetDefinition("CMAKE_OSX_DEPLOYMENT_TARGET"); 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 if(osxArch)
this->Architectures.clear(); {
cmSystemTools::ExpandListArgument(std::string(osxArch), // recompute this as it may have been changed since enable language
this->Architectures); this->Architectures.clear();
cmSystemTools::ExpandListArgument(std::string(osxArch),
this->Architectures);
archs = cmJoin(this->Architectures, " ");
}
buildSettings->AddAttribute("SDKROOT", buildSettings->AddAttribute("SDKROOT",
this->CreateString(sysroot)); this->CreateString(sysroot));
std::string const& archString = cmJoin(this->Architectures, " "); }
buildSettings->AddAttribute("ARCHS", if (archs.empty())
this->CreateString(archString.c_str())); {
// 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) if(deploymentTarget && *deploymentTarget)
{ {