2016-05-22 13:09:06 +00:00
project ( ClickHouse )
2016-02-07 21:58:58 +00:00
cmake_minimum_required ( VERSION 2.6 )
2016-05-22 22:41:03 +00:00
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" )
# require at least gcc 5
if ( CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5 )
2016-06-26 04:54:30 +00:00
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." )
2016-05-22 22:41:03 +00:00
endif ( )
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
# 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 ( )
2016-10-26 22:27:38 +00:00
if ( APPLE )
set ( APPLE_EXTRA_CXX_FLAG "-Dexp10=__exp10" ) # Also needed for libc++
endif ( )
2016-02-07 21:58:58 +00:00
# отключаем варнинг о том, что в каждой директории должен быть CMakeLists.txt
2016-05-27 20:18:34 +00:00
cmake_policy ( SET CMP0014 OLD )
cmake_policy ( SET CMP0012 NEW ) # Don't dereference TRUE and FALSE
2016-02-07 21:58:58 +00:00
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 } )
2016-07-28 14:14:18 +00:00
# ASan - build type with address sanitizer
# UBSan - build type with undefined behaviour sanitizer
2016-08-23 14:08:47 +00:00
# TSan is not supported due to false positive errors in libstdc++ and necessity to rebuild libstdc++ with TSan
set ( CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Debug;Release;MinSizeRel;ASan;UBSan" CACHE STRING "" FORCE )
2016-02-07 21:58:58 +00:00
2016-07-28 14:14:18 +00:00
2016-02-07 21:58:58 +00:00
IF ( CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)" )
SET ( AARCH64 1 )
ENDIF ( )
IF ( NOT AARCH64 )
SET ( MACHINE_FLAGS "-msse4 -mpopcnt" )
ENDIF ( )
2016-06-27 06:34:10 +00:00
SET ( COMMON_WARNING_FLAGS "-Wall -Werror" )
2016-08-25 21:55:02 +00:00
SET ( CXX_WARNING_FLAGS "-Wnon-virtual-dtor -Wold-style-cast" )
2016-06-27 06:34:10 +00:00
set ( GLIBC_COMPATIBILITY FALSE CACHE BOOL "Set to TRUE to enable compatibility with older glibc libraries" )
if ( $ENV{ GLIBC_COMPATIBILITY } )
set ( GLIBC_COMPATIBILITY TRUE )
endif ( )
if ( GLIBC_COMPATIBILITY )
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 ( )
2016-08-24 20:18:32 +00:00
if ( DISABLE_CXX11_ABI )
SET ( CXX11_ABI "-D_GLIBCXX_USE_CXX11_ABI=0" )
endif ( )
2016-06-27 06:34:10 +00:00
2016-02-07 21:58:58 +00:00
SET ( CMAKE_BUILD_COLOR_MAKEFILE ON )
2016-10-26 22:27:38 +00:00
SET ( CMAKE_CXX_FLAGS "-std=gnu++1y ${APPLE_EXTRA_CXX_FLAG} -fno-omit-frame-pointer ${COMMON_WARNING_FLAGS} ${CXX_WARNING_FLAGS} ${MACHINE_FLAGS} ${GLIBC_COMPATIBILITY_COMPILE_FLAGS} ${CXX11_ABI}" )
2016-08-25 15:11:38 +00:00
SET ( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" )
2016-08-25 14:58:01 +00:00
SET ( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g" )
2016-08-25 15:11:38 +00:00
SET ( CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -ggdb3 -fno-inline" )
2016-07-28 14:14:18 +00:00
2016-08-25 15:11:38 +00:00
SET ( CMAKE_C_FLAGS "-fno-omit-frame-pointer ${COMMON_WARNING_FLAGS} ${MACHINE_FLAGS} ${GLIBC_COMPATIBILITY_COMPILE_FLAGS} ${CXX11_ABI}" )
SET ( CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG" )
2016-08-25 14:58:01 +00:00
SET ( CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -g" )
2016-08-25 15:11:38 +00:00
SET ( CMAKE_C_FLAGS_DEBUG "-O0 -g3 -ggdb3 -fno-inline" )
2016-08-25 14:58:01 +00:00
2016-10-26 22:27:38 +00:00
if ( NOT APPLE )
SET ( CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ ${GLIBC_COMPATIBILITY_LINK_FLAGS} ${CXX11_ABI}" )
endif ( )
2016-02-07 21:58:58 +00:00
2016-10-25 16:46:25 +00:00
# -fuse-ld=gold - fix linkage for gcc-5.4, gcc-6.1
# see more in http://stackoverflow.com/questions/37603238/fsanitize-not-using-gold-linker-in-gcc-6-1
SET ( CMAKE_CXX_FLAGS_ASAN "-O3 -g -fsanitize=address -fno-omit-frame-pointer -fuse-ld=gold ${CXX11_ABI}" )
2016-08-24 20:18:32 +00:00
SET ( CMAKE_CXX_FLAGS_UBSAN "-O3 -g -fsanitize=undefined -fno-omit-frame-pointer ${CXX11_ABI}" )
2016-10-25 16:46:25 +00:00
SET ( CMAKE_C_FLAGS_ASAN "-O3 -g -fsanitize=address -fno-omit-frame-pointer -fuse-ld=gold ${CXX11_ABI}" )
2016-08-24 20:18:32 +00:00
SET ( CMAKE_C_FLAGS_UBSAN "-O3 -g -fsanitize=undefined -fno-omit-frame-pointer ${CXX11_ABI}" )
2016-07-28 14:14:18 +00:00
2016-03-03 14:00:57 +00:00
# Флаги для test coverage
IF ( TEST_COVERAGE )
2016-08-24 20:18:32 +00:00
SET ( CMAKE_CXX_FLAGS_DEBUG "-O0 -g -fprofile-arcs -ftest-coverage -fPIC -DIS_DEBUG ${CXX11_ABI}" )
2016-03-03 14:00:57 +00:00
ENDIF ( TEST_COVERAGE )
2016-02-07 21:58:58 +00:00
# Собирать тесты?
IF ( NOT DEFINED TESTS )
MESSAGE ( STATUS "Tests are enabled" )
SET ( TESTS YES )
ENDIF ( )
# тесты запускать с помощью "make check"
IF ( TESTS )
INCLUDE ( add.test.cmake )
ENDIF ( TESTS )
# Префикс для установки
SET ( CMAKE_INSTALL_PREFIX /usr )
2016-05-22 22:56:54 +00:00
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libcityhash/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/liblz4/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libdivide/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libdouble-conversion/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libcpuid/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libzstd/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libfarmhash/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libmetrohash/src )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libsparsehash/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libre2/ )
include_directories ( ${ ClickHouse_BINARY_DIR } /contrib/libre2/ )
2016-06-29 19:16:03 +00:00
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libzookeeper/include/ )
2016-10-24 05:40:00 +00:00
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libtcmalloc/include/ )
2016-05-22 22:56:54 +00:00
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libpoco/Foundation/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libpoco/Util/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libpoco/Net/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libpoco/NetSSL_OpenSSL/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libpoco/Data/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libpoco/Data/MySQL/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libpoco/Data/ODBC/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libpoco/Data/SQLite/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libpoco/Crypto/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libpoco/XML/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libpoco/JSON/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libpoco/MongoDB/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /contrib/libpoco/Zip/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /libs/libcommon/include/ )
2016-11-02 09:29:39 +00:00
include_directories ( ${ ClickHouse_BINARY_DIR } /libs/libcommon/include/ )
2016-05-22 22:56:54 +00:00
include_directories ( ${ ClickHouse_SOURCE_DIR } /libs/libdaemon/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /libs/libpocoext/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /libs/libmysqlxx/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /libs/libzkutil/include/ )
include_directories ( ${ ClickHouse_SOURCE_DIR } /dbms/include )
2016-02-07 21:58:58 +00:00
include_directories ( /usr/local/include/glib-2.0/ )
include_directories ( /usr/local/lib/glib-2.0/include/ )
include_directories ( /usr/include/glib-2.0/ )
2016-05-22 19:04:19 +00:00
include_directories ( /usr/lib64/glib-2.0/include/ )
2016-02-07 21:58:58 +00:00
IF ( AARCH64 )
include_directories ( /usr/lib/aarch64-linux-gnu/glib-2.0/include/ )
ELSE ( )
include_directories ( /usr/lib/x86_64-linux-gnu/glib-2.0/include/ )
ENDIF ( )
include_directories ( /usr/local/include/ )
link_directories ( /usr/local/lib )
2016-11-02 09:29:39 +00:00
# External libraries
# 1. openssl
include_directories ( "/usr/local/opt/openssl/include" )
set ( OPENSSL_HINTS "/usr/local/opt/openssl/lib" )
find_library ( LIBSSL libssl.a HINTS ${ OPENSSL_HINTS } )
find_library ( LIBCRYPTO libcrypto.a HINTS ${ OPENSSL_HINTS } )
set ( OPENSSL_LIBS ${ LIBSSL } ${ LIBCRYPTO } )
# 2. icu4c
include_directories ( "/usr/local/opt/icu4c/include" )
set ( ICU_HINTS "/usr/local/opt/icu4c/lib" )
find_library ( ICUI18N libicui18n.a HINTS ${ ICU_HINTS } )
find_library ( ICUUC libicuuc.a HINTS ${ ICU_HINTS } )
find_library ( ICUDATA libicudata.a HINTS ${ ICU_HINTS } )
set ( ICU_LIBS ${ ICUI18N } ${ ICUUC } ${ ICUDATA } )
2016-11-09 18:48:54 +00:00
# 3. boost
set ( BOOST_HINTS "/usr/local/opt/boost/lib" )
find_library ( BOOST_PROGRAM_OPTIONS_LIB libboost_program_options.a HINTS ${ BOOST_HINTS } )
find_library ( BOOST_SYSTEM_LIB libboost_system.a HINTS ${ BOOST_HINTS } )
find_library ( BOOST_FILESYSTEM_LIB libboost_filesystem.a HINTS ${ BOOST_HINTS } )
find_library ( BOOST_REGEX_LIB libboost_regex.a HINTS ${ BOOST_HINTS } )
find_library ( BOOST_THREAD_LIB libboost_thread.a HINTS ${ BOOST_HINTS } )
# 4. ltdl
set ( LTDL_HINTS "/usr/local/opt/libtool/lib" )
find_library ( LTDL_LIB libltdl.a HINTS ${ LTDL_HINTS } )
2016-06-26 04:17:49 +00:00
# Directory for Yandex specific files
SET ( CLICKHOUSE_PRIVATE_DIR ${ ClickHouse_SOURCE_DIR } /private/ )
2016-02-07 21:58:58 +00:00
add_subdirectory ( contrib )
add_subdirectory ( libs )
add_subdirectory ( utils )
add_subdirectory ( dbms )
2016-06-26 04:17:49 +00:00
IF ( EXISTS ${ CLICKHOUSE_PRIVATE_DIR } )
add_subdirectory ( private )
ENDIF ( )
2016-06-27 08:13:54 +00:00
message ( STATUS "C_FLAGS: =${CMAKE_C_FLAGS}" )
message ( STATUS "CXX_FLAGS:=${CMAKE_CXX_FLAGS}" )