Change the way 32/64 bit compiles are detected with MSVC and intel makefile builds. Use the platform ID preprocessor approach.
This commit is contained in:
parent
1699836b06
commit
4430bccc70
|
@ -2,6 +2,7 @@ SET(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@")
|
|||
SET(CMAKE_C_COMPILER_ARG1 "@CMAKE_C_COMPILER_ARG1@")
|
||||
SET(CMAKE_C_COMPILER_ID "@CMAKE_C_COMPILER_ID@")
|
||||
SET(CMAKE_C_PLATFORM_ID "@CMAKE_C_PLATFORM_ID@")
|
||||
@SET_MSVC_C_ARCHITECTURE_ID@
|
||||
SET(CMAKE_AR "@CMAKE_AR@")
|
||||
SET(CMAKE_RANLIB "@CMAKE_RANLIB@")
|
||||
SET(CMAKE_COMPILER_IS_GNUCC @CMAKE_COMPILER_IS_GNUCC@)
|
||||
|
|
|
@ -93,6 +93,7 @@ int main(int argc, char* argv[])
|
|||
int require = 0;
|
||||
require += info_compiler[argc];
|
||||
require += info_platform[argc];
|
||||
require += info_arch[argc];
|
||||
(void)argv;
|
||||
return require;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ SET(CMAKE_CXX_COMPILER "@CMAKE_CXX_COMPILER@")
|
|||
SET(CMAKE_CXX_COMPILER_ARG1 "@CMAKE_CXX_COMPILER_ARG1@")
|
||||
SET(CMAKE_CXX_COMPILER_ID "@CMAKE_CXX_COMPILER_ID@")
|
||||
SET(CMAKE_CXX_PLATFORM_ID "@CMAKE_CXX_PLATFORM_ID@")
|
||||
@SET_MSVC_CXX_ARCHITECTURE_ID@
|
||||
SET(CMAKE_AR "@CMAKE_AR@")
|
||||
SET(CMAKE_RANLIB "@CMAKE_RANLIB@")
|
||||
SET(CMAKE_COMPILER_IS_GNUCXX @CMAKE_COMPILER_IS_GNUCXX@)
|
||||
|
|
|
@ -171,11 +171,13 @@ ENDIF (CMAKE_CROSSCOMPILING
|
|||
|
||||
|
||||
INCLUDE(CMakeFindBinUtils)
|
||||
|
||||
IF(MSVC_C_ARCHITECTURE_ID)
|
||||
SET(SET_MSVC_C_ARCHITECTURE_ID
|
||||
"SET(MSVC_C_ARCHITECTURE_ID ${MSVC_C_ARCHITECTURE_ID})")
|
||||
ENDIF(MSVC_C_ARCHITECTURE_ID)
|
||||
# configure variables set in this file for fast reload later on
|
||||
CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeCCompiler.cmake.in
|
||||
"${CMAKE_PLATFORM_ROOT_BIN}/CMakeCCompiler.cmake"
|
||||
@ONLY IMMEDIATE # IMMEDIATE must be here for compatibility mode <= 2.0
|
||||
)
|
||||
|
||||
SET(CMAKE_C_COMPILER_ENV_VAR "CC")
|
||||
|
|
|
@ -176,7 +176,10 @@ ENDIF (CMAKE_CROSSCOMPILING
|
|||
AND NOT _CMAKE_TOOLCHAIN_PREFIX)
|
||||
|
||||
INCLUDE(CMakeFindBinUtils)
|
||||
|
||||
IF(MSVC_CXX_ARCHITECTURE_ID)
|
||||
SET(SET_MSVC_CXX_ARCHITECTURE_ID
|
||||
"SET(MSVC_CXX_ARCHITECTURE_ID ${MSVC_CXX_ARCHITECTURE_ID})")
|
||||
ENDIF(MSVC_CXX_ARCHITECTURE_ID)
|
||||
# configure all variables set in this file
|
||||
CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeCXXCompiler.cmake.in
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeCXXCompiler.cmake
|
||||
|
|
|
@ -57,6 +57,8 @@ FUNCTION(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
|||
|
||||
SET(CMAKE_${lang}_COMPILER_ID "${CMAKE_${lang}_COMPILER_ID}" PARENT_SCOPE)
|
||||
SET(CMAKE_${lang}_PLATFORM_ID "${CMAKE_${lang}_PLATFORM_ID}" PARENT_SCOPE)
|
||||
SET(MSVC_${lang}_ARCHITECTURE_ID "${MSVC_${lang}_ARCHITECTURE_ID}"
|
||||
PARENT_SCOPE)
|
||||
ENDFUNCTION(CMAKE_DETERMINE_COMPILER_ID)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
|
@ -171,7 +173,7 @@ FUNCTION(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
|||
SET(COMPILER_ID)
|
||||
SET(PLATFORM_ID)
|
||||
FILE(STRINGS ${file}
|
||||
CMAKE_${lang}_COMPILER_ID_STRINGS LIMIT_COUNT 2 REGEX "INFO:")
|
||||
CMAKE_${lang}_COMPILER_ID_STRINGS LIMIT_COUNT 3 REGEX "INFO:")
|
||||
SET(HAVE_COMPILER_TWICE 0)
|
||||
FOREACH(info ${CMAKE_${lang}_COMPILER_ID_STRINGS})
|
||||
IF("${info}" MATCHES ".*INFO:compiler\\[([^]\"]*)\\].*")
|
||||
|
@ -185,12 +187,17 @@ FUNCTION(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
|||
STRING(REGEX REPLACE ".*INFO:platform\\[([^]]*)\\].*" "\\1"
|
||||
PLATFORM_ID "${info}")
|
||||
ENDIF("${info}" MATCHES ".*INFO:platform\\[([^]\"]*)\\].*")
|
||||
IF("${info}" MATCHES ".*INFO:arch\\[([^]\"]*)\\].*")
|
||||
STRING(REGEX REPLACE ".*INFO:arch\\[([^]]*)\\].*" "\\1"
|
||||
ARCHITECTURE_ID "${info}")
|
||||
ENDIF("${info}" MATCHES ".*INFO:arch\\[([^]\"]*)\\].*")
|
||||
ENDFOREACH(info)
|
||||
|
||||
# Check if a valid compiler and platform were found.
|
||||
IF(COMPILER_ID AND NOT COMPILER_ID_TWICE)
|
||||
SET(CMAKE_${lang}_COMPILER_ID "${COMPILER_ID}")
|
||||
SET(CMAKE_${lang}_PLATFORM_ID "${PLATFORM_ID}")
|
||||
SET(MSVC_${lang}_ARCHITECTURE_ID "${ARCHITECTURE_ID}")
|
||||
ENDIF(COMPILER_ID AND NOT COMPILER_ID_TWICE)
|
||||
|
||||
# Check the compiler identification string.
|
||||
|
@ -234,5 +241,7 @@ FUNCTION(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
|||
# Return the information extracted.
|
||||
SET(CMAKE_${lang}_COMPILER_ID "${CMAKE_${lang}_COMPILER_ID}" PARENT_SCOPE)
|
||||
SET(CMAKE_${lang}_PLATFORM_ID "${CMAKE_${lang}_PLATFORM_ID}" PARENT_SCOPE)
|
||||
SET(MSVC_${lang}_ARCHITECTURE_ID "${MSVC_${lang}_ARCHITECTURE_ID}"
|
||||
PARENT_SCOPE)
|
||||
SET(CMAKE_EXECUTABLE_FORMAT "${CMAKE_EXECUTABLE_FORMAT}" PARENT_SCOPE)
|
||||
ENDFUNCTION(CMAKE_DETERMINE_COMPILER_ID_CHECK lang)
|
||||
|
|
|
@ -82,8 +82,31 @@
|
|||
|
||||
#endif
|
||||
|
||||
/* For windows compilers MSVC and Intel we can determine
|
||||
the architecture of the compiler being used. This is becase
|
||||
the compilers do not have flags that can change the architecture,
|
||||
but rather depend on which compiler is being used
|
||||
*/
|
||||
#if defined(_WIN32) && defined(_MSC_VER)
|
||||
# if defined(_M_IA64)
|
||||
# define ARCHITECTURE_ID "IA64"
|
||||
|
||||
# elif defined(_M_X64) || defined(_M_AMD64)
|
||||
# define ARCHITECTURE_ID "x64"
|
||||
|
||||
# elif defined(_M_IX86)
|
||||
# define ARCHITECTURE_ID "X86"
|
||||
|
||||
# else /* unknown architecture */
|
||||
# defined ARCHITECTURE_ID ""
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
/* Construct the string literal in pieces to prevent the source from
|
||||
getting matched. Store it in a pointer rather than an array
|
||||
because some compilers will just produce instructions to fill the
|
||||
array rather than assigning a pointer to a static array. */
|
||||
char* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
|
||||
char* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
|
||||
|
||||
|
|
|
@ -141,32 +141,14 @@ IF(CMAKE_GENERATOR MATCHES "Makefiles")
|
|||
SET(CMAKE_USING_VC_FREE_TOOLS 0)
|
||||
ENDIF(CMAKE_COMPILER_RETURN)
|
||||
MAKE_DIRECTORY("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp3")
|
||||
MESSAGE(STATUS "Check CL platform")
|
||||
EXEC_PROGRAM(${CMAKE_TEST_COMPILER} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp3
|
||||
ARGS /nologo
|
||||
\"${testForFreeVCFile}\"
|
||||
/link /machine:i386
|
||||
OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT
|
||||
RETURN_VALUE CMAKE_COMPILER_RETURN
|
||||
)
|
||||
# if there was an error assume it is a 64bit system
|
||||
IF(CMAKE_COMPILER_RETURN)
|
||||
FILE(APPEND
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||
"Determining if this is a 64 bit system passed:\n"
|
||||
"${CMAKE_COMPILER_OUTPUT}\n\n")
|
||||
MESSAGE(STATUS "Check CL platform - 64 bit")
|
||||
SET(CMAKE_CL_64 1)
|
||||
ELSE(CMAKE_COMPILER_RETURN)
|
||||
FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||
"Determining if this is a 32 bit system passed:\n"
|
||||
"${CMAKE_COMPILER_OUTPUT}\n\n")
|
||||
MESSAGE(STATUS "Check CL platform - 32 bit")
|
||||
SET(CMAKE_CL_64 0)
|
||||
ENDIF(CMAKE_COMPILER_RETURN)
|
||||
ENDIF(NOT CMAKE_VC_COMPILER_TESTS_RUN)
|
||||
ENDIF(CMAKE_GENERATOR MATCHES "Makefiles")
|
||||
|
||||
IF(MSVC_C_ARCHITECTURE_ID MATCHES 64)
|
||||
SET(CMAKE_CL_64 1)
|
||||
ELSE(MSVC_C_ARCHITECTURE_ID MATCHES 64)
|
||||
SET(CMAKE_CL_64 0)
|
||||
ENDIF(MSVC_C_ARCHITECTURE_ID MATCHES 64)
|
||||
IF(CMAKE_FORCE_WIN64)
|
||||
SET(CMAKE_CL_64 1)
|
||||
ENDIF(CMAKE_FORCE_WIN64)
|
||||
|
@ -235,13 +217,12 @@ SET(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
|
|||
# executable linker flags
|
||||
SET (CMAKE_LINK_DEF_FILE_FLAG "/DEF:")
|
||||
# set the stack size and the machine type
|
||||
IF(CMAKE_CL_64)
|
||||
SET(_MACHINE_ARCH_FLAG ${MSVC_C_ARCHITECTURE_ID})
|
||||
IF(NOT _MACHINE_ARCH_FLAG)
|
||||
SET(_MACHINE_ARCH_FLAG ${MSVC_CXX_ARCHITECTURE_ID})
|
||||
ENDIF(NOT _MACHINE_ARCH_FLAG)
|
||||
SET (CMAKE_EXE_LINKER_FLAGS_INIT
|
||||
"${CMAKE_EXE_LINKER_FLAGS_INIT} /STACK:10000000 /machine:x64")
|
||||
ELSE(CMAKE_CL_64)
|
||||
SET (CMAKE_EXE_LINKER_FLAGS_INIT
|
||||
"${CMAKE_EXE_LINKER_FLAGS_INIT} /STACK:10000000 /machine:I386")
|
||||
ENDIF(CMAKE_CL_64)
|
||||
"${CMAKE_EXE_LINKER_FLAGS_INIT} /STACK:10000000 /machine:${_MACHINE_ARCH_FLAG}")
|
||||
|
||||
# add /debug and /INCREMENTAL:YES to DEBUG and RELWITHDEBINFO also add pdbtyp
|
||||
# on versions that support it
|
||||
|
|
|
@ -71,7 +71,11 @@ SET(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
|
|||
|
||||
# executable linker flags
|
||||
SET (CMAKE_LINK_DEF_FILE_FLAG "/DEF:")
|
||||
SET (CMAKE_EXE_LINKER_FLAGS_INIT "/STACK:10000000 /INCREMENTAL:YES")
|
||||
SET(_MACHINE_ARCH_FLAG ${MSVC_C_ARCHITECTURE_ID})
|
||||
IF(NOT _MACHINE_ARCH_FLAG)
|
||||
SET(_MACHINE_ARCH_FLAG ${MSVC_CXX_ARCHITECTURE_ID})
|
||||
ENDIF(NOT _MACHINE_ARCH_FLAG)
|
||||
SET (CMAKE_EXE_LINKER_FLAGS_INIT "/STACK:10000000 /INCREMENTAL:YES /machine:${_MACHINE_ARCH_FLAG}")
|
||||
SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/debug")
|
||||
SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/debug")
|
||||
|
||||
|
@ -82,6 +86,7 @@ SET (CMAKE_MODULE_LINKER_FLAGS_INIT ${CMAKE_SHARED_LINKER_FLAGS_INIT})
|
|||
SET (CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT ${CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT})
|
||||
SET (CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT})
|
||||
|
||||
|
||||
INCLUDE(Platform/Windows-Intel)
|
||||
|
||||
IF(_INTEL_COMPILER_SUPPORTS_MANIFEST)
|
||||
|
|
Loading…
Reference in New Issue