mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 19:41:47 +01:00
2bd3f447c1
git-svn-id: file:///svn/toku/tokudb@43285 c7de825b-a66e-492c-adef-691d508d4ae1
123 lines
4.2 KiB
CMake
123 lines
4.2 KiB
CMake
## set c99 dialect
|
|
add_definitions("-std=c99")
|
|
|
|
function(add_c_defines)
|
|
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS ${ARGN})
|
|
endfunction(add_c_defines)
|
|
|
|
## os name detection (threadpool-test.c needs this)
|
|
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
|
add_c_defines(DARWIN=1 _DARWIN_C_SOURCE)
|
|
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|
add_c_defines(__linux__=1)
|
|
endif()
|
|
|
|
## preprocessor definitions we want everywhere
|
|
add_c_defines(
|
|
_SVID_SOURCE
|
|
_XOPEN_SOURCE=600
|
|
_FILE_OFFSET_BITS=64
|
|
_LARGEFILE64_SOURCE
|
|
)
|
|
|
|
if(CMAKE_SYSTEM_NAME MATCHES Darwin)
|
|
message(WARNING "Setting TOKU_ALLOW_DEPRECATED on Darwin. TODO: remove this.")
|
|
add_c_defines(TOKU_ALLOW_DEPRECATED)
|
|
endif()
|
|
|
|
## coverage
|
|
option(USE_GCOV "Use gcov for test coverage." OFF)
|
|
if (USE_GCOV)
|
|
if (NOT CMAKE_C_COMPILER_ID MATCHES GNU)
|
|
message(FATAL_ERROR "Must use the GNU compiler to compile for test coverage.")
|
|
endif ()
|
|
endif (USE_GCOV)
|
|
|
|
function(maybe_add_gcov_to_libraries)
|
|
if (USE_GCOV)
|
|
foreach(lib ${ARGN})
|
|
get_target_property(lib_compile_flags ${lib} COMPILE_FLAGS)
|
|
if (lib_compile_flags MATCHES lib_compile_flags-NOTFOUND)
|
|
set(lib_compile_flags "")
|
|
endif ()
|
|
get_target_property(lib_link_flags ${lib} LINK_FLAGS)
|
|
if (lib_link_flags MATCHES lib_link_flags-NOTFOUND)
|
|
set(lib_link_flags "")
|
|
endif ()
|
|
set_target_properties(${lib} PROPERTIES
|
|
COMPILE_FLAGS "${lib_compile_flags} --coverage"
|
|
LINK_FLAGS "${lib_link_flags} --coverage"
|
|
)
|
|
target_link_libraries(${lib} gcov)
|
|
endforeach(lib)
|
|
endif (USE_GCOV)
|
|
endfunction(maybe_add_gcov_to_libraries)
|
|
|
|
include(CheckCCompilerFlag)
|
|
|
|
## disable some warnings, if we can
|
|
function(set_flag_if_exists flag)
|
|
check_c_compiler_flag(${flag} HAVE_${flag})
|
|
if(HAVE_${flag})
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
|
|
endif()
|
|
endfunction(set_flag_if_exists)
|
|
|
|
foreach(flag -Wno-self-assign -Wno-missing-field-initializers -Wno-maybe-uninitialized)
|
|
set_flag_if_exists(${flag})
|
|
endforeach(flag)
|
|
|
|
## set extra debugging flags and preprocessor definitions
|
|
set(CMAKE_C_FLAGS_DEBUG "-g3 -ggdb -O0")
|
|
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG FORTIFY_SOURCE=2)
|
|
|
|
## set extra release flags
|
|
set(CMAKE_C_FLAGS_RELEASE "-O3")
|
|
|
|
## check how to do inter-procedural optimization
|
|
check_c_compiler_flag(-flto HAVE_CC_FLAG_FLTO)
|
|
check_c_compiler_flag(-ipo HAVE_CC_FLAG_IPO)
|
|
|
|
## add inter-procedural optimization flags
|
|
if(HAVE_CC_FLAG_FLTO)
|
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto")
|
|
elseif(HAVE_CC_FLAG_IPO)
|
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ip -ipo1")
|
|
endif()
|
|
|
|
if(CMAKE_C_COMPILER_ID MATCHES "^Intel$")
|
|
# make sure intel libs are linked statically
|
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-intel")
|
|
|
|
# disable some intel-specific warnings
|
|
set(intel_warnings
|
|
94 # allow arrays of length 0
|
|
589 # do not complain about goto that skips initialization
|
|
2259 # do not complain about "non-pointer conversion from int to u_int8_t (and other small types) may lose significant bits". this produces too many false positives
|
|
11000 # do not remark about multi-file optimizations, single-file optimizations, and object temp files
|
|
11001
|
|
11006
|
|
11003 # do not complain if some file was compiled without -ipo
|
|
)
|
|
string(REGEX REPLACE ";" "," intel_warning_string "${intel_warnings}")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -diag-disable ${intel_warning_string}")
|
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -debug all")
|
|
|
|
set(EXTRA_CFLAGS "-Wall -Wcheck")
|
|
else()
|
|
set(EXTRA_CFLAGS "-Wall -Wextra -Wcast-align -Wbad-function-cast -Wno-missing-noreturn -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wmissing-format-attribute -Wshadow")
|
|
endif()
|
|
|
|
## default warning levels
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
|
|
|
|
## function for adding -fvisibility=hidden to targets
|
|
function(set_targets_visibility_hidden)
|
|
if (NOT CMAKE_C_COMPILER_ID STREQUAL "Intel")
|
|
foreach(target ${ARGN})
|
|
get_target_property(flags ${target} COMPILE_FLAGS)
|
|
set_target_properties(${target} PROPERTIES
|
|
COMPILE_FLAGS "${COMPILE_FLAGS} -fvisibility=hidden")
|
|
endforeach(target)
|
|
endif ()
|
|
endfunction(set_targets_visibility_hidden)
|