summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2014-02-03 15:22:39 +0100
committerSergei Golubchik <sergii@pisem.net>2014-02-03 15:22:39 +0100
commit72c20282db820b0b0818aea160a485bdca897eec (patch)
tree3089e022d958990fc0a405a38ba43ae00c87103c /CMakeLists.txt
parent5e1d5d9bc0bf9ea776bffe6c4914a84be920c0b2 (diff)
parent2acc01b3cfa27074f93016b893cda20fa0a3497f (diff)
downloadmariadb-git-72c20282db820b0b0818aea160a485bdca897eec.tar.gz
10.0-base merge
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt80
1 files changed, 80 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 47c92d27eb1..170d333fc37 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -176,6 +176,81 @@ MARK_AS_ADVANCED(CYBOZU BACKUP_TEST WITHOUT_SERVER DISABLE_SHARED)
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()
+
+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)
+
+ 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")
+ SET(WITH_ASAN_OK 1)
+ ENDIF()
+ ENDIF()
+
+ IF(NOT WITH_ASAN_OK)
+ MESSAGE(FATAL_ERROR "Do not know how to enable address sanitizer")
+ ENDIF()
+ENDIF()
+
+
OPTION(ENABLE_DEBUG_SYNC "Enable debug sync (debug builds only)" ON)
IF(ENABLE_DEBUG_SYNC)
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC")
@@ -261,6 +336,11 @@ ENDIF()
# Run platform tests
INCLUDE(configure.cmake)
+# Find header files from the bundled libraries
+# (jemalloc, yassl, readline, pcre, etc)
+# before the ones installed in the system
+SET(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
+
# Common defines and includes
ADD_DEFINITIONS(-DHAVE_CONFIG_H)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include)