ENH: merge CMake-CrossCompileBasic to HEAD
-add a RESULT_VARIABLE to INCLUDE()
-add CMAKE_TOOLCHAIN_FILE for specifiying your (potentially crosscompiling) toolchain
-have TRY_RUN() complain if you try to use it in crosscompiling mode (which were compiled but cannot run on this system)
-use CMAKE_EXECUTABLE_SUFFIX in TRY_RUN(), probably TRY_RUN won't be able to
run the executables if they have a different suffix because they are
probably crosscompiled, but nevertheless it should be able to find them
-make several cmake variables presettable by the user: CMAKE_C/CXX_COMPILER, CMAKE_C/CXX_OUTPUT_EXTENSION, CMAKE_SYSTEM_NAME, CMAKE_SYSTEM_INFO_FILE
-support prefix for GNU toolchains (arm-elf-gcc, arm-elf-ar, arm-elf-strip etc.)
-move ranlib on OSX from the file command to a command in executed in cmake_install.cmake
-add support for stripping during install in cmake_install.cmake
-split out cl.cmake from Windows-cl.cmake, first (very incomplete) step to support MS crosscompiling tools
-remove stdio.h from the simple C program which checks if the compiler works, since this may not exist for some embedded platforms
-create a new CMakeFindBinUtils.cmake which collects the search fro ar, ranlib, strip, ld, link, install_name_tool and other tools like these
-add support for CMAKE_FIND_ROOT_PATH for all FIND_XXX commands, which is a
list of directories which will be prepended to all search directories, right
now as a cmake variable, turning it into a global cmake property may need
some more work
-remove cmTestTestHandler::TryExecutable(), it's unused
-split cmFileCommand::HandleInstall() into slightly smaller functions
Alex
2007-05-17 21:20:44 +04:00
############################################################
# some preparations so that the CMakeDetermineXXX.cmake files will work in scripted mode
# overwrite MARK_AS_ADVANCED(), since this is used in CMakeDetermineCCompiler.cmake
# which will complain that it can"t be used in script mode
macro ( MARK_AS_ADVANCED )
endmacro ( MARK_AS_ADVANCED )
# set this to a place where we are allowed to write
set ( CMAKE_PLATFORM_ROOT_BIN "${CMAKE_CURRENT_BINARY_DIR}" )
# don't run the compiler detection
set ( CMAKE_C_COMPILER_ID_RUN 1 )
set ( CMAKE_CXX_COMPILER_ID_RUN 1 )
set ( MY_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@" )
2007-05-29 19:36:07 +04:00
# at first load CMakeDetermineSystem.cmake without toolchain file
set ( CMAKE_TOOLCHAIN_FILE )
include ( CMakeDetermineSystem )
# check that CMAKE_SYSTEM_XXX and CMAKE_HOST_SYSTEM_xxx are identical
if ( NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "${CMAKE_HOST_SYSTEM_NAME}" )
message ( FATAL_ERROR "CMAKE_SYSTEM_NAME and CMAKE_HOST_SYSTEM_NAME not identical: \" ${ CMAKE_SYSTEM_NAME } \" vs. \"${CMAKE_HOST_SYSTEM_NAME}\"")
endif ( NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "${CMAKE_HOST_SYSTEM_NAME}" )
if ( NOT "${CMAKE_SYSTEM}" STREQUAL "${CMAKE_HOST_SYSTEM}" )
message ( FATAL_ERROR "CMAKE_SYSTEM and CMAKE_HOST_SYSTEM not identical: \" ${ CMAKE_SYSTEM } \" vs. \"${CMAKE_HOST_SYSTEM}\"")
endif ( NOT "${CMAKE_SYSTEM}" STREQUAL "${CMAKE_HOST_SYSTEM}" )
if ( NOT "${CMAKE_SYSTEM_VERSION}" STREQUAL "${CMAKE_HOST_SYSTEM_VERSION}" )
message ( FATAL_ERROR "CMAKE_SYSTEM_VERSION and CMAKE_HOST_SYSTEM_VERSION not identical: \" ${ CMAKE_SYSTEM_VERSION } \" vs. \"${CMAKE_HOST_SYSTEM_VERSION}\"")
endif ( NOT "${CMAKE_SYSTEM_VERSION}" STREQUAL "${CMAKE_HOST_SYSTEM_VERSION}" )
if ( NOT "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "${CMAKE_HOST_SYSTEM_PROCESSOR}" )
message ( FATAL_ERROR "CMAKE_SYSTEM_PROCESSOR and CMAKE_HOST_SYSTEM_PROCESSOR not identical: \" ${ CMAKE_SYSTEM_PROCESSOR } \" vs. \"${CMAKE_HOST_SYSTEM_PROCESSOR}\"")
endif ( NOT "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "${CMAKE_HOST_SYSTEM_PROCESSOR}" )
# save the values so we can compare them to CMAKE_HOST_SYSTEM_XXX in the toolchain case
set ( NATIVE_SYSTEM "${CMAKE_SYSTEM}" )
set ( NATIVE_SYSTEM_NAME "${CMAKE_SYSTEM_NAME}" )
set ( NATIVE_SYSTEM_VERSION "${CMAKE_SYSTEM_VERSION}" )
set ( NATIVE_SYSTEM_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}" )
# reset them so they will be detected again now
set ( CMAKE_SYSTEM )
set ( CMAKE_SYSTEM_NAME )
set ( CMAKE_SYSTEM_VERSION )
set ( CMAKE_SYSTEM_PROCESSOR )
set ( CMAKE_HOST_SYSTEM )
set ( CMAKE_HOST_SYSTEM_NAME )
set ( CMAKE_HOST_SYSTEM_VERSION )
set ( CMAKE_HOST_SYSTEM_PROCESSOR )
ENH: merge CMake-CrossCompileBasic to HEAD
-add a RESULT_VARIABLE to INCLUDE()
-add CMAKE_TOOLCHAIN_FILE for specifiying your (potentially crosscompiling) toolchain
-have TRY_RUN() complain if you try to use it in crosscompiling mode (which were compiled but cannot run on this system)
-use CMAKE_EXECUTABLE_SUFFIX in TRY_RUN(), probably TRY_RUN won't be able to
run the executables if they have a different suffix because they are
probably crosscompiled, but nevertheless it should be able to find them
-make several cmake variables presettable by the user: CMAKE_C/CXX_COMPILER, CMAKE_C/CXX_OUTPUT_EXTENSION, CMAKE_SYSTEM_NAME, CMAKE_SYSTEM_INFO_FILE
-support prefix for GNU toolchains (arm-elf-gcc, arm-elf-ar, arm-elf-strip etc.)
-move ranlib on OSX from the file command to a command in executed in cmake_install.cmake
-add support for stripping during install in cmake_install.cmake
-split out cl.cmake from Windows-cl.cmake, first (very incomplete) step to support MS crosscompiling tools
-remove stdio.h from the simple C program which checks if the compiler works, since this may not exist for some embedded platforms
-create a new CMakeFindBinUtils.cmake which collects the search fro ar, ranlib, strip, ld, link, install_name_tool and other tools like these
-add support for CMAKE_FIND_ROOT_PATH for all FIND_XXX commands, which is a
list of directories which will be prepended to all search directories, right
now as a cmake variable, turning it into a global cmake property may need
some more work
-remove cmTestTestHandler::TryExecutable(), it's unused
-split cmFileCommand::HandleInstall() into slightly smaller functions
Alex
2007-05-17 21:20:44 +04:00
############################################################
# now define a toolchain file and check that everything is
# detected correctly and nothing predefined is overwritten
set ( CMAKE_TOOLCHAIN_FILE "${MY_SOURCE_DIR}/DummyToolchain.cmake" )
include ( CMakeDetermineSystem )
include ( CMakeDetermineCCompiler )
include ( CMakeDetermineCXXCompiler )
#############################################################
# check the results from DetermineSystem
if ( NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Dumdidum" )
message ( FATAL_ERROR "CMAKE_SYSTEM_NAME overwritten: \" ${ CMAKE_SYSTEM_NAME } \", was: \"Dumdidum\"")
endif ( NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Dumdidum" )
if ( NOT "${CMAKE_SYSTEM}" STREQUAL "Dumdidum-1.0" )
message ( FATAL_ERROR "CMAKE_SYSTEM wrong: \" ${ CMAKE_SYSTEM } \", expected: \"Dumdidum-1.0\"")
endif ( NOT "${CMAKE_SYSTEM}" STREQUAL "Dumdidum-1.0" )
2007-06-06 21:32:01 +04:00
set ( fileOne "${_INCLUDED_TOOLCHAIN_FILE}" )
set ( fileTwo "${MY_SOURCE_DIR}/DummyToolchain.cmake" )
if ( WIN32 )
string ( TOLOWER "${fileOne}" fileOne )
2007-06-06 21:43:46 +04:00
string ( TOLOWER "${fileTwo}" fileTwo )
2007-06-06 21:32:01 +04:00
endif ( WIN32 )
if ( NOT "${fileOne}" STREQUAL "${fileTwo}" )
2007-06-06 21:43:46 +04:00
message ( FATAL_ERROR "Wrong toolchain was loaded: \" ${ fileOne } \" expected \"${fileTwo}\"")
2007-06-06 21:32:01 +04:00
endif ( NOT "${fileOne}" STREQUAL "${fileTwo}" )
2007-05-29 19:36:07 +04:00
# check that CMAKE_HOST_SYSTEM_XXX and _SYSTEM_xxx detected above are identical
if ( NOT "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "${NATIVE_SYSTEM_NAME}" )
message ( FATAL_ERROR "CMAKE_HOST_SYSTEM_NAME and NATIVE_SYSTEM_NAME not identical: \" ${ CMAKE_HOST_SYSTEM_NAME } \" vs. \"${NATIVE_SYSTEM_NAME}\"")
endif ( NOT "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "${NATIVE_SYSTEM_NAME}" )
if ( NOT "${CMAKE_HOST_SYSTEM}" STREQUAL "${NATIVE_SYSTEM}" )
message ( FATAL_ERROR "CMAKE_HOST_SYSTEM and NATIVE_SYSTEM not identical: \" ${ CMAKE_HOST_SYSTEM } \" vs. \"${NATIVE_SYSTEM}\"")
endif ( NOT "${CMAKE_HOST_SYSTEM}" STREQUAL "${NATIVE_SYSTEM}" )
if ( NOT "${CMAKE_HOST_SYSTEM_VERSION}" STREQUAL "${NATIVE_SYSTEM_VERSION}" )
message ( FATAL_ERROR "CMAKE_HOST_SYSTEM_VERSION and NATIVE_SYSTEM_VERSION not identical: \" ${ CMAKE_HOST_SYSTEM_VERSION } \" vs. \"${NATIVE_SYSTEM_VERSION}\"")
endif ( NOT "${CMAKE_HOST_SYSTEM_VERSION}" STREQUAL "${NATIVE_SYSTEM_VERSION}" )
if ( NOT "${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "${NATIVE_SYSTEM_PROCESSOR}" )
message ( FATAL_ERROR "CMAKE_HOST_SYSTEM_PROCESSOR and NATIVE_SYSTEM_PROCESSOR not identical: \" ${ CMAKE_HOST_SYSTEM_PROCESSOR } \" vs. \"${NATIVE_SYSTEM_PROCESSOR}\"")
endif ( NOT "${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "${NATIVE_SYSTEM_PROCESSOR}" )
ENH: merge CMake-CrossCompileBasic to HEAD
-add a RESULT_VARIABLE to INCLUDE()
-add CMAKE_TOOLCHAIN_FILE for specifiying your (potentially crosscompiling) toolchain
-have TRY_RUN() complain if you try to use it in crosscompiling mode (which were compiled but cannot run on this system)
-use CMAKE_EXECUTABLE_SUFFIX in TRY_RUN(), probably TRY_RUN won't be able to
run the executables if they have a different suffix because they are
probably crosscompiled, but nevertheless it should be able to find them
-make several cmake variables presettable by the user: CMAKE_C/CXX_COMPILER, CMAKE_C/CXX_OUTPUT_EXTENSION, CMAKE_SYSTEM_NAME, CMAKE_SYSTEM_INFO_FILE
-support prefix for GNU toolchains (arm-elf-gcc, arm-elf-ar, arm-elf-strip etc.)
-move ranlib on OSX from the file command to a command in executed in cmake_install.cmake
-add support for stripping during install in cmake_install.cmake
-split out cl.cmake from Windows-cl.cmake, first (very incomplete) step to support MS crosscompiling tools
-remove stdio.h from the simple C program which checks if the compiler works, since this may not exist for some embedded platforms
-create a new CMakeFindBinUtils.cmake which collects the search fro ar, ranlib, strip, ld, link, install_name_tool and other tools like these
-add support for CMAKE_FIND_ROOT_PATH for all FIND_XXX commands, which is a
list of directories which will be prepended to all search directories, right
now as a cmake variable, turning it into a global cmake property may need
some more work
-remove cmTestTestHandler::TryExecutable(), it's unused
-split cmFileCommand::HandleInstall() into slightly smaller functions
Alex
2007-05-17 21:20:44 +04:00
#############################################################
# check the results from DetermineCCompiler
if ( NOT "${_CMAKE_TOOLCHAIN_PREFIX}" STREQUAL "arm-elf-" )
message ( FATAL_ERROR "wrong toolchain prefix detected: \" ${ _CMAKE_TOOLCHAIN_PREFIX } \", expected: \"arm-elf-\"")
endif ( NOT "${_CMAKE_TOOLCHAIN_PREFIX}" STREQUAL "arm-elf-" )
if ( NOT "${_CMAKE_USER_C_COMPILER_PATH}" STREQUAL "/opt/foo/bin" )
message ( FATAL_ERROR "wrong C compiler location detected: \" ${ _CMAKE_USER_C_COMPILER_PATH } \", expected: \"/opt/foo/bin\"")
endif ( NOT "${_CMAKE_USER_C_COMPILER_PATH}" STREQUAL "/opt/foo/bin" )
if ( NOT "${CMAKE_C_OUTPUT_EXTENSION}" STREQUAL ".foo" )
message ( FATAL_ERROR "C output extension overwritten: \" ${ CMAKE_C_OUTPUT_EXTENSION } \", was: \".foo\"")
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" )
if ( NOT "${CMAKE_CXX_OUTPUT_EXTENSION}" STREQUAL ".bar" )
message ( FATAL_ERROR "C output extension overwritten: \" ${ CMAKE_CXX_OUTPUT_EXTENSION } \", was: \".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 } \"")
message ( STATUS "CMAKE_C_OUTPUT_EXTENSION: \" ${ CMAKE_C_OUTPUT_EXTENSION } \"")
message ( STATUS "CMAKE_CXX_OUTPUT_EXTENSION: \" ${ CMAKE_CXX_OUTPUT_EXTENSION } \"")