1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
macro( define_default variable value )
if( NOT DEFINED ${variable} )
set( ${variable} ${value} )
endif()
endmacro()
# Set a default build type of RelWithDebInfo if not set
if(NOT GENERATOR_IS_MULTI_CONFIG AND NOT CMAKE_BUILD_TYPE)
if(NOT CMAKE_C_FLAGS AND NOT CMAKE_CXX_FLAGS)
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
"CMake build type for single-configuration generators" FORCE)
endif()
endif()
add_definitions( -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 )
define_default( LIBRARY_PATH_PREFIX "lib" )
#-------------------------------------------------------------------------------
# Enable c++14
#-------------------------------------------------------------------------------
set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ Standard")
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
if( ENABLE_ASAN )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
endif()
if( ENABLE_TSAN )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
endif()
# Set baseline warning level for GCC and Clang
add_compile_options(
-Wall
-Wextra
$<$<NOT:$<BOOL:${APPLE}>>:-Wdeprecated>
-Wnull-dereference
-Wno-unused-parameter
-Wno-vla
)
# Disable some warnings currently triggered with Clang
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(
-Wno-deprecated-copy-with-user-provided-dtor
-Wno-unused-const-variable
-Wno-unused-private-field
)
endif()
# Disable warnings with nvc++ (for when we are built as ROOT built-in dependency)
if(CMAKE_CXX_COMPILER_ID MATCHES "NVHPC")
add_compile_options(-w)
endif()
#-------------------------------------------------------------------------------
# Linux
#-------------------------------------------------------------------------------
if( ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" )
set( EXTRA_LIBS rt )
# Check for musl libc with the compiler, since it provides way to detect it
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
OUTPUT_VARIABLE TARGET_TRIPLE ERROR_VARIABLE TARGET_ERROR)
if (NOT TARGET_ERROR)
if ("${TARGET_TRIPLE}" MATCHES "musl")
message(STATUS "Detected musl libc")
add_definitions(-DMUSL=1)
endif()
else()
message(WARNING "Could not detect system information!")
endif()
unset(TARGET_ERROR)
endif()
#-------------------------------------------------------------------------------
# GNU/kFreeBSD
#-------------------------------------------------------------------------------
if( ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD" )
set( EXTRA_LIBS rt )
endif()
#-------------------------------------------------------------------------------
# GNU/Hurd
#-------------------------------------------------------------------------------
if( ${CMAKE_SYSTEM_NAME} STREQUAL "GNU" )
set( EXTRA_LIBS rt )
endif()
#-------------------------------------------------------------------------------
# macOS
#-------------------------------------------------------------------------------
if( APPLE )
set(CMAKE_MACOSX_RPATH TRUE)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_INSTALL_RPATH "@loader_path/../lib" CACHE STRING "Install RPATH")
# this is here because of Apple deprecating openssl and krb5
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations" )
add_definitions( -DLT_MODULE_EXT=".dylib" )
endif()
#-------------------------------------------------------------------------------
# Solaris
#-------------------------------------------------------------------------------
if( ${CMAKE_SYSTEM_NAME} STREQUAL "SunOS" )
define_default( FORCE_32BITS FALSE )
add_definitions( -D__solaris__=1 )
add_definitions( -DSUNCC -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS )
set( EXTRA_LIBS rt Crun Cstd )
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fast" )
set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fast" )
execute_process( COMMAND isainfo
OUTPUT_VARIABLE SOLARIS_ARCH )
string( REPLACE " " ";" SOLARIS_ARCH_LIST ${SOLARIS_ARCH} )
# amd64 (opteron)
list( FIND SOLARIS_ARCH_LIST amd64 SOLARIS_AMD64 )
if( SOLARIS_AMD64 EQUAL -1 )
set( SOLARIS_AMD64 FALSE )
else()
set( SOLARIS_AMD64 TRUE )
endif()
#-----------------------------------------------------------------------------
# Define solaris version
#-----------------------------------------------------------------------------
execute_process( COMMAND uname -r
OUTPUT_VARIABLE SOLARIS_VER )
string( REPLACE "." ";" SOLARIS_VER_LIST ${SOLARIS_VER} )
list( GET SOLARIS_VER_LIST 1 SOLARIS_VERSION )
string( REPLACE "\n" "" SOLARIS_VERSION ${SOLARIS_VERSION} )
add_definitions( -DSOLARIS_VERSION=${SOLARIS_VERSION} )
#-----------------------------------------------------------------------------
# AMD64 (opteron)
#-----------------------------------------------------------------------------
if( ${SOLARIS_VERSION} STREQUAL "10" AND SOLARIS_AMD64 AND NOT FORCE_32BITS )
set( CMAKE_CXX_FLAGS " -m64 -xtarget=opteron -xs ${CMAKE_CXX_FLAGS} " )
set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -G" )
define_default( CMAKE_LIBRARY_PATH "/lib/64;/usr/lib/64" )
add_definitions( -DSUNX86 )
set( LIB_SEARCH_OPTIONS NO_DEFAULT_PATH )
define_default( LIBRARY_PATH_PREFIX "lib/64" )
endif()
endif()
|