Explorar el Código

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.
Brad King hace 10 años
padre
commit
b76b52c0b4
Se han modificado 2 ficheros con 20 adiciones y 32 borrados
  1. 0 1
      Modules/CompilerId/Xcode-3.pbxproj.in
  2. 20 31
      Source/cmGlobalXCodeGenerator.cxx

+ 0 - 1
Modules/CompilerId/Xcode-3.pbxproj.in

@@ -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)";

+ 20 - 31
Source/cmGlobalXCodeGenerator.cxx

@@ -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
-    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",
     buildSettings->AddAttribute("SDKROOT",
                                 this->CreateString(sysroot));
                                 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)
   if(deploymentTarget && *deploymentTarget)
     {
     {