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