mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-08 14:50:10 -06:00
Xcode: Detect architecture(s) using ARCHS instead of CURRENT_ARCH
Xcode 10 no longer populates `CURRENT_ARCH` with the current architecture in shell scripts and instead uses `undefined_arch`. Instead we must use `ARCHS`. It lists all architectures separated by spaces. Fixes: #18085
This commit is contained in:
@@ -15,7 +15,7 @@ set(CMAKE_C_SIMULATE_ID "@CMAKE_C_SIMULATE_ID@")
|
|||||||
set(CMAKE_C_SIMULATE_VERSION "@CMAKE_C_SIMULATE_VERSION@")
|
set(CMAKE_C_SIMULATE_VERSION "@CMAKE_C_SIMULATE_VERSION@")
|
||||||
@_SET_CMAKE_C_COMPILER_ARCHITECTURE_ID@
|
@_SET_CMAKE_C_COMPILER_ARCHITECTURE_ID@
|
||||||
@SET_MSVC_C_ARCHITECTURE_ID@
|
@SET_MSVC_C_ARCHITECTURE_ID@
|
||||||
@SET_CMAKE_XCODE_CURRENT_ARCH@
|
@SET_CMAKE_XCODE_ARCHS@
|
||||||
set(CMAKE_AR "@CMAKE_AR@")
|
set(CMAKE_AR "@CMAKE_AR@")
|
||||||
set(CMAKE_C_COMPILER_AR "@CMAKE_C_COMPILER_AR@")
|
set(CMAKE_C_COMPILER_AR "@CMAKE_C_COMPILER_AR@")
|
||||||
set(CMAKE_RANLIB "@CMAKE_RANLIB@")
|
set(CMAKE_RANLIB "@CMAKE_RANLIB@")
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ set(CMAKE_CXX_SIMULATE_ID "@CMAKE_CXX_SIMULATE_ID@")
|
|||||||
set(CMAKE_CXX_SIMULATE_VERSION "@CMAKE_CXX_SIMULATE_VERSION@")
|
set(CMAKE_CXX_SIMULATE_VERSION "@CMAKE_CXX_SIMULATE_VERSION@")
|
||||||
@_SET_CMAKE_CXX_COMPILER_ARCHITECTURE_ID@
|
@_SET_CMAKE_CXX_COMPILER_ARCHITECTURE_ID@
|
||||||
@SET_MSVC_CXX_ARCHITECTURE_ID@
|
@SET_MSVC_CXX_ARCHITECTURE_ID@
|
||||||
@SET_CMAKE_XCODE_CURRENT_ARCH@
|
@SET_CMAKE_XCODE_ARCHS@
|
||||||
set(CMAKE_AR "@CMAKE_AR@")
|
set(CMAKE_AR "@CMAKE_AR@")
|
||||||
set(CMAKE_CXX_COMPILER_AR "@CMAKE_CXX_COMPILER_AR@")
|
set(CMAKE_CXX_COMPILER_AR "@CMAKE_CXX_COMPILER_AR@")
|
||||||
set(CMAKE_RANLIB "@CMAKE_RANLIB@")
|
set(CMAKE_RANLIB "@CMAKE_RANLIB@")
|
||||||
|
|||||||
@@ -183,9 +183,9 @@ if(MSVC_C_ARCHITECTURE_ID)
|
|||||||
"set(MSVC_C_ARCHITECTURE_ID ${MSVC_C_ARCHITECTURE_ID})")
|
"set(MSVC_C_ARCHITECTURE_ID ${MSVC_C_ARCHITECTURE_ID})")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_C_XCODE_CURRENT_ARCH)
|
if(CMAKE_C_XCODE_ARCHS)
|
||||||
set(SET_CMAKE_XCODE_CURRENT_ARCH
|
set(SET_CMAKE_XCODE_ARCHS
|
||||||
"set(CMAKE_XCODE_CURRENT_ARCH ${CMAKE_C_XCODE_CURRENT_ARCH})")
|
"set(CMAKE_XCODE_ARCHS \"${CMAKE_C_XCODE_ARCHS}\")")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# configure variables set in this file for fast reload later on
|
# configure variables set in this file for fast reload later on
|
||||||
|
|||||||
@@ -181,9 +181,9 @@ if(MSVC_CXX_ARCHITECTURE_ID)
|
|||||||
"set(MSVC_CXX_ARCHITECTURE_ID ${MSVC_CXX_ARCHITECTURE_ID})")
|
"set(MSVC_CXX_ARCHITECTURE_ID ${MSVC_CXX_ARCHITECTURE_ID})")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_CXX_XCODE_CURRENT_ARCH)
|
if(CMAKE_CXX_XCODE_ARCHS)
|
||||||
set(SET_CMAKE_XCODE_CURRENT_ARCH
|
set(SET_CMAKE_XCODE_ARCHS
|
||||||
"set(CMAKE_XCODE_CURRENT_ARCH ${CMAKE_CXX_XCODE_CURRENT_ARCH})")
|
"set(CMAKE_XCODE_ARCHS \"${CMAKE_CXX_XCODE_ARCHS}\")")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# configure all variables set in this file
|
# configure all variables set in this file
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
|||||||
set(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID "${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}" PARENT_SCOPE)
|
set(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID "${CMAKE_${lang}_COMPILER_ARCHITECTURE_ID}" PARENT_SCOPE)
|
||||||
set(MSVC_${lang}_ARCHITECTURE_ID "${MSVC_${lang}_ARCHITECTURE_ID}"
|
set(MSVC_${lang}_ARCHITECTURE_ID "${MSVC_${lang}_ARCHITECTURE_ID}"
|
||||||
PARENT_SCOPE)
|
PARENT_SCOPE)
|
||||||
set(CMAKE_${lang}_XCODE_CURRENT_ARCH "${CMAKE_${lang}_XCODE_CURRENT_ARCH}" PARENT_SCOPE)
|
set(CMAKE_${lang}_XCODE_ARCHS "${CMAKE_${lang}_XCODE_ARCHS}" PARENT_SCOPE)
|
||||||
set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "${CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX}" PARENT_SCOPE)
|
set(CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX "${CMAKE_${lang}_CL_SHOWINCLUDES_PREFIX}" PARENT_SCOPE)
|
||||||
set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION}" PARENT_SCOPE)
|
set(CMAKE_${lang}_COMPILER_VERSION "${CMAKE_${lang}_COMPILER_VERSION}" PARENT_SCOPE)
|
||||||
set(CMAKE_${lang}_COMPILER_VERSION_INTERNAL "${CMAKE_${lang}_COMPILER_VERSION_INTERNAL}" PARENT_SCOPE)
|
set(CMAKE_${lang}_COMPILER_VERSION_INTERNAL "${CMAKE_${lang}_COMPILER_VERSION_INTERNAL}" PARENT_SCOPE)
|
||||||
@@ -380,8 +380,10 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "CURRENT_ARCH=([^%\r\n]+)[\r\n]")
|
if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "ARCHS=([^%\r\n]+)[\r\n]")
|
||||||
set(CMAKE_${lang}_XCODE_CURRENT_ARCH "${CMAKE_MATCH_1}" PARENT_SCOPE)
|
set(CMAKE_${lang}_XCODE_ARCHS "${CMAKE_MATCH_1}")
|
||||||
|
separate_arguments(CMAKE_${lang}_XCODE_ARCHS)
|
||||||
|
set(CMAKE_${lang}_XCODE_ARCHS "${CMAKE_${lang}_XCODE_ARCHS}" PARENT_SCOPE)
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
execute_process(
|
execute_process(
|
||||||
|
|||||||
@@ -58,7 +58,7 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "echo \"GCC_VERSION=$GCC_VERSION\" ; echo \"CURRENT_ARCH=$CURRENT_ARCH\"";
|
shellScript = "echo \"GCC_VERSION=$GCC_VERSION\" ; echo \"ARCHS=$ARCHS\"";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
2C18F0B515DC1DCE00593670 = {
|
2C18F0B515DC1DCE00593670 = {
|
||||||
|
|||||||
@@ -3156,8 +3156,13 @@ void cmGlobalXCodeGenerator::ComputeArchitectures(cmMakefile* mf)
|
|||||||
if (this->Architectures.empty()) {
|
if (this->Architectures.empty()) {
|
||||||
// With no ARCHS we use ONLY_ACTIVE_ARCH.
|
// With no ARCHS we use ONLY_ACTIVE_ARCH.
|
||||||
// Look up the arch that Xcode chooses in this case.
|
// Look up the arch that Xcode chooses in this case.
|
||||||
if (const char* arch = mf->GetDefinition("CMAKE_XCODE_CURRENT_ARCH")) {
|
if (const char* arch = mf->GetDefinition("CMAKE_XCODE_ARCHS")) {
|
||||||
this->ObjectDirArchDefault = arch;
|
this->ObjectDirArchDefault = arch;
|
||||||
|
// We expect only one arch but choose the first just in case.
|
||||||
|
std::string::size_type pos = this->ObjectDirArchDefault.find(';');
|
||||||
|
if (pos != std::string::npos) {
|
||||||
|
this->ObjectDirArchDefault = this->ObjectDirArchDefault.substr(0, pos);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user