mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-22 06:59:01 -06:00
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
This commit is contained in:
@@ -25,37 +25,60 @@
|
||||
# Ultrix ULTRIX
|
||||
# cygwin CYGWIN_NT-5.1
|
||||
# MacOSX Darwin
|
||||
IF(UNIX)
|
||||
FIND_PROGRAM(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin )
|
||||
IF(CMAKE_UNAME)
|
||||
EXEC_PROGRAM(uname ARGS -s OUTPUT_VARIABLE CMAKE_SYSTEM_NAME)
|
||||
EXEC_PROGRAM(uname ARGS -r OUTPUT_VARIABLE CMAKE_SYSTEM_VERSION)
|
||||
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR
|
||||
RETURN_VALUE val)
|
||||
ELSE(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
EXEC_PROGRAM(uname ARGS -p OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR
|
||||
RETURN_VALUE val)
|
||||
IF("${val}" GREATER 0)
|
||||
|
||||
IF(CMAKE_TOOLCHAIN_FILE)
|
||||
# at first try to load it as path relative to the directory from which cmake has been run
|
||||
INCLUDE("${CMAKE_BINARY_DIR}/${CMAKE_TOOLCHAIN_FILE}" OPTIONAL RESULT_VARIABLE _INCLUDED_TOOLCHAIN_FILE)
|
||||
IF(NOT _INCLUDED_TOOLCHAIN_FILE)
|
||||
# if the file isn't found there, check the default locations
|
||||
INCLUDE("${CMAKE_TOOLCHAIN_FILE}" OPTIONAL RESULT_VARIABLE _INCLUDED_TOOLCHAIN_FILE)
|
||||
ENDIF(NOT _INCLUDED_TOOLCHAIN_FILE)
|
||||
|
||||
IF(_INCLUDED_TOOLCHAIN_FILE)
|
||||
SET(CMAKE_TOOLCHAIN_FILE "${_INCLUDED_TOOLCHAIN_FILE}")
|
||||
ELSE(_INCLUDED_TOOLCHAIN_FILE)
|
||||
MESSAGE(FATAL_ERROR "Could not find toolchain file: ${CMAKE_TOOLCHAIN_FILE}")
|
||||
ENDIF(_INCLUDED_TOOLCHAIN_FILE)
|
||||
|
||||
IF(NOT DEFINED CMAKE_CROSSCOMPILING)
|
||||
SET(CMAKE_CROSSCOMPILING TRUE)
|
||||
ENDIF(NOT DEFINED CMAKE_CROSSCOMPILING)
|
||||
ENDIF(CMAKE_TOOLCHAIN_FILE)
|
||||
|
||||
IF(NOT CMAKE_SYSTEM_NAME)
|
||||
IF(UNIX)
|
||||
FIND_PROGRAM(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin )
|
||||
IF(CMAKE_UNAME)
|
||||
EXEC_PROGRAM(uname ARGS -s OUTPUT_VARIABLE CMAKE_SYSTEM_NAME)
|
||||
EXEC_PROGRAM(uname ARGS -r OUTPUT_VARIABLE CMAKE_SYSTEM_VERSION)
|
||||
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR
|
||||
RETURN_VALUE val)
|
||||
ELSE(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
EXEC_PROGRAM(uname ARGS -p OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR
|
||||
RETURN_VALUE val)
|
||||
IF("${val}" GREATER 0)
|
||||
EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR
|
||||
RETURN_VALUE val)
|
||||
ENDIF("${val}" GREATER 0)
|
||||
ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
# check the return of the last uname -m or -p
|
||||
IF("${val}" GREATER 0)
|
||||
SET(CMAKE_SYSTEM_PROCESSOR "unknown")
|
||||
ENDIF("${val}" GREATER 0)
|
||||
ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
# check the return of the last uname -m or -p
|
||||
IF("${val}" GREATER 0)
|
||||
SET(CMAKE_SYSTEM_PROCESSOR "unknown")
|
||||
ENDIF("${val}" GREATER 0)
|
||||
SET(CMAKE_UNAME ${CMAKE_UNAME} CACHE INTERNAL "uname command")
|
||||
# processor may have double quote in the name, and that needs to be removed
|
||||
STRING(REGEX REPLACE "\"" "" CMAKE_SYSTEM_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}")
|
||||
STRING(REGEX REPLACE "/" "_" CMAKE_SYSTEM_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}")
|
||||
ENDIF(CMAKE_UNAME)
|
||||
ELSE(UNIX)
|
||||
IF(WIN32)
|
||||
SET (CMAKE_SYSTEM_NAME "Windows")
|
||||
SET (CMAKE_SYSTEM_PROCESSOR "$ENV{PROCESSOR_ARCHITECTURE}")
|
||||
ENDIF(WIN32)
|
||||
ENDIF(UNIX)
|
||||
SET(CMAKE_UNAME ${CMAKE_UNAME} CACHE INTERNAL "uname command")
|
||||
# processor may have double quote in the name, and that needs to be removed
|
||||
STRING(REGEX REPLACE "\"" "" CMAKE_SYSTEM_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}")
|
||||
STRING(REGEX REPLACE "/" "_" CMAKE_SYSTEM_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}")
|
||||
ENDIF(CMAKE_UNAME)
|
||||
ELSE(UNIX)
|
||||
IF(WIN32)
|
||||
SET (CMAKE_SYSTEM_NAME "Windows")
|
||||
SET (CMAKE_SYSTEM_PROCESSOR "$ENV{PROCESSOR_ARCHITECTURE}")
|
||||
ENDIF(WIN32)
|
||||
ENDIF(UNIX)
|
||||
ENDIF(NOT CMAKE_SYSTEM_NAME)
|
||||
|
||||
|
||||
IF(NOT CMAKE_SYSTEM_NAME)
|
||||
SET(CMAKE_SYSTEM_NAME "UnknownOS")
|
||||
|
||||
Reference in New Issue
Block a user