katie/mkspecs/mkspecs.cmake
Ivailo Monev 421192dd96 change KATIE_KEY pattern to similar to machine identifier of compilers [ci skip]
Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
2019-12-01 06:14:00 +00:00

110 lines
3.9 KiB
CMake

# KatieConfig overrides KATIE_MKSPECS_DIR, KATIE_TYPE and KATIE_KEY
if(NOT KATIE_MKSPECS_DIR)
set(KATIE_MKSPECS_DIR ${CMAKE_SOURCE_DIR}/mkspecs)
endif()
if(NOT KATIE_TYPE)
set(KATIE_TYPE SHARED)
katie_definition(-DQT_SHARED)
endif()
if(NOT KATIE_PLATFORM)
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
set(KATIE_PLATFORM "linux")
elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
set(KATIE_PLATFORM "freebsd")
katie_definition(-D_THREAD_SAFE)
elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
set(KATIE_PLATFORM "openbsd")
else()
message(FATAL_ERROR "Unknown platform '${CMAKE_SYSTEM_NAME}'")
endif()
endif()
if(NOT KATIE_COMPILER)
# using MATCHES in all checks due to CMP0054
if (CMAKE_CXX_COMPILER_ID MATCHES "(Clang|AppleClang)")
set(KATIE_COMPILER "clang")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
set(KATIE_COMPILER "gcc")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Intel")
set(KATIE_COMPILER "icc")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
set(KATIE_COMPILER "msvc")
else()
message(FATAL_ERROR "Unknown compiler '${CMAKE_CXX_COMPILER_ID}'")
endif()
endif()
if(NOT KATIE_ARCHITECTURE)
if(CMAKE_SYSTEM_PROCESSOR)
string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} lowercase_processor)
elseif(CMAKE_HOST_SYSTEM_PROCESSOR)
string(TOLOWER ${CMAKE_HOST_SYSTEM_PROCESSOR} lowercase_processor)
endif()
# https://en.wikipedia.org/wiki/Uname
if(lowercase_processor MATCHES "^alpha")
set(KATIE_ARCHITECTURE "alpha")
elseif(lowercase_processor MATCHES "^arm")
set(KATIE_ARCHITECTURE "arm")
elseif(lowercase_processor MATCHES "^avr")
set(KATIE_ARCHITECTURE "avr")
elseif(lowercase_processor MATCHES "^blackfin")
set(KATIE_ARCHITECTURE "blackfin")
elseif(lowercase_processor MATCHES "(x86|i[3-6]86|i86pc)")
set(KATIE_ARCHITECTURE "i386")
elseif(lowercase_processor MATCHES "^ia64")
set(KATIE_ARCHITECTURE "ia64")
elseif(lowercase_processor MATCHES "^m68k")
set(KATIE_ARCHITECTURE "m68k")
elseif(lowercase_processor MATCHES "^mips")
set(KATIE_ARCHITECTURE "mips")
elseif(lowercase_processor MATCHES "^nacl")
set(KATIE_ARCHITECTURE "nacl")
elseif(lowercase_processor MATCHES "^hppa")
set(KATIE_ARCHITECTURE "parisc")
elseif(lowercase_processor MATCHES "^ppc")
set(KATIE_ARCHITECTURE "powerpc")
elseif(lowercase_processor MATCHES "^s390")
set(KATIE_ARCHITECTURE "s390")
elseif(lowercase_processor MATCHES "^sparc")
set(KATIE_ARCHITECTURE "sparc")
elseif(lowercase_processor MATCHES "^sh")
set(KATIE_ARCHITECTURE "sh")
elseif(lowercase_processor MATCHES "(x86_64|amd64)")
set(KATIE_ARCHITECTURE "x86_64")
else()
message(FATAL_ERROR "Unknown CPU '${CMAKE_SYSTEM_PROCESSOR}' (${CMAKE_HOST_SYSTEM_PROCESSOR})")
endif()
endif()
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
katie_definition(-DQT_NO_DEBUG -DNDEBUG)
endif()
try_compile(bsymbolic_functions_test
${CMAKE_BINARY_DIR}
${KATIE_MKSPECS_DIR}/bsymbolic_functions.cpp
CMAKE_FLAGS -shared -Wl,-Bsymbolic-functions -fPIC
OUTPUT_VARIABLE bsymbolic_functions_test_output
)
if(NOT bsymbolic_functions_test OR NOT CMAKE_POSITION_INDEPENDENT_CODE)
katie_definition(-DQ_NO_DATA_RELOCATION)
endif()
if(NOT KATIE_KEY)
set(KATIE_KEY "${KATIE_ARCHITECTURE}-${KATIE_PLATFORM}-${KATIE_COMPILER}")
endif()
# Set compiler standard to C++ 11, appending to CMAKE_CXX_FLAGS is done so that try_compile() is
# also affected, which KDE uses for visibility check for an example
if(KATIE_COMPILER STREQUAL "gcc")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
elseif(KATIE_COMPILER STREQUAL "clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()
if(NOT CMAKE_VERSION VERSION_LESS "3.1.0")
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 11)
endif()