2019-08-30 16:50:43 +00:00
if ( CMAKE_SYSTEM_NAME MATCHES "Linux" )
set ( OS_LINUX 1 )
2019-09-15 10:35:12 +00:00
add_compile_definitions ( OS_LINUX )
2019-08-30 16:50:43 +00:00
elseif ( CMAKE_SYSTEM_NAME MATCHES "FreeBSD" )
set ( OS_FREEBSD 1 )
2019-09-15 10:35:12 +00:00
add_compile_definitions ( OS_FREEBSD )
2019-08-30 16:50:43 +00:00
elseif ( CMAKE_SYSTEM_NAME MATCHES "Darwin" )
set ( OS_DARWIN 1 )
2019-09-15 10:35:12 +00:00
add_compile_definitions ( OS_DARWIN )
2019-08-30 16:50:43 +00:00
endif ( )
if ( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
set ( COMPILER_GCC 1 )
elseif ( CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
set ( COMPILER_CLANG 1 )
endif ( )
if ( COMPILER_GCC )
# Require minimum version of gcc
set ( GCC_MINIMUM_VERSION 8 )
if ( CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${ GCC_MINIMUM_VERSION } AND NOT CMAKE_VERSION VERSION_LESS 2.8.9 )
message ( FATAL_ERROR "GCC version must be at least ${GCC_MINIMUM_VERSION}. For example, if GCC ${GCC_MINIMUM_VERSION} is available under gcc-${GCC_MINIMUM_VERSION}, g++-${GCC_MINIMUM_VERSION} names, do the following: export CC=gcc-${GCC_MINIMUM_VERSION} CXX=g++-${GCC_MINIMUM_VERSION}; rm -rf CMakeCache.txt CMakeFiles; and re run cmake or ./release." )
endif ( )
elseif ( COMPILER_CLANG )
# Require minimum version of clang
set ( CLANG_MINIMUM_VERSION 7 )
if ( CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${ CLANG_MINIMUM_VERSION } )
message ( FATAL_ERROR "Clang version must be at least ${CLANG_MINIMUM_VERSION}." )
endif ( )
else ( )
message ( WARNING "You are using an unsupported compiler. Compilation has only been tested with Clang 6+ and GCC 7+." )
endif ( )
string ( REGEX MATCH "-?[0-9]+(.[0-9]+)?$" COMPILER_POSTFIX ${ CMAKE_CXX_COMPILER } )
2019-09-09 18:19:43 +00:00
if ( OS_LINUX )
find_program ( LLD_PATH NAMES "lld${COMPILER_POSTFIX}" "lld" )
2019-09-23 14:38:13 +00:00
find_program ( GOLD_PATH NAMES "ld.gold" "gold" )
2019-09-09 18:19:43 +00:00
endif ( )
2019-08-30 16:50:43 +00:00
2019-09-09 18:19:43 +00:00
option ( LINKER_NAME "Linker name or full path" )
if ( NOT LINKER_NAME )
if ( COMPILER_CLANG AND LLD_PATH )
2019-09-23 14:38:13 +00:00
set ( LINKER_NAME "lld" )
2019-09-09 18:19:43 +00:00
elseif ( GOLD_PATH )
2019-09-23 14:38:13 +00:00
set ( LINKER_NAME "gold" )
2019-09-09 18:19:43 +00:00
endif ( )
2019-08-30 16:50:43 +00:00
endif ( )
if ( LINKER_NAME )
message ( STATUS "Using linker: ${LINKER_NAME} (selected from: LLD_PATH=${LLD_PATH}; GOLD_PATH=${GOLD_PATH}; COMPILER_POSTFIX=${COMPILER_POSTFIX})" )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=${LINKER_NAME}" )
2019-09-20 18:25:55 +00:00
set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=${LINKER_NAME}" )
2019-08-30 16:50:43 +00:00
endif ( )
if ( CMAKE_CROSSCOMPILING )
if ( CMAKE_SYSTEM_NAME MATCHES "Darwin" )
2019-09-09 18:19:43 +00:00
set ( CMAKE_SYSTEM_PROCESSOR x86_64 )
2019-08-30 16:50:43 +00:00
set ( CMAKE_C_COMPILER_TARGET x86_64-apple-darwin )
set ( CMAKE_CXX_COMPILER_TARGET x86_64-apple-darwin )
2019-09-09 18:19:43 +00:00
set ( HAS_PRE_1970_EXITCODE "0" CACHE STRING "Result from TRY_RUN" FORCE )
set ( HAS_PRE_1970_EXITCODE__TRYRUN_OUTPUT "" CACHE STRING "Output from TRY_RUN" FORCE )
2019-09-23 14:38:13 +00:00
set ( HAS_POST_2038_EXITCODE "0" CACHE STRING "Result from TRY_RUN" FORCE )
set ( HAS_POST_2038_EXITCODE__TRYRUN_OUTPUT "" CACHE STRING "Output from TRY_RUN" FORCE )
2019-08-30 16:50:43 +00:00
endif ( )
2019-09-11 10:01:38 +00:00
# Don't know why but CXX_STANDARD doesn't work for cross-compilation
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17" )
2019-08-30 16:50:43 +00:00
endif ( )