summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Neundorf <neundorf@kde.org>2007-06-05 14:28:43 (GMT)
committerAlexander Neundorf <neundorf@kde.org>2007-06-05 14:28:43 (GMT)
commiteab5a4350d45fe228ad143cf481c52c26feacef3 (patch)
tree88282dc5469f70e84600628781ada218ac9a4042
parent6989f80026498fa24134143b30adf8a909aba51d (diff)
downloadCMake-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.c8
-rw-r--r--Modules/CMakeCInformation.cmake41
-rw-r--r--Modules/CMakeCXXInformation.cmake45
-rw-r--r--Modules/CMakeDetermineSystem.cmake33
-rw-r--r--Modules/CMakeSystemWithToolchainFile.cmake.in10
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@")