diff options
author | Alexander Neundorf <neundorf@kde.org> | 2007-06-05 14:28:43 (GMT) |
---|---|---|
committer | Alexander Neundorf <neundorf@kde.org> | 2007-06-05 14:28:43 (GMT) |
commit | eab5a4350d45fe228ad143cf481c52c26feacef3 (patch) | |
tree | 88282dc5469f70e84600628781ada218ac9a4042 | |
parent | 6989f80026498fa24134143b30adf8a909aba51d (diff) | |
download | CMake-eab5a4350d45fe228ad143cf481c52c26feacef3.zip CMake-eab5a4350d45fe228ad143cf481c52c26feacef3.tar.gz CMake-eab5a4350d45fe228ad143cf481c52c26feacef3.tar.bz2 |
ENH: also load a processor-specific file if exists
-also try the basename file if the compiler id file doesn't exist
-don't rely so much on the CMAKE_TOOLCHAIN_FILE
Alex
-rw-r--r-- | Modules/CMakeCCompilerId.c | 8 | ||||
-rw-r--r-- | Modules/CMakeCInformation.cmake | 41 | ||||
-rw-r--r-- | Modules/CMakeCXXInformation.cmake | 45 | ||||
-rw-r--r-- | Modules/CMakeDetermineSystem.cmake | 33 | ||||
-rw-r--r-- | Modules/CMakeSystemWithToolchainFile.cmake.in | 10 |
5 files changed, 90 insertions, 47 deletions
diff --git a/Modules/CMakeCCompilerId.c b/Modules/CMakeCCompilerId.c index 8a8753a..e069e31 100644 --- a/Modules/CMakeCCompilerId.c +++ b/Modules/CMakeCCompilerId.c @@ -35,15 +35,15 @@ /* IAR Systems compiler for embedded systems. http://www.iar.com - Beside this id not supported yet by CMake */ + Not supported yet by CMake #elif defined(__IAR_SYSTEMS_ICC__) -# define COMPILER_ID "IAR" +# define COMPILER_ID "IAR" */ /* sdcc, the small devices C compiler for embedded systems, http://sdcc.sourceforge.net - Beside this id not supported yet by CMake. */ + Not supported yet by CMake. #elif defined(SDCC) -# define COMPILER_ID "SDCC" +# define COMPILER_ID "SDCC" */ #elif defined(_COMPILER_VERSION) # define COMPILER_ID "MIPSpro" diff --git a/Modules/CMakeCInformation.cmake b/Modules/CMakeCInformation.cmake index 5f73e6f..9e0dda2 100644 --- a/Modules/CMakeCInformation.cmake +++ b/Modules/CMakeCInformation.cmake @@ -2,22 +2,39 @@ # This file sets the basic flags for the C language in CMake. # It also loads the available platform file for the system-compiler # if it exists. +# It also loads a system - compiler - processor (or target hardware) +# specific file, which is mainly useful for crosscompiling and embedded systems. -IF(NOT CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE) - GET_FILENAME_COMPONENT(CMAKE_BASE_NAME ${CMAKE_C_COMPILER} NAME_WE) - IF(CMAKE_COMPILER_IS_GNUCC) - SET(CMAKE_BASE_NAME gcc) - ENDIF(CMAKE_COMPILER_IS_GNUCC) +GET_FILENAME_COMPONENT(CMAKE_BASE_NAME ${CMAKE_C_COMPILER} NAME_WE) +IF(CMAKE_COMPILER_IS_GNUCC) + SET(CMAKE_BASE_NAME gcc) +ENDIF(CMAKE_COMPILER_IS_GNUCC) + +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) IF(CMAKE_C_COMPILER_ID) - IF(EXISTS ${CMAKE_ROOT}/Modules/Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_C_COMPILER_ID}-C.cmake) - SET(CMAKE_BASE_NAME ${CMAKE_C_COMPILER_ID}-C) - ENDIF(EXISTS ${CMAKE_ROOT}/Modules/Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_C_COMPILER_ID}-C.cmake) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_C_COMPILER_ID}-C OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) ENDIF(CMAKE_C_COMPILER_ID) - SET(CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE - ${CMAKE_ROOT}/Modules/Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}.cmake) -ENDIF(NOT CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE) + IF (NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL) + ENDIF (NOT _INCLUDED_FILE) +ENDIF(CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE) + + +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) -INCLUDE(${CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE} OPTIONAL) # This should be included before the _INIT variables are # used to initialize the cache. Since the rule variables diff --git a/Modules/CMakeCXXInformation.cmake b/Modules/CMakeCXXInformation.cmake index d966f12..8557d9d 100644 --- a/Modules/CMakeCXXInformation.cmake +++ b/Modules/CMakeCXXInformation.cmake @@ -2,23 +2,40 @@ # This file sets the basic flags for the C++ language in CMake. # It also loads the available platform file for the system-compiler # if it exists. - -IF(NOT CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE) - GET_FILENAME_COMPONENT(CMAKE_BASE_NAME ${CMAKE_CXX_COMPILER} NAME_WE) - # since the gnu compiler has several names force g++ - IF(CMAKE_COMPILER_IS_GNUCXX) - SET(CMAKE_BASE_NAME g++) - ENDIF(CMAKE_COMPILER_IS_GNUCXX) +# It also loads a system - compiler - processor (or target hardware) +# specific file, which is mainly useful for crosscompiling and embedded systems. + +GET_FILENAME_COMPONENT(CMAKE_BASE_NAME ${CMAKE_CXX_COMPILER} NAME_WE) +# since the gnu compiler has several names force g++ +IF(CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_BASE_NAME g++) +ENDIF(CMAKE_COMPILER_IS_GNUCXX) + +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) IF(CMAKE_CXX_COMPILER_ID) - IF(EXISTS ${CMAKE_ROOT}/Modules/Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-CXX.cmake) - SET(CMAKE_BASE_NAME ${CMAKE_CXX_COMPILER_ID}-CXX) - ENDIF(EXISTS ${CMAKE_ROOT}/Modules/Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-CXX.cmake) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-CXX OPTIONAL RESULT_VARIABLE _INCLUDED_FILE) ENDIF(CMAKE_CXX_COMPILER_ID) - SET(CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE - ${CMAKE_ROOT}/Modules/Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}.cmake) -ENDIF(NOT CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE) + IF (NOT _INCLUDED_FILE) + INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL) + ENDIF (NOT _INCLUDED_FILE) +ENDIF(CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE) + + +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) -INCLUDE(${CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE} OPTIONAL) # This should be included before the _INIT variables are # used to initialize the cache. Since the rule variables diff --git a/Modules/CMakeDetermineSystem.cmake b/Modules/CMakeDetermineSystem.cmake index 1da8cb4..580d832 100644 --- a/Modules/CMakeDetermineSystem.cmake +++ b/Modules/CMakeDetermineSystem.cmake @@ -77,19 +77,25 @@ IF(CMAKE_TOOLCHAIN_FILE) ELSE(_INCLUDED_TOOLCHAIN_FILE) MESSAGE(FATAL_ERROR "Could not find toolchain file: ${CMAKE_TOOLCHAIN_FILE}") ENDIF(_INCLUDED_TOOLCHAIN_FILE) +ENDIF(CMAKE_TOOLCHAIN_FILE) + +# if CMAKE_SYSTEM_NAME is here already set, either it comes from a toolchain file +# or it was set via -DCMAKE_SYSTEM_NAME=... +# if that's the case, assume we are crosscompiling +IF(CMAKE_SYSTEM_NAME) IF(NOT DEFINED CMAKE_CROSSCOMPILING) SET(CMAKE_CROSSCOMPILING TRUE) ENDIF(NOT DEFINED CMAKE_CROSSCOMPILING) - -ELSE(CMAKE_TOOLCHAIN_FILE) - + SET(PRESET_CMAKE_SYSTEM_NAME TRUE) +ELSE(CMAKE_SYSTEM_NAME) SET(CMAKE_SYSTEM_NAME "${CMAKE_HOST_SYSTEM_NAME}") SET(CMAKE_SYSTEM_VERSION "${CMAKE_HOST_SYSTEM_VERSION}") SET(CMAKE_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}") SET(CMAKE_CROSSCOMPILING FALSE) + SET(PRESET_CMAKE_SYSTEM_NAME FALSE) +ENDIF(CMAKE_SYSTEM_NAME) -ENDIF(CMAKE_TOOLCHAIN_FILE) MACRO(ADJUST_CMAKE_SYSTEM_VARIABLES _PREFIX) IF(NOT ${_PREFIX}_NAME) @@ -118,14 +124,22 @@ ENDMACRO(ADJUST_CMAKE_SYSTEM_VARIABLES _PREFIX) ADJUST_CMAKE_SYSTEM_VARIABLES(CMAKE_SYSTEM) ADJUST_CMAKE_SYSTEM_VARIABLES(CMAKE_HOST_SYSTEM) +# write entry to the log file +IF(PRESET_CMAKE_SYSTEM_NAME) + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "The target system is: ${CMAKE_SYSTEM_NAME} - ${CMAKE_SYSTEM_VERSION} - ${CMAKE_SYSTEM_PROCESSOR}\n") + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "The host system is: ${CMAKE_HOST_SYSTEM_NAME} - ${CMAKE_HOST_SYSTEM_VERSION} - ${CMAKE_HOST_SYSTEM_PROCESSOR}\n") +ELSE(PRESET_CMAKE_SYSTEM_NAME) + FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "The system is: ${CMAKE_SYSTEM_NAME} - ${CMAKE_SYSTEM_VERSION} - ${CMAKE_SYSTEM_PROCESSOR}\n") +ENDIF(PRESET_CMAKE_SYSTEM_NAME) + + # if a toolchain file is used use configure_file() to copy it into the # build tree, because this way e.g. ${CMAKE_SOURCE_DIR} will be replaced # with its full path, and so it will also work when used in try_compile() IF (CMAKE_TOOLCHAIN_FILE) - FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log - "The target system is: ${CMAKE_SYSTEM_NAME} - ${CMAKE_SYSTEM_VERSION} - ${CMAKE_SYSTEM_PROCESSOR}\n") - FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log - "The host system is: ${CMAKE_HOST_SYSTEM_NAME} - ${CMAKE_HOST_SYSTEM_VERSION} - ${CMAKE_HOST_SYSTEM_PROCESSOR}\n") SET(_OWN_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}) CONFIGURE_FILE(${CMAKE_TOOLCHAIN_FILE} @@ -134,10 +148,7 @@ IF (CMAKE_TOOLCHAIN_FILE) CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeSystemWithToolchainFile.cmake.in ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake IMMEDIATE @ONLY) - ELSE (CMAKE_TOOLCHAIN_FILE) - FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log - "The system is: ${CMAKE_SYSTEM_NAME} - ${CMAKE_SYSTEM_VERSION} - ${CMAKE_SYSTEM_PROCESSOR}\n") # configure variables set in this file for fast reload, the template file is defined at the top of this file CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeSystem.cmake.in diff --git a/Modules/CMakeSystemWithToolchainFile.cmake.in b/Modules/CMakeSystemWithToolchainFile.cmake.in index cfaa037..6bf3b15 100644 --- a/Modules/CMakeSystemWithToolchainFile.cmake.in +++ b/Modules/CMakeSystemWithToolchainFile.cmake.in @@ -1,12 +1,10 @@ # the following file has been configured from @CMAKE_TOOLCHAIN_FILE@ INCLUDE(@_OWN_DIR@/CMakeToolchainFile.cmake) -# set CMAKE_SYSTEM to the CMAKE_SYSTEM_NAME -SET(CMAKE_SYSTEM ${CMAKE_SYSTEM_NAME}) -# if there is a CMAKE_SYSTEM_VERSION then add a -${CMAKE_SYSTEM_VERSION} -IF(CMAKE_SYSTEM_VERSION) - SET(CMAKE_SYSTEM ${CMAKE_SYSTEM}-${CMAKE_SYSTEM_VERSION}) -ENDIF(CMAKE_SYSTEM_VERSION) +SET(CMAKE_SYSTEM "@CMAKE_SYSTEM@") +SET(CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@") +SET(CMAKE_SYSTEM_VERSION "@CMAKE_SYSTEM_VERSION@") +SET(CMAKE_SYSTEM_PROCESSOR "@CMAKE_SYSTEM_PROCESSOR@") SET(CMAKE_HOST_SYSTEM "@CMAKE_HOST_SYSTEM@") SET(CMAKE_HOST_SYSTEM_NAME "@CMAKE_HOST_SYSTEM_NAME@") |