diff options
author | Sergei Golubchik <serg@mariadb.org> | 2014-06-16 21:30:48 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2014-06-26 11:54:13 +0200 |
commit | 6c0e3ef4503c6121f7d5b6b07dcd2ee035e26032 (patch) | |
tree | 693231d79fec36224f6ec0cd74bb33b9e65b8fb9 | |
parent | afa4c36ca055328f52973d8b8d28a04520ccdc59 (diff) | |
download | mariadb-git-6c0e3ef4503c6121f7d5b6b07dcd2ee035e26032.tar.gz |
cmake cleanup: use MY_CHECK_AND_SET_COMPILER_FLAG.
move MY_CHECK_C_COMPILER_FLAG and MY_CHECK_CXX_COMPILER_FLAG
to a separate file, introduce MY_CHECK_AND_SET_COMPILER_FLAG,
use it where possible.
-rw-r--r-- | CMakeLists.txt | 75 | ||||
-rw-r--r-- | cmake/check_compiler_flag.cmake | 51 | ||||
-rw-r--r-- | cmake/os/Windows.cmake | 1 | ||||
-rw-r--r-- | cmake/os/WindowsCache.cmake | 1 |
4 files changed, 61 insertions, 67 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index e1129dc5cda..a5f2dc2a3ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -175,72 +175,21 @@ OPTION (WITH_UNIT_TESTS "Compile MySQL with unit tests" ON) MARK_AS_ADVANCED(CYBOZU) OPTION(NOT_FOR_DISTRIBUTION "Allow linking with GPLv2-incompatible system libraries. Only set it you never plan to distribute the resulting binaries" OFF) - -include(CheckCSourceCompiles) -include(CheckCXXSourceCompiles) -# We need some extra FAIL_REGEX patterns -# Note that CHECK_C_SOURCE_COMPILES is a misnomer, it will also link. -MACRO (MY_CHECK_C_COMPILER_FLAG FLAG RESULT) - SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") - SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}") - CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${RESULT} - FAIL_REGEX "argument unused during compilation" - FAIL_REGEX "unsupported .*option" - FAIL_REGEX "unknown .*option" - FAIL_REGEX "unrecognized .*option" - FAIL_REGEX "ignoring unknown option" - FAIL_REGEX "[Ww]arning: [Oo]ption" - ) - SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}") -ENDMACRO() - -MACRO (MY_CHECK_CXX_COMPILER_FLAG FLAG RESULT) - SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") - SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG}") - CHECK_CXX_SOURCE_COMPILES("int main(void) { return 0; }" ${RESULT} - FAIL_REGEX "argument unused during compilation" - FAIL_REGEX "unsupported .*option" - FAIL_REGEX "unknown .*option" - FAIL_REGEX "unrecognized .*option" - FAIL_REGEX "ignoring unknown option" - FAIL_REGEX "[Ww]arning: [Oo]ption" - ) - SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}") -ENDMACRO() + +INCLUDE(check_compiler_flag) OPTION(WITH_ASAN "Enable address sanitizer" OFF) IF (WITH_ASAN) # gcc 4.8.1 and new versions of clang - MY_CHECK_C_COMPILER_FLAG("-fsanitize=address" HAVE_C_FSANITIZE) - MY_CHECK_CXX_COMPILER_FLAG("-fsanitize=address" HAVE_CXX_FSANITIZE) - + MY_CHECK_AND_SET_COMPILER_FLAG("-fsanitize=address -O1 -Wno-error -fPIC" + DEBUG RELWITHDEBINFO) IF(HAVE_C_FSANITIZE AND HAVE_CXX_FSANITIZE) - # We switch on basic optimization also for debug builds. - # With optimization we may get some warnings, so we switch off -Werror - SET(CMAKE_C_FLAGS_DEBUG - "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address -O1 -Wno-error -fPIC") - SET(CMAKE_C_FLAGS_RELWITHDEBINFO - "${CMAKE_C_FLAGS_RELWITHDEBINFO} -fsanitize=address -fPIC") - SET(CMAKE_CXX_FLAGS_DEBUG - "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address -O1 -Wno-error -fPIC") - SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO - "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fsanitize=address -fPIC") SET(WITH_ASAN_OK 1) ELSE() # older versions of clang - MY_CHECK_C_COMPILER_FLAG("-faddress-sanitizer" HAVE_C_FADDRESS) - MY_CHECK_CXX_COMPILER_FLAG("-faddress-sanitizer" HAVE_CXX_FFADDRESS) - - IF(HAVE_C_FADDRESS AND HAVE_CXX_FFADDRESS) - # We switch on basic optimization also for debug builds. - SET(CMAKE_C_FLAGS_DEBUG - "${CMAKE_C_FLAGS_DEBUG} -faddress-sanitizer -O1 -fPIC") - SET(CMAKE_C_FLAGS_RELWITHDEBINFO - "${CMAKE_C_FLAGS_RELWITHDEBINFO} -faddress-sanitizer -fPIC") - SET(CMAKE_CXX_FLAGS_DEBUG - "${CMAKE_CXX_FLAGS_DEBUG} -faddress-sanitizer -O1 -fPIC") - SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO - "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -faddress-sanitizer -fPIC") + MY_CHECK_AND_SET_COMPILER_FLAG("-faddress-sanitizer -O1 -fPIC" + DEBUG RELWITHDEBINFO) + IF(HAVE_C_FADDRESS AND HAVE_CXX_FADDRESS) SET(WITH_ASAN_OK 1) ENDIF() ENDIF() @@ -258,15 +207,11 @@ IF(ENABLE_DEBUG_SYNC) ENDIF() OPTION(ENABLE_GCOV "Enable gcov (debug, Linux builds only)" OFF) -IF (ENABLE_GCOV AND NOT WIN32 AND NOT APPLE) - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage") - SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage") - SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage -lgcov") +IF (ENABLE_GCOV) + MY_CHECK_AND_SET_COMPILER_FLAG("-fprofile-arcs -ftest-coverage -lgcov" DEBUG) ENDIF() -MY_CHECK_C_COMPILER_FLAG(-ggdb3 HAVE_GGDB3) -SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -ggdb3") -SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb3") +MY_CHECK_AND_SET_COMPILER_FLAG(-ggdb3 DEBUG) OPTION(ENABLED_LOCAL_INFILE "If we should should enable LOAD DATA LOCAL by default" ${IF_WIN}) diff --git a/cmake/check_compiler_flag.cmake b/cmake/check_compiler_flag.cmake new file mode 100644 index 00000000000..25e4af23dd9 --- /dev/null +++ b/cmake/check_compiler_flag.cmake @@ -0,0 +1,51 @@ +include(CheckCSourceCompiles) +include(CheckCXXSourceCompiles) +# We need some extra FAIL_REGEX patterns +# Note that CHECK_C_SOURCE_COMPILES is a misnomer, it will also link. +SET(fail_patterns + FAIL_REGEX "argument unused during compilation" + FAIL_REGEX "unsupported .*option" + FAIL_REGEX "unknown .*option" + FAIL_REGEX "unrecognized .*option" + FAIL_REGEX "ignoring unknown option" + FAIL_REGEX "warning:.*ignored" + FAIL_REGEX "[Ww]arning: [Oo]ption" + ) + +MACRO (MY_CHECK_C_COMPILER_FLAG flag result) + SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}") + CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${result} + ${fail_patterns}) + SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}") +ENDMACRO() + +MACRO (MY_CHECK_CXX_COMPILER_FLAG flag result) + SET(SAVE_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}") + CHECK_CXX_SOURCE_COMPILES("int main(void) { return 0; }" ${result} + ${fail_patterns}) + SET(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}") +ENDMACRO() + +FUNCTION(MY_CHECK_AND_SET_COMPILER_FLAG flag) + # At the moment this is gcc-only. + # Let's avoid expensive compiler tests on Windows: + IF(WIN32) + RETURN() + ENDIF() + MY_CHECK_C_COMPILER_FLAG(${flag} HAVE_C_${flag}) + MY_CHECK_CXX_COMPILER_FLAG(${flag} HAVE_CXX_${flag}) + IF (HAVE_C_${flag} AND HAVE_CXX_${flag}) + IF(ARGN) + FOREACH(type ${ARGN}) + SET(CMAKE_C_FLAGS_${type} "${CMAKE_C_FLAGS_${type}} ${flag}" PARENT_SCOPE) + SET(CMAKE_CXX_FLAGS_${type} "${CMAKE_CXX_FLAGS_${type}} ${flag}" PARENT_SCOPE) + ENDFOREACH() + ELSE() + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}" PARENT_SCOPE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}" PARENT_SCOPE) + ENDIF() + ENDIF() +ENDFUNCTION() + diff --git a/cmake/os/Windows.cmake b/cmake/os/Windows.cmake index 254d9f6d946..53c3bad7fed 100644 --- a/cmake/os/Windows.cmake +++ b/cmake/os/Windows.cmake @@ -20,7 +20,6 @@ INCLUDE (CheckCXXSourceCompiles) INCLUDE (CheckStructHasMember) INCLUDE (CheckLibraryExists) INCLUDE (CheckFunctionExists) -INCLUDE (CheckCCompilerFlag) INCLUDE (CheckCSourceRuns) INCLUDE (CheckSymbolExists) INCLUDE (CheckTypeSize) diff --git a/cmake/os/WindowsCache.cmake b/cmake/os/WindowsCache.cmake index 1453cc55053..4786108ec8c 100644 --- a/cmake/os/WindowsCache.cmake +++ b/cmake/os/WindowsCache.cmake @@ -370,5 +370,4 @@ SET(HAVE_SYS_UTSNAME_H CACHE INTERNAL "") SET(HAVE_PTHREAD_ATTR_GETGUARDSIZE CACHE INTERNAL "") SET(HAVE_UCONTEXT_H CACHE INTERNAL "") SET(HAVE_SOCKPEERCRED CACHE INTERNAL "") -SET(HAVE_GGDB3 CACHE INTERNAL "") ENDIF(MSVC) |