134 lines
3.5 KiB
CMake
134 lines
3.5 KiB
CMake
cmake_minimum_required(VERSION 3.5)
|
|
|
|
# load settings in case of "try compile"
|
|
set(TOOLCHAIN_CONFIG_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/toolchain.config.cmake")
|
|
get_property(__IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE)
|
|
if(__IN_TRY_COMPILE)
|
|
include("${CMAKE_CURRENT_SOURCE_DIR}/../toolchain.config.cmake" OPTIONAL) # CMAKE_BINARY_DIR is different
|
|
macro(toolchain_save_config)
|
|
# nothing
|
|
endmacro()
|
|
else()
|
|
macro(toolchain_save_config)
|
|
set(__config "#message(\"Load TOOLCHAIN config...\")\n")
|
|
get_cmake_property(__variableNames VARIABLES)
|
|
set(__vars_list ${ARGN})
|
|
list(APPEND __vars_list
|
|
${TOOLCHAIN_CONFIG_VARS}
|
|
CMAKE_SYSTEM_NAME
|
|
CMAKE_SYSTEM_VERSION
|
|
CMAKE_SYSTEM_PROCESSOR
|
|
CMAKE_C_COMPILER
|
|
CMAKE_CXX_COMPILER
|
|
CMAKE_C_FLAGS
|
|
CMAKE_CXX_FLAGS
|
|
CMAKE_SHARED_LINKER_FLAGS
|
|
CMAKE_MODULE_LINKER_FLAGS
|
|
CMAKE_EXE_LINKER_FLAGS
|
|
CMAKE_SKIP_RPATH
|
|
CMAKE_FIND_ROOT_PATH
|
|
GCC_COMPILER_VERSION
|
|
)
|
|
foreach(__var ${__variableNames})
|
|
foreach(_v ${__vars_list})
|
|
if("x${__var}" STREQUAL "x${_v}")
|
|
if(${__var} MATCHES " ")
|
|
set(__config "${__config}set(${__var} \"${${__var}}\")\n")
|
|
else()
|
|
set(__config "${__config}set(${__var} ${${__var}})\n")
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
endforeach()
|
|
if(EXISTS "${TOOLCHAIN_CONFIG_FILE}")
|
|
file(READ "${TOOLCHAIN_CONFIG_FILE}" __config_old)
|
|
endif()
|
|
if("${__config_old}" STREQUAL "${__config}")
|
|
# nothing
|
|
else()
|
|
#message("Update TOOLCHAIN config: ${__config}")
|
|
file(WRITE "${TOOLCHAIN_CONFIG_FILE}" "${__config}")
|
|
endif()
|
|
unset(__config)
|
|
unset(__config_old)
|
|
unset(__vars_list)
|
|
unset(__variableNames)
|
|
endmacro()
|
|
endif() # IN_TRY_COMPILE
|
|
|
|
if(NOT CMAKE_FIND_ROOT_PATH_MODE_LIBRARY)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
endif()
|
|
|
|
if(NOT CMAKE_FIND_ROOT_PATH_MODE_INCLUDE)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
endif()
|
|
|
|
if(NOT CMAKE_FIND_ROOT_PATH_MODE_PACKAGE)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
|
endif()
|
|
|
|
if(NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
endif()
|
|
|
|
macro(__cmake_find_root_save_and_reset)
|
|
foreach(v
|
|
CMAKE_FIND_ROOT_PATH_MODE_LIBRARY
|
|
CMAKE_FIND_ROOT_PATH_MODE_INCLUDE
|
|
CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
|
|
CMAKE_FIND_ROOT_PATH_MODE_PROGRAM
|
|
)
|
|
set(__save_${v} ${${v}})
|
|
set(${v} NEVER)
|
|
endforeach()
|
|
endmacro()
|
|
|
|
macro(__cmake_find_root_restore)
|
|
foreach(v
|
|
CMAKE_FIND_ROOT_PATH_MODE_LIBRARY
|
|
CMAKE_FIND_ROOT_PATH_MODE_INCLUDE
|
|
CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
|
|
CMAKE_FIND_ROOT_PATH_MODE_PROGRAM
|
|
)
|
|
set(${v} ${__save_${v}})
|
|
unset(__save_${v})
|
|
endforeach()
|
|
endmacro()
|
|
|
|
|
|
# macro to find programs on the host OS
|
|
macro(find_host_program)
|
|
__cmake_find_root_save_and_reset()
|
|
if(CMAKE_HOST_WIN32)
|
|
SET(WIN32 1)
|
|
SET(UNIX)
|
|
elseif(CMAKE_HOST_APPLE)
|
|
SET(APPLE 1)
|
|
SET(UNIX)
|
|
endif()
|
|
find_program(${ARGN})
|
|
SET(WIN32)
|
|
SET(APPLE)
|
|
SET(UNIX 1)
|
|
__cmake_find_root_restore()
|
|
endmacro()
|
|
|
|
# macro to find packages on the host OS
|
|
macro(find_host_package)
|
|
__cmake_find_root_save_and_reset()
|
|
if(CMAKE_HOST_WIN32)
|
|
SET(WIN32 1)
|
|
SET(UNIX)
|
|
elseif(CMAKE_HOST_APPLE)
|
|
SET(APPLE 1)
|
|
SET(UNIX)
|
|
endif()
|
|
find_package(${ARGN})
|
|
SET(WIN32)
|
|
SET(APPLE)
|
|
SET(UNIX 1)
|
|
__cmake_find_root_restore()
|
|
endmacro()
|
|
|
|
set(CMAKE_SKIP_RPATH TRUE CACHE BOOL "If set, runtime paths are not added when using shared libraries.")
|