CMakeLists.txt 9.3 KB
Newer Older
1
project (ClickHouse)
2
cmake_minimum_required (VERSION 2.6)
A
Alexey Milovidov 已提交
3

4 5
message(STATUS "Building for: ${CMAKE_SYSTEM} ${CMAKE_SYSTEM_PROCESSOR} ${CMAKE_LIBRARY_ARCHITECTURE}")

6
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
7
	# Require at least gcc 5
8
	if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5 AND NOT CMAKE_VERSION VERSION_LESS 2.8.9)
9 10
		message (FATAL_ERROR "GCC version must be at least 5! For example, if GCC 5 is available under gcc-5, g++-5 names, do the following: export CC=gcc-5 CXX=g++-5; rm -rf CMakeCache.txt CMakeFiles; and re run cmake or ./release.")
	endif ()
11
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
12 13 14 15 16 17 18
	# Require at least clang 3.8
	if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.8)
		message (FATAL_ERROR "Clang version must be at least 3.8!")
	endif ()
else ()
	message (WARNING "You are using an unsupported compiler! Compilation has only been tested with Clang 3.8+ and GCC 5+.")
endif ()
A
Alexey Milovidov 已提交
19

V
Vladimir Smirnov 已提交
20
if (APPLE)
21 22 23 24 25
	set (PLATFORM_EXTRA_CXX_FLAG "-Dexp10=__exp10") # Also needed for libc++
endif ()

if (CMAKE_SYSTEM MATCHES "FreeBSD")
	set (PLATFORM_EXTRA_CXX_FLAG "-DCLOCK_MONOTONIC_COARSE=CLOCK_MONOTONIC_FAST")
26
endif ()
27

28 29
cmake_policy (SET CMP0014 OLD) # Ignore warning about CMakeLists.txt in each directory
cmake_policy (SET CMP0012 NEW) # Don't dereference TRUE and FALSE
A
Alexey Milovidov 已提交
30

31 32 33 34 35
if (NOT CMAKE_BUILD_TYPE)
	message (STATUS "CMAKE_BUILD_TYPE is not set, set to default = RELWITHDEBINFO")
	set (CMAKE_BUILD_TYPE "RELWITHDEBINFO")
endif ()
message (STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE} )
A
Alexey Milovidov 已提交
36

37 38
# ASan - build type with address sanitizer
# UBSan - build type with undefined behaviour sanitizer
39
# TSan is not supported due to false positive errors in libstdc++ and necessity to rebuild libstdc++ with TSan
40
set (CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Debug;Release;MinSizeRel;ASan;UBSan" CACHE STRING "" FORCE)
A
Alexey Milovidov 已提交
41

42

43 44 45
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)")
	set (AARCH64 1)
endif ()
A
Alexey Milovidov 已提交
46

47 48 49
if (NOT AARCH64)
	set (MACHINE_FLAGS "-msse4 -mpopcnt")
endif ()
A
Alexey Milovidov 已提交
50

51
set (COMMON_WARNING_FLAGS "-Wall -Werror")
52
set (CXX_WARNING_FLAGS "-Wnon-virtual-dtor")
53

A
Alexey Milovidov 已提交
54
set (CXX11_ABI "ENABLE" CACHE STRING "Use C++11 ABI: DEFAULT, ENABLE, DISABLE")
55 56
option (TEST_COVERAGE "Enables flags for test coverage" OFF)
option (ENABLE_TESTS "Enables tests" ON)
57

58
option (USE_STATIC_LIBRARIES "Set to FALSE to use shared libraries" ON)
59 60 61
if (NOT $ENV{USE_STATIC_LIBRARIES})
	set (USE_STATIC_LIBRARIES FALSE)
endif ()
62

63 64


65 66 67 68 69
set (USE_INTERNAL_BOOST_LIBRARY TRUE CACHE BOOL "Set to FALSE to use system boost library instead of bundled")
if (NOT $ENV{USE_INTERNAL_BOOST_LIBRARY})
	set (USE_INTERNAL_BOOST_LIBRARY FALSE)
endif ()

70 71 72 73
if (USE_INTERNAL_BOOST_LIBRARY)
	add_definitions(-DBOOST_SYSTEM_NO_DEPRECATED)
endif ()

74
option (GLIBC_COMPATIBILITY "Set to TRUE to enable compatibility with older glibc libraries. Note that it is not compatible with ASan." OFF)
75 76
if ($ENV{GLIBC_COMPATIBILITY})
	set (GLIBC_COMPATIBILITY TRUE)
77 78
endif ()

79
option (ENABLE_LIBTCMALLOC "Set to TRUE to enable libtcmalloc." ON)
80 81 82 83
if (NOT $ENV{ENABLE_LIBTCMALLOC})
	set (ENABLE_LIBTCMALLOC FALSE)
endif ()

84
option (DEBUG_LIBTCMALLOC "Set to TRUE to use debug version of libtcmalloc." OFF)
85
if ($ENV{DEBUG_LIBTCMALLOC})
86
	set (DEBUG_LIBTCMALLOC TRUE)
87
endif ()
88 89

if (GLIBC_COMPATIBILITY)
90 91 92
	set (GLIBC_COMPATIBILITY_COMPILE_FLAGS   "-include ${ClickHouse_SOURCE_DIR}/libs/libcommon/include/common/glibc_compatibility.h")
	set (GLIBC_COMPATIBILITY_LINK_FLAGS      "-Wl,--wrap=memcpy")
endif ()
93

94
if (CXX11_ABI STREQUAL ENABLE)
95
	set (CXX11_ABI_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=1")
96
elseif (CXX11_ABI STREQUAL DISABLE)
97 98 99
	set (CXX11_ABI_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=0")
else ()
	set (CXX11_ABI_FLAGS "")
100
endif ()
101

102
set (CMAKE_BUILD_COLOR_MAKEFILE          ON)
103
set (CMAKE_CXX_FLAGS                     "-std=gnu++1y ${PLATFORM_EXTRA_CXX_FLAG} -fno-omit-frame-pointer ${COMMON_WARNING_FLAGS} ${CXX_WARNING_FLAGS} ${MACHINE_FLAGS} ${GLIBC_COMPATIBILITY_COMPILE_FLAGS} ${CXX11_ABI_FLAGS}")
104 105 106
set (CMAKE_CXX_FLAGS_RELEASE             "-O3 -DNDEBUG")
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO      "-O3 -g")
set (CMAKE_CXX_FLAGS_DEBUG               "-O0 -g3 -ggdb3 -fno-inline")
107

108
set (CMAKE_C_FLAGS                       "-fno-omit-frame-pointer ${COMMON_WARNING_FLAGS} ${MACHINE_FLAGS} ${GLIBC_COMPATIBILITY_COMPILE_FLAGS} ${CXX11_ABI_FLAGS}")
109 110 111
set (CMAKE_C_FLAGS_RELEASE               "-O3 -DNDEBUG")
set (CMAKE_C_FLAGS_RELWITHDEBINFO        "-O3 -g")
set (CMAKE_C_FLAGS_DEBUG                 "-O0 -g3 -ggdb3 -fno-inline")
112

113 114 115 116
if (NOT APPLE AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_SYSTEM MATCHES "FreeBSD"))
	set (CMAKE_EXE_LINKER_FLAGS          "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
endif ()

V
Vladimir Smirnov 已提交
117
if (NOT APPLE)
118
	set (CMAKE_EXE_LINKER_FLAGS          "${CMAKE_EXE_LINKER_FLAGS} ${GLIBC_COMPATIBILITY_LINK_FLAGS} ${CXX11_ABI_FLAGS}")
119
endif ()
A
Alexey Milovidov 已提交
120

121
# -fuse-ld=gold - fix linkage for gcc-5.4, gcc-6.1
122
# See more in http://stackoverflow.com/questions/37603238/fsanitize-not-using-gold-linker-in-gcc-6-1
123 124 125 126
set (CMAKE_CXX_FLAGS_ASAN                "-O3 -g -fsanitize=address -fno-omit-frame-pointer -fuse-ld=gold ${CXX11_ABI_FLAGS}")
set (CMAKE_CXX_FLAGS_UBSAN               "-O3 -g -fsanitize=undefined -fno-omit-frame-pointer ${CXX11_ABI_FLAGS}")
set (CMAKE_C_FLAGS_ASAN                  "-O3 -g -fsanitize=address -fno-omit-frame-pointer -fuse-ld=gold ${CXX11_ABI_FLAGS}")
set (CMAKE_C_FLAGS_UBSAN                 "-O3 -g -fsanitize=undefined -fno-omit-frame-pointer ${CXX11_ABI_FLAGS}")
127 128 129

# Flags for test coverage
if (TEST_COVERAGE)
130
	set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g -fprofile-arcs -ftest-coverage -fPIC -DIS_DEBUG ${CXX11_ABI_FLAGS}")
131 132 133 134 135
endif (TEST_COVERAGE)

# Run tests with "make check"
if (ENABLE_TESTS)
	message (STATUS "Tests are enabled")
136
	include (cmake/add_check.cmake)
137 138 139
endif (ENABLE_TESTS)

# Installation prefix
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
if (NOT CMAKE_SYSTEM MATCHES "FreeBSD")
	set (CMAKE_INSTALL_PREFIX /usr)
endif ()

include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libcityhash/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/liblz4/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libdivide/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libdouble-conversion/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libcpuid/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libzstd/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libfarmhash/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libmetrohash/src)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libsparsehash/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libre2/)
include_directories (BEFORE ${ClickHouse_BINARY_DIR}/contrib/libre2/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libzookeeper/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libtcmalloc/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libpoco/Foundation/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libpoco/Util/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libpoco/Net/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libpoco/NetSSL_OpenSSL/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libpoco/Data/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libpoco/Data/MySQL/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libpoco/Data/ODBC/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libpoco/Data/SQLite/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libpoco/Crypto/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libpoco/XML/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libpoco/JSON/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libpoco/MongoDB/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libpoco/Zip/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libboost/boost_1_62_0/)

172 173
if (USE_STATIC_LIBRARIES)
	include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/contrib/libzlib-ng/)
174
	include_directories (BEFORE ${ClickHouse_BINARY_DIR}/contrib/libzlib-ng/)
175 176
endif ()

177 178 179 180 181 182 183 184
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/libs/libcommon/include/)
include_directories (BEFORE ${ClickHouse_BINARY_DIR}/libs/libcommon/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/libs/libdaemon/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/libs/libpocoext/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/libs/libmysqlxx/include/)
include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/libs/libzkutil/include/)

include_directories (BEFORE ${ClickHouse_SOURCE_DIR}/dbms/include)
A
Alexey Milovidov 已提交
185 186 187 188 189

include_directories (/usr/local/include/)

link_directories (/usr/local/lib)

190 191
include (cmake/find_openssl.cmake)
include (cmake/find_icu4c.cmake)
192
include (cmake/find_boost.cmake)
193
include (cmake/find_libtool.cmake)
194
include (cmake/find_mysqlclient.cmake)
195
include (cmake/find_rt.cmake)
196

197
# Directory for Yandex specific files
198
set (CLICKHOUSE_PRIVATE_DIR ${ClickHouse_SOURCE_DIR}/private/)
199

A
Alexey Milovidov 已提交
200 201 202 203
add_subdirectory (contrib)
add_subdirectory (libs)
add_subdirectory (utils)
add_subdirectory (dbms)
204

205
if (EXISTS ${CLICKHOUSE_PRIVATE_DIR})
206
	add_subdirectory (private)
207
endif ()
208

209 210
message (STATUS "C_FLAGS:  =${CMAKE_C_FLAGS}")
message (STATUS "CXX_FLAGS:=${CMAKE_CXX_FLAGS}")
211 212

include (cmake/print_include_directories.cmake)