From 930bb0cd37ca9d4e522411e06defbc3c52ba8724 Mon Sep 17 00:00:00 2001 From: Alexander Neundorf Date: Mon, 2 Jul 2007 13:29:36 -0400 Subject: [PATCH] ENH: remove support for presetting CMAKE_SYSTEM_INFO_FILE, CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE, CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE, CMAKE_SYSTEM_AND_C_COMPILER_AND_PROCESSOR_INFO_FILE and CMAKE_SYSTEM_AND_CXX_COMPILER_AND_PROCESSOR_INFO_FILE Instead of presetting these variables to arbitrary filenames, users should set up CMAKE_SYSTEM_NAME and the compilers correctly and also create a Platform/ directory so these files will all follow the official cmake style, which should make it easier to understand and debug project which have their own platform/toolchain support files. -remove support for a suffix to MS crosscompilers, since this is not (yet) supported by cmake and might confuse users Alex --- Modules/CMakeCInformation.cmake | 34 ++++++++------------ Modules/CMakeCXXInformation.cmake | 33 ++++++++----------- Modules/CMakeDetermineCCompiler.cmake | 16 +-------- Modules/CMakeDetermineCXXCompiler.cmake | 16 +-------- Modules/CMakeSystemSpecificInformation.cmake | 4 +-- Tests/CMakeTests/DummyToolchain.cmake | 2 +- Tests/CMakeTests/ToolchainTest.cmake.in | 5 --- 7 files changed, 31 insertions(+), 79 deletions(-) diff --git a/Modules/CMakeCInformation.cmake b/Modules/CMakeCInformation.cmake index 4d4e52a08..fec8389b1 100644 --- a/Modules/CMakeCInformation.cmake +++ b/Modules/CMakeCInformation.cmake @@ -19,30 +19,24 @@ IF(CMAKE_COMPILER_IS_GNUCC) ENDIF(CMAKE_COMPILER_IS_GNUCC) -IF(CMAKE_SYSTEM_AND_C_COMPILER_AND_PROCESSOR_INFO_FILE) - INCLUDE(${CMAKE_SYSTEM_AND_C_COMPILER_AND_PROCESSOR_INFO_FILE} OPTIONAL) -ELSE(CMAKE_SYSTEM_AND_C_COMPILER_AND_PROCESSOR_INFO_FILE) - IF(CMAKE_SYSTEM_PROCESSOR) - IF(CMAKE_C_COMPILER_ID) - INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_C_COMPILER_ID}-C-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) - ENDIF(CMAKE_C_COMPILER_ID) - IF (NOT _INCLUDED_FILE) - INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL) - ENDIF (NOT _INCLUDED_FILE) - ENDIF(CMAKE_SYSTEM_PROCESSOR) -ENDIF(CMAKE_SYSTEM_AND_C_COMPILER_AND_PROCESSOR_INFO_FILE) - - -IF(CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE) - INCLUDE(${CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE} OPTIONAL) -ELSE(CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE) +# load a hardware specific file, mostly useful for embedded compilers +IF(CMAKE_SYSTEM_PROCESSOR) IF(CMAKE_C_COMPILER_ID) - INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_C_COMPILER_ID}-C OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_C_COMPILER_ID}-C-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) ENDIF(CMAKE_C_COMPILER_ID) IF (NOT _INCLUDED_FILE) - INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL) ENDIF (NOT _INCLUDED_FILE) -ENDIF(CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE) +ENDIF(CMAKE_SYSTEM_PROCESSOR) + + +# load the system- and compiler specific files +IF(CMAKE_C_COMPILER_ID) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_C_COMPILER_ID}-C OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) +ENDIF(CMAKE_C_COMPILER_ID) +IF (NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL) +ENDIF (NOT _INCLUDED_FILE) # This should be included before the _INIT variables are diff --git a/Modules/CMakeCXXInformation.cmake b/Modules/CMakeCXXInformation.cmake index ba76e34f7..d4d1a8c3f 100644 --- a/Modules/CMakeCXXInformation.cmake +++ b/Modules/CMakeCXXInformation.cmake @@ -21,30 +21,23 @@ IF(CMAKE_COMPILER_IS_GNUCXX) ENDIF(CMAKE_COMPILER_IS_GNUCXX) -IF(CMAKE_SYSTEM_AND_CXX_COMPILER_AND_PROCESSOR_INFO_FILE) - INCLUDE(${CMAKE_SYSTEM_AND_CXX_COMPILER_AND_PROCESSOR_INFO_FILE} OPTIONAL) -ELSE(CMAKE_SYSTEM_AND_CXX_COMPILER_AND_PROCESSOR_INFO_FILE) - IF(CMAKE_SYSTEM_PROCESSOR) - IF(CMAKE_CXX_COMPILER_ID) - INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-CXX-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) - ENDIF(CMAKE_CXX_COMPILER_ID) - IF (NOT _INCLUDED_FILE) - INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL) - ENDIF (NOT _INCLUDED_FILE) - ENDIF(CMAKE_SYSTEM_PROCESSOR) -ENDIF(CMAKE_SYSTEM_AND_CXX_COMPILER_AND_PROCESSOR_INFO_FILE) - - -IF(CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE) - INCLUDE(${CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE} OPTIONAL) -ELSE(CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE) +# load a hardware specific file, mostly useful for embedded compilers +IF(CMAKE_SYSTEM_PROCESSOR) IF(CMAKE_CXX_COMPILER_ID) - INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-CXX OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-CXX-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) ENDIF(CMAKE_CXX_COMPILER_ID) IF (NOT _INCLUDED_FILE) - INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL) ENDIF (NOT _INCLUDED_FILE) -ENDIF(CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE) +ENDIF(CMAKE_SYSTEM_PROCESSOR) + +# load the system- and compiler specific files +IF(CMAKE_CXX_COMPILER_ID) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-CXX OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) +ENDIF(CMAKE_CXX_COMPILER_ID) +IF (NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL) +ENDIF (NOT _INCLUDED_FILE) # This should be included before the _INIT variables are diff --git a/Modules/CMakeDetermineCCompiler.cmake b/Modules/CMakeDetermineCCompiler.cmake index 355a1fe6d..cee4adf2d 100644 --- a/Modules/CMakeDetermineCCompiler.cmake +++ b/Modules/CMakeDetermineCCompiler.cmake @@ -8,10 +8,6 @@ # If the internal cmake variable _CMAKE_TOOLCHAIN_PREFIX is set, this is used # as prefix for the tools (e.g. arm-elf-gcc, arm-elf-ar etc.). This works # currently with the GNU crosscompilers. -# It also tries to detect a MS crosscompiler and find out its -# suffix (clarm.exe), which will be stored in _CMAKE_TOOLCHAIN_SUFFIX and -# reused for the CXX compiler. -# # # Sets the following variables: # CMAKE_C_COMPILER @@ -21,7 +17,6 @@ # # If not already set before, it also sets # _CMAKE_TOOLCHAIN_PREFIX -# _CMAKE_TOOLCHAIN_SUFFIX IF(NOT CMAKE_C_COMPILER) SET(CMAKE_CXX_COMPILER_INIT NOTFOUND) @@ -48,7 +43,7 @@ IF(NOT CMAKE_C_COMPILER) IF(CMAKE_C_COMPILER_INIT) SET(CMAKE_C_COMPILER_LIST ${CMAKE_C_COMPILER_INIT}) ELSE(CMAKE_C_COMPILER_INIT) - SET(CMAKE_C_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}gcc ${_CMAKE_TOOLCHAIN_PREFIX}cc cl${_CMAKE_TOOLCHAIN_SUFFIX} bcc xlc) + SET(CMAKE_C_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}gcc ${_CMAKE_TOOLCHAIN_PREFIX}cc cl bcc xlc) ENDIF(CMAKE_C_COMPILER_INIT) # Find the compiler. @@ -95,15 +90,6 @@ IF (NOT _CMAKE_TOOLCHAIN_PREFIX) ENDIF (COMPILER_BASENAME MATCHES "^(.+-)g?cc") ENDIF (NOT _CMAKE_TOOLCHAIN_PREFIX) -# if we have a MS cross compiler, it usually has a suffix, like -# e.g. clarm.exe or clmips.exe. Use this suffix for the CXX compiler too. -# the same is true e.g. for the IAR cross compiler, which is "icc" -IF (NOT _CMAKE_TOOLCHAIN_SUFFIX) - GET_FILENAME_COMPONENT(COMPILER_BASENAME "${CMAKE_C_COMPILER}" NAME) - IF (COMPILER_BASENAME MATCHES "^cl(.+)\\.exe$") - STRING(REGEX REPLACE "^cl(.+)\\.exe$" "\\1" _CMAKE_TOOLCHAIN_SUFFIX "${COMPILER_BASENAME}") - ENDIF (COMPILER_BASENAME MATCHES "^cl(.+)\\.exe$") -ENDIF (NOT _CMAKE_TOOLCHAIN_SUFFIX) # Build a small source file to identify the compiler. IF(${CMAKE_GENERATOR} MATCHES "Visual Studio") diff --git a/Modules/CMakeDetermineCXXCompiler.cmake b/Modules/CMakeDetermineCXXCompiler.cmake index d67a0f5a7..1efbc6553 100644 --- a/Modules/CMakeDetermineCXXCompiler.cmake +++ b/Modules/CMakeDetermineCXXCompiler.cmake @@ -7,9 +7,6 @@ # as a default compiler # If the internal cmake variable _CMAKE_TOOLCHAIN_PREFIX is set, this is used # as prefix for the tools (e.g. arm-elf-g++, arm-elf-ar etc.) -# It also tries to detect a MS crosscompiler and find out its -# suffix (clarm.exe), which will be stored in _CMAKE_TOOLCHAIN_SUFFIX and -# reused for the C compiler. # # Sets the following variables: # CMAKE_CXX_COMPILER @@ -19,7 +16,6 @@ # # If not already set before, it also sets # _CMAKE_TOOLCHAIN_PREFIX -# _CMAKE_TOOLCHAIN_SUFFIX IF(NOT CMAKE_CXX_COMPILER) SET(CMAKE_CXX_COMPILER_INIT NOTFOUND) @@ -46,7 +42,7 @@ IF(NOT CMAKE_CXX_COMPILER) IF(CMAKE_CXX_COMPILER_INIT) SET(CMAKE_CXX_COMPILER_LIST ${CMAKE_CXX_COMPILER_INIT}) ELSE(CMAKE_CXX_COMPILER_INIT) - SET(CMAKE_CXX_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}c++ ${_CMAKE_TOOLCHAIN_PREFIX}g++ CC aCC cl${_CMAKE_TOOLCHAIN_SUFFIX} bcc xlC) + SET(CMAKE_CXX_COMPILER_LIST ${_CMAKE_TOOLCHAIN_PREFIX}c++ ${_CMAKE_TOOLCHAIN_PREFIX}g++ CC aCC cl bcc xlC) ENDIF(CMAKE_CXX_COMPILER_INIT) # Find the compiler. @@ -93,16 +89,6 @@ IF (NOT _CMAKE_TOOLCHAIN_PREFIX) ENDIF (COMPILER_BASENAME MATCHES "^(.+-)[gc]\\+\\+") ENDIF (NOT _CMAKE_TOOLCHAIN_PREFIX) -# if we have a MS cross compiler, it usually has a suffix, like -# e.g. clarm.exe or clmips.exe. Use this suffix for the CXX compiler too. -IF (NOT _CMAKE_TOOLCHAIN_SUFFIX) - GET_FILENAME_COMPONENT(COMPILER_BASENAME "${CMAKE_CXX_COMPILER}" NAME) - IF (COMPILER_BASENAME MATCHES "^cl(.+)\\.exe$") - STRING(REGEX REPLACE "^cl(.+)\\.exe$" "\\1" _CMAKE_TOOLCHAIN_SUFFIX "${COMPILER_BASENAME}") - ENDIF (COMPILER_BASENAME MATCHES "^cl(.+)\\.exe$") -ENDIF (NOT _CMAKE_TOOLCHAIN_SUFFIX) - - # This block was used before the compiler was identified by building a # source file. Unless g++ crashes when building a small C++ # executable this should no longer be needed. diff --git a/Modules/CMakeSystemSpecificInformation.cmake b/Modules/CMakeSystemSpecificInformation.cmake index b2c5671dc..37e31c997 100644 --- a/Modules/CMakeSystemSpecificInformation.cmake +++ b/Modules/CMakeSystemSpecificInformation.cmake @@ -7,9 +7,7 @@ INCLUDE(CMakeGenericSystem) # 2. now include SystemName.cmake file to set the system specific information -IF(NOT CMAKE_SYSTEM_INFO_FILE) - SET(CMAKE_SYSTEM_INFO_FILE Platform/${CMAKE_SYSTEM_NAME}) -ENDIF(NOT CMAKE_SYSTEM_INFO_FILE) +SET(CMAKE_SYSTEM_INFO_FILE Platform/${CMAKE_SYSTEM_NAME}) INCLUDE(${CMAKE_SYSTEM_INFO_FILE} OPTIONAL RESULT_VARIABLE _INCLUDED_SYSTEM_INFO_FILE) diff --git a/Tests/CMakeTests/DummyToolchain.cmake b/Tests/CMakeTests/DummyToolchain.cmake index 0cd0dfbb0..6a602015b 100644 --- a/Tests/CMakeTests/DummyToolchain.cmake +++ b/Tests/CMakeTests/DummyToolchain.cmake @@ -4,5 +4,5 @@ set(CMAKE_SYSTEM_VERSION "1.0") set(CMAKE_C_COMPILER /opt/foo/bin/arm-elf-gcc) set(CMAKE_C_OUTPUT_EXTENSION ".foo") -set(CMAKE_CXX_COMPILER /opt/bar/bin/clarm.exe) +set(CMAKE_CXX_COMPILER /opt/bar/bin/cl.exe) set(CMAKE_CXX_OUTPUT_EXTENSION ".bar") diff --git a/Tests/CMakeTests/ToolchainTest.cmake.in b/Tests/CMakeTests/ToolchainTest.cmake.in index bf0f1c257..90c45d016 100644 --- a/Tests/CMakeTests/ToolchainTest.cmake.in +++ b/Tests/CMakeTests/ToolchainTest.cmake.in @@ -121,10 +121,6 @@ endif(NOT "${CMAKE_C_OUTPUT_EXTENSION}" STREQUAL ".foo") # check the results from DetermineCXXCompiler -if(NOT "${_CMAKE_TOOLCHAIN_SUFFIX}" STREQUAL "arm") - message(FATAL_ERROR "wrong toolchain suffix detected: \"${_CMAKE_TOOLCHAIN_SUFFIX}\", expected: \"arm\"") -endif(NOT "${_CMAKE_TOOLCHAIN_SUFFIX}" STREQUAL "arm") - if(NOT "${_CMAKE_USER_CXX_COMPILER_PATH}" STREQUAL "/opt/bar/bin") message(FATAL_ERROR "wrong CXX compiler location detected: \"${_CMAKE_USER_CXX_COMPILER_PATH}\", expected: \"/opt/bar/bin\"") endif(NOT "${_CMAKE_USER_CXX_COMPILER_PATH}" STREQUAL "/opt/bar/bin") @@ -134,7 +130,6 @@ if(NOT "${CMAKE_CXX_OUTPUT_EXTENSION}" STREQUAL ".bar") endif(NOT "${CMAKE_CXX_OUTPUT_EXTENSION}" STREQUAL ".bar") message(STATUS "CMAKE_SYSTEM: \"${CMAKE_SYSTEM}\"") -message(STATUS "_CMAKE_TOOLCHAIN_SUFFIX: \"${_CMAKE_TOOLCHAIN_SUFFIX}\"") message(STATUS "_CMAKE_TOOLCHAIN_PREFIX: \"${_CMAKE_TOOLCHAIN_PREFIX}\"") message(STATUS "_CMAKE_USER_C_COMPILER_PATH: \"${_CMAKE_USER_C_COMPILER_PATH}\"") message(STATUS "_CMAKE_USER_CXX_COMPILER_PATH: \"${_CMAKE_USER_CXX_COMPILER_PATH}\"")