2019-08-22 03:24:05 +00:00
|
|
|
cmake_minimum_required(VERSION 3.3)
|
|
|
|
|
2019-05-08 07:51:03 +00:00
|
|
|
foreach(policy
|
2019-08-28 20:49:37 +00:00
|
|
|
CMP0023
|
|
|
|
CMP0048 # CMake 3.0
|
|
|
|
CMP0074 # CMake 3.12
|
|
|
|
CMP0077
|
|
|
|
CMP0079
|
2019-05-08 07:51:03 +00:00
|
|
|
)
|
2019-08-28 20:49:37 +00:00
|
|
|
if(POLICY ${policy})
|
|
|
|
cmake_policy(SET ${policy} NEW)
|
|
|
|
endif()
|
2019-05-08 07:51:03 +00:00
|
|
|
endforeach()
|
|
|
|
|
2020-07-09 07:16:39 +00:00
|
|
|
# set default policy
|
|
|
|
foreach(default_policy_var_name
|
|
|
|
# make option() honor normal variables for BUILD_SHARED_LIBS:
|
|
|
|
# - re2
|
|
|
|
# - snappy
|
|
|
|
CMAKE_POLICY_DEFAULT_CMP0077
|
|
|
|
# Google Test from sources uses too old cmake, 2.6.x, and CMP0022 should
|
|
|
|
# set, to avoid using deprecated LINK_INTERFACE_LIBRARIES(_<CONFIG>)? over
|
|
|
|
# INTERFACE_LINK_LIBRARIES.
|
|
|
|
CMAKE_POLICY_DEFAULT_CMP0022
|
|
|
|
)
|
|
|
|
set(${default_policy_var_name} NEW)
|
|
|
|
endforeach()
|
|
|
|
|
2019-09-30 11:58:32 +00:00
|
|
|
project(ClickHouse)
|
2019-10-30 07:01:53 +00:00
|
|
|
|
2020-09-17 15:37:23 +00:00
|
|
|
# If turned off: e.g. when ENABLE_FOO is ON, but FOO tool was not found, the CMake will continue.
|
2020-08-14 15:44:04 +00:00
|
|
|
option(FAIL_ON_UNSUPPORTED_OPTIONS_COMBINATION
|
2020-09-15 20:17:24 +00:00
|
|
|
"Stop/Fail CMake configuration if some ENABLE_XXX option is defined (either ON or OFF)
|
|
|
|
but is not possible to satisfy" ON)
|
2020-09-15 19:32:42 +00:00
|
|
|
|
2020-08-14 15:44:04 +00:00
|
|
|
if(FAIL_ON_UNSUPPORTED_OPTIONS_COMBINATION)
|
|
|
|
set(RECONFIGURE_MESSAGE_LEVEL FATAL_ERROR)
|
|
|
|
else()
|
2021-05-22 23:28:50 +00:00
|
|
|
set(RECONFIGURE_MESSAGE_LEVEL WARNING)
|
2020-08-14 15:44:04 +00:00
|
|
|
endif()
|
|
|
|
|
2021-04-01 16:55:35 +00:00
|
|
|
enable_language(C CXX ASM)
|
|
|
|
|
2019-10-30 07:01:53 +00:00
|
|
|
include (cmake/arch.cmake)
|
2019-08-30 16:50:43 +00:00
|
|
|
include (cmake/target.cmake)
|
2019-10-30 07:01:53 +00:00
|
|
|
include (cmake/tools.cmake)
|
2020-03-08 20:17:49 +00:00
|
|
|
include (cmake/analysis.cmake)
|
2021-08-23 22:06:04 +00:00
|
|
|
include (cmake/git_status.cmake)
|
2019-08-30 16:50:43 +00:00
|
|
|
|
2019-08-28 20:49:37 +00:00
|
|
|
# Ignore export() since we don't use it,
|
|
|
|
# but it gets broken with a global targets via link_libraries()
|
|
|
|
macro (export)
|
|
|
|
endmacro ()
|
|
|
|
|
2018-08-29 00:03:07 +00:00
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/")
|
2019-03-28 10:36:49 +00:00
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS 1) # Write compile_commands.json
|
|
|
|
set(CMAKE_LINK_DEPENDS_NO_SHARED 1) # Do not relink all depended targets on .so
|
|
|
|
set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Debug;Release;MinSizeRel" CACHE STRING "" FORCE)
|
|
|
|
set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Generate debug library name with a postfix.") # To be consistent with CMakeLists from contrib libs.
|
2017-01-13 11:25:44 +00:00
|
|
|
|
2020-04-27 18:34:36 +00:00
|
|
|
# Enable the ability to organize targets into hierarchies of "folders" for capable GUI-based IDEs.
|
|
|
|
# For more info see https://cmake.org/cmake/help/latest/prop_gbl/USE_FOLDERS.html
|
2020-04-27 17:50:26 +00:00
|
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
|
2018-06-04 16:08:27 +00:00
|
|
|
# Check that submodules are present only if source was downloaded with git
|
2018-08-29 00:03:07 +00:00
|
|
|
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git" AND NOT EXISTS "${ClickHouse_SOURCE_DIR}/contrib/boost/boost")
|
2018-06-03 16:57:52 +00:00
|
|
|
message (FATAL_ERROR "Submodules are not initialized. Run\n\tgit submodule update --init --recursive")
|
2016-12-01 22:44:59 +00:00
|
|
|
endif ()
|
2016-05-22 22:41:03 +00:00
|
|
|
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/ccache.cmake)
|
2017-07-26 19:13:53 +00:00
|
|
|
|
2021-03-31 19:41:53 +00:00
|
|
|
# Take care to add prlimit in command line before ccache, or else ccache thinks that
|
|
|
|
# prlimit is compiler, and clang++ is its input file, and refuses to work with
|
|
|
|
# multiple inputs, e.g in ccache log:
|
|
|
|
# [2021-03-31T18:06:32.655327 36900] Command line: /usr/bin/ccache prlimit --as=10000000000 --data=5000000000 --cpu=600 /usr/bin/clang++-11 - ...... std=gnu++2a -MD -MT src/CMakeFiles/dbms.dir/Storages/MergeTree/IMergeTreeDataPart.cpp.o -MF src/CMakeFiles/dbms.dir/Storages/MergeTree/IMergeTreeDataPart.cpp.o.d -o src/CMakeFiles/dbms.dir/Storages/MergeTree/IMergeTreeDataPart.cpp.o -c ../src/Storages/MergeTree/IMergeTreeDataPart.cpp
|
|
|
|
#
|
|
|
|
# [2021-03-31T18:06:32.656704 36900] Multiple input files: /usr/bin/clang++-11 and ../src/Storages/MergeTree/IMergeTreeDataPart.cpp
|
2021-03-31 21:54:45 +00:00
|
|
|
#
|
|
|
|
# Another way would be to use --ccache-skip option before clang++-11 to make
|
|
|
|
# ccache ignore it.
|
2021-03-31 19:41:53 +00:00
|
|
|
option(ENABLE_CHECK_HEAVY_BUILDS "Don't allow C++ translation units to compile too long or to take too much memory while compiling." OFF)
|
2020-09-20 20:43:28 +00:00
|
|
|
if (ENABLE_CHECK_HEAVY_BUILDS)
|
2020-12-26 09:26:42 +00:00
|
|
|
# set DATA (since RSS does not work since 2.6.x+) to 2G
|
2020-12-26 14:26:50 +00:00
|
|
|
set (RLIMIT_DATA 5000000000)
|
2020-12-26 07:29:50 +00:00
|
|
|
# set VIRT (RLIMIT_AS) to 10G (DATA*10)
|
2020-12-26 14:26:50 +00:00
|
|
|
set (RLIMIT_AS 10000000000)
|
2021-04-02 00:09:14 +00:00
|
|
|
# set CPU time limit to 600 seconds
|
|
|
|
set (RLIMIT_CPU 600)
|
2021-04-06 16:46:24 +00:00
|
|
|
|
2020-12-26 14:26:50 +00:00
|
|
|
# gcc10/gcc10/clang -fsanitize=memory is too heavy
|
|
|
|
if (SANITIZE STREQUAL "memory" OR COMPILER_GCC)
|
|
|
|
set (RLIMIT_DATA 10000000000)
|
|
|
|
endif()
|
2021-04-06 16:46:24 +00:00
|
|
|
|
|
|
|
set (CMAKE_CXX_COMPILER_LAUNCHER prlimit --as=${RLIMIT_AS} --data=${RLIMIT_DATA} --cpu=${RLIMIT_CPU} ${CMAKE_CXX_COMPILER_LAUNCHER})
|
2020-09-20 20:43:28 +00:00
|
|
|
endif ()
|
|
|
|
|
2017-04-12 18:41:53 +00:00
|
|
|
if (NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "None")
|
2020-04-30 14:41:22 +00:00
|
|
|
set (CMAKE_BUILD_TYPE "RelWithDebInfo")
|
|
|
|
message (STATUS "CMAKE_BUILD_TYPE is not set, set to default = ${CMAKE_BUILD_TYPE}")
|
2016-12-01 22:44:59 +00:00
|
|
|
endif ()
|
2018-08-29 15:54:00 +00:00
|
|
|
message (STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
|
2016-02-07 21:58:58 +00:00
|
|
|
|
2020-04-30 14:41:22 +00:00
|
|
|
string (TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC)
|
2018-08-08 03:37:35 +00:00
|
|
|
|
2020-09-15 20:17:24 +00:00
|
|
|
option(USE_STATIC_LIBRARIES "Disable to use shared libraries" ON)
|
|
|
|
option(MAKE_STATIC_LIBRARIES "Disable to make shared libraries" ${USE_STATIC_LIBRARIES})
|
2020-09-15 19:32:42 +00:00
|
|
|
|
2018-08-30 00:20:02 +00:00
|
|
|
if (NOT MAKE_STATIC_LIBRARIES)
|
2020-09-15 20:17:24 +00:00
|
|
|
# DEVELOPER ONLY.
|
|
|
|
# Faster linking if turned on.
|
|
|
|
option(SPLIT_SHARED_LIBRARIES "Keep all internal libraries as separate .so files")
|
|
|
|
|
|
|
|
option(CLICKHOUSE_SPLIT_BINARY
|
|
|
|
"Make several binaries (clickhouse-server, clickhouse-client etc.) instead of one bundled")
|
2018-08-30 00:20:02 +00:00
|
|
|
endif ()
|
|
|
|
|
2019-06-18 22:53:13 +00:00
|
|
|
if (MAKE_STATIC_LIBRARIES AND SPLIT_SHARED_LIBRARIES)
|
2019-06-18 22:53:32 +00:00
|
|
|
message(FATAL_ERROR "Defining SPLIT_SHARED_LIBRARIES=1 without MAKE_STATIC_LIBRARIES=0 has no effect.")
|
2019-06-18 17:10:25 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if (NOT MAKE_STATIC_LIBRARIES AND SPLIT_SHARED_LIBRARIES)
|
2019-04-24 09:06:28 +00:00
|
|
|
set(BUILD_SHARED_LIBS 1 CACHE INTERNAL "")
|
2018-08-30 00:20:02 +00:00
|
|
|
endif ()
|
|
|
|
|
|
|
|
if (USE_STATIC_LIBRARIES)
|
|
|
|
list(REVERSE CMAKE_FIND_LIBRARY_SUFFIXES)
|
|
|
|
endif ()
|
|
|
|
|
2020-09-15 20:17:24 +00:00
|
|
|
# Implies ${WITH_COVERAGE}
|
2020-09-17 15:37:23 +00:00
|
|
|
option (ENABLE_FUZZING "Fuzzy testing using libfuzzer" OFF)
|
2019-09-22 10:34:09 +00:00
|
|
|
|
|
|
|
if (ENABLE_FUZZING)
|
|
|
|
message (STATUS "Fuzzing instrumentation enabled")
|
|
|
|
set (WITH_COVERAGE ON)
|
2020-04-25 07:12:38 +00:00
|
|
|
set (FUZZER "libfuzzer")
|
2019-09-22 10:34:09 +00:00
|
|
|
endif()
|
|
|
|
|
2020-12-15 19:59:07 +00:00
|
|
|
# Global libraries
|
|
|
|
# See:
|
|
|
|
# - default_libs.cmake
|
|
|
|
# - sanitize.cmake
|
|
|
|
add_library(global-libs INTERFACE)
|
|
|
|
|
2020-04-25 07:12:38 +00:00
|
|
|
include (cmake/fuzzer.cmake)
|
2018-08-08 03:37:35 +00:00
|
|
|
include (cmake/sanitize.cmake)
|
2016-02-07 21:58:58 +00:00
|
|
|
|
2020-02-26 13:47:46 +00:00
|
|
|
if (CMAKE_GENERATOR STREQUAL "Ninja" AND NOT DISABLE_COLORED_BUILD)
|
2018-06-08 16:26:03 +00:00
|
|
|
# Turn on colored output. https://github.com/ninja-build/ninja/wiki/FAQ
|
2018-07-10 16:34:18 +00:00
|
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always")
|
|
|
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color=always")
|
2018-06-08 16:26:03 +00:00
|
|
|
endif ()
|
|
|
|
|
2020-01-10 10:25:14 +00:00
|
|
|
include (cmake/add_warning.cmake)
|
|
|
|
|
2018-03-02 00:17:25 +00:00
|
|
|
if (NOT MSVC)
|
2020-05-09 22:59:34 +00:00
|
|
|
set (COMMON_WARNING_FLAGS "${COMMON_WARNING_FLAGS} -Wall") # -Werror and many more is also added inside cmake/warnings.cmake
|
2018-03-02 00:17:25 +00:00
|
|
|
endif ()
|
|
|
|
|
2019-06-27 17:37:24 +00:00
|
|
|
if (COMPILER_CLANG)
|
2017-12-13 19:07:12 +00:00
|
|
|
# clang: warning: argument unused during compilation: '-specs=/usr/share/dpkg/no-pie-compile.specs' [-Wunused-command-line-argument]
|
2017-12-25 16:01:03 +00:00
|
|
|
set (COMMON_WARNING_FLAGS "${COMMON_WARNING_FLAGS} -Wno-unused-command-line-argument")
|
2019-07-29 22:26:44 +00:00
|
|
|
# generate ranges for fast "addr2line" search
|
|
|
|
if (NOT CMAKE_BUILD_TYPE_UC STREQUAL "RELEASE")
|
|
|
|
set(COMPILER_FLAGS "${COMPILER_FLAGS} -gdwarf-aranges")
|
|
|
|
endif ()
|
2017-11-29 15:56:29 +00:00
|
|
|
endif ()
|
2016-06-27 06:34:10 +00:00
|
|
|
|
2020-09-19 16:42:36 +00:00
|
|
|
# If turned `ON`, assumes the user has either the system GTest library or the bundled one.
|
|
|
|
option(ENABLE_TESTS "Provide unit_test_dbms target with Google.Test unit tests" ON)
|
2021-04-28 04:32:23 +00:00
|
|
|
option(ENABLE_EXAMPLES "Build all example programs in 'examples' subdirectories" OFF)
|
2016-06-27 06:34:10 +00:00
|
|
|
|
2021-05-08 12:22:29 +00:00
|
|
|
if (OS_LINUX AND (ARCH_AMD64 OR ARCH_AARCH64) AND NOT UNBUNDLED AND MAKE_STATIC_LIBRARIES AND NOT SPLIT_SHARED_LIBRARIES AND CMAKE_VERSION VERSION_GREATER "3.9.0")
|
|
|
|
# Only for Linux, x86_64 or aarch64.
|
2020-09-15 20:17:24 +00:00
|
|
|
option(GLIBC_COMPATIBILITY "Enable compatibility with older glibc libraries." ON)
|
2020-08-14 15:44:04 +00:00
|
|
|
elseif(GLIBC_COMPATIBILITY)
|
|
|
|
message (${RECONFIGURE_MESSAGE_LEVEL} "Glibc compatibility cannot be enabled in current configuration")
|
2019-10-13 16:06:54 +00:00
|
|
|
endif ()
|
2019-04-11 18:58:31 +00:00
|
|
|
|
2019-10-13 16:06:54 +00:00
|
|
|
if (NOT CMAKE_VERSION VERSION_GREATER "3.9.0")
|
|
|
|
message (WARNING "CMake version must be greater than 3.9.0 for production builds.")
|
2017-09-16 22:41:20 +00:00
|
|
|
endif ()
|
2017-01-18 12:41:47 +00:00
|
|
|
|
2019-08-22 03:24:05 +00:00
|
|
|
# Make sure the final executable has symbols exported
|
|
|
|
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -rdynamic")
|
|
|
|
|
2021-06-07 21:56:32 +00:00
|
|
|
find_program (OBJCOPY_PATH NAMES "llvm-objcopy" "llvm-objcopy-12" "llvm-objcopy-11" "llvm-objcopy-10" "llvm-objcopy-9" "llvm-objcopy-8" "objcopy")
|
2021-06-26 13:39:02 +00:00
|
|
|
|
|
|
|
if (NOT OBJCOPY_PATH AND OS_DARWIN)
|
|
|
|
find_program (BREW_PATH NAMES "brew")
|
|
|
|
if (BREW_PATH)
|
|
|
|
execute_process (COMMAND ${BREW_PATH} --prefix llvm ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE LLVM_PREFIX)
|
|
|
|
if (LLVM_PREFIX)
|
|
|
|
find_program (OBJCOPY_PATH NAMES "llvm-objcopy" PATHS "${LLVM_PREFIX}/bin" NO_DEFAULT_PATH)
|
|
|
|
endif ()
|
|
|
|
if (NOT OBJCOPY_PATH)
|
|
|
|
execute_process (COMMAND ${BREW_PATH} --prefix binutils ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE BINUTILS_PREFIX)
|
|
|
|
if (BINUTILS_PREFIX)
|
|
|
|
find_program (OBJCOPY_PATH NAMES "objcopy" PATHS "${BINUTILS_PREFIX}/bin" NO_DEFAULT_PATH)
|
|
|
|
endif ()
|
|
|
|
endif ()
|
|
|
|
endif ()
|
|
|
|
endif ()
|
|
|
|
|
2021-06-07 21:56:32 +00:00
|
|
|
if (OBJCOPY_PATH)
|
2021-06-26 13:39:02 +00:00
|
|
|
message (STATUS "Using objcopy: ${OBJCOPY_PATH}")
|
2021-06-07 21:56:32 +00:00
|
|
|
else ()
|
2021-06-26 13:39:02 +00:00
|
|
|
message (FATAL_ERROR "Cannot find objcopy.")
|
2020-08-08 03:42:42 +00:00
|
|
|
endif ()
|
|
|
|
|
2020-08-09 23:58:09 +00:00
|
|
|
if (OS_DARWIN)
|
2021-06-07 21:56:32 +00:00
|
|
|
# The `-all_load` flag forces loading of all symbols from all libraries,
|
|
|
|
# and leads to multiply-defined symbols. This flag allows force loading
|
|
|
|
# from a _specific_ library, which is what we need.
|
|
|
|
set(WHOLE_ARCHIVE -force_load)
|
|
|
|
# The `-noall_load` flag is the default and now obsolete.
|
|
|
|
set(NO_WHOLE_ARCHIVE "")
|
2020-08-09 23:58:09 +00:00
|
|
|
else ()
|
|
|
|
set(WHOLE_ARCHIVE --whole-archive)
|
|
|
|
set(NO_WHOLE_ARCHIVE --no-whole-archive)
|
|
|
|
endif ()
|
|
|
|
|
2020-09-19 16:42:36 +00:00
|
|
|
# Ignored if `lld` is used
|
|
|
|
option(ADD_GDB_INDEX_FOR_GOLD "Add .gdb-index to resulting binaries for gold linker.")
|
2020-09-15 20:17:24 +00:00
|
|
|
|
2019-09-16 11:00:00 +00:00
|
|
|
if (NOT CMAKE_BUILD_TYPE_UC STREQUAL "RELEASE")
|
2021-01-01 15:52:02 +00:00
|
|
|
# Can be lld or ld-lld.
|
2021-01-01 06:36:42 +00:00
|
|
|
if (LINKER_NAME MATCHES "lld$")
|
2019-09-17 09:49:27 +00:00
|
|
|
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gdb-index")
|
|
|
|
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gdb-index")
|
|
|
|
message (STATUS "Adding .gdb-index via --gdb-index linker option.")
|
2019-09-17 09:53:12 +00:00
|
|
|
# we use another tool for gdb-index, because gold linker removes section .debug_aranges, which used inside clickhouse stacktraces
|
|
|
|
# http://sourceware-org.1504.n7.nabble.com/gold-No-debug-aranges-section-when-linking-with-gdb-index-td540965.html#a556932
|
2021-01-01 06:36:42 +00:00
|
|
|
elseif (LINKER_NAME MATCHES "gold$" AND ADD_GDB_INDEX_FOR_GOLD)
|
2019-09-17 09:49:27 +00:00
|
|
|
find_program (GDB_ADD_INDEX_EXE NAMES "gdb-add-index" DOC "Path to gdb-add-index executable")
|
|
|
|
if (NOT GDB_ADD_INDEX_EXE)
|
|
|
|
set (USE_GDB_ADD_INDEX 0)
|
|
|
|
message (WARNING "Cannot add gdb index to binaries, because gold linker is used, but gdb-add-index executable not found.")
|
|
|
|
else()
|
|
|
|
set (USE_GDB_ADD_INDEX 1)
|
|
|
|
message (STATUS "gdb-add-index found: ${GDB_ADD_INDEX_EXE}")
|
|
|
|
endif()
|
|
|
|
endif ()
|
2019-09-16 11:00:00 +00:00
|
|
|
endif()
|
|
|
|
|
2021-01-07 01:03:53 +00:00
|
|
|
# Create BuildID when using lld. For other linkers it is created by default.
|
|
|
|
if (LINKER_NAME MATCHES "lld$")
|
|
|
|
# SHA1 is not cryptographically secure but it is the best what lld is offering.
|
|
|
|
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id=sha1")
|
|
|
|
endif ()
|
|
|
|
|
2021-01-07 02:56:57 +00:00
|
|
|
# Add a section with the hash of the compiled machine code for integrity checks.
|
|
|
|
# Only for official builds, because adding a section can be time consuming (rewrite of several GB).
|
2021-01-08 12:22:34 +00:00
|
|
|
# And cross compiled binaries are not supported (since you cannot execute clickhouse hash-binary)
|
|
|
|
if (OBJCOPY_PATH AND YANDEX_OFFICIAL_BUILD AND (NOT CMAKE_TOOLCHAIN_FILE))
|
2021-01-07 02:56:57 +00:00
|
|
|
set (USE_BINARY_HASH 1)
|
|
|
|
endif ()
|
|
|
|
|
2019-01-11 12:40:19 +00:00
|
|
|
cmake_host_system_information(RESULT AVAILABLE_PHYSICAL_MEMORY QUERY AVAILABLE_PHYSICAL_MEMORY) # Not available under freebsd
|
2020-09-15 20:17:24 +00:00
|
|
|
|
2020-09-19 16:42:36 +00:00
|
|
|
|
2019-01-11 12:40:19 +00:00
|
|
|
if(NOT AVAILABLE_PHYSICAL_MEMORY OR AVAILABLE_PHYSICAL_MEMORY GREATER 8000)
|
2020-09-19 16:42:36 +00:00
|
|
|
# Less `/tmp` usage, more RAM usage.
|
|
|
|
option(COMPILER_PIPE "-pipe compiler option" ON)
|
2019-01-11 12:40:19 +00:00
|
|
|
endif()
|
2020-09-17 15:09:59 +00:00
|
|
|
|
2019-01-11 12:40:19 +00:00
|
|
|
if(COMPILER_PIPE)
|
|
|
|
set(COMPILER_FLAGS "${COMPILER_FLAGS} -pipe")
|
|
|
|
else()
|
|
|
|
message(STATUS "Disabling compiler -pipe option (have only ${AVAILABLE_PHYSICAL_MEMORY} mb of memory)")
|
|
|
|
endif()
|
2017-01-17 14:03:37 +00:00
|
|
|
|
2021-03-14 11:08:08 +00:00
|
|
|
include(cmake/cpu_features.cmake)
|
2017-01-27 19:55:33 +00:00
|
|
|
|
2021-04-24 22:29:48 +00:00
|
|
|
# Asynchronous unwind tables are needed for Query Profiler.
|
|
|
|
# They are already by default on some platforms but possibly not on all platforms.
|
|
|
|
# Enable it explicitly.
|
|
|
|
set (COMPILER_FLAGS "${COMPILER_FLAGS} -fasynchronous-unwind-tables")
|
|
|
|
|
2021-03-29 10:52:09 +00:00
|
|
|
if (${CMAKE_VERSION} VERSION_LESS "3.12.4")
|
|
|
|
# CMake < 3.12 doesn't support setting 20 as a C++ standard version.
|
|
|
|
# We will add C++ standard controlling flag in CMAKE_CXX_FLAGS manually for now.
|
|
|
|
|
|
|
|
if (COMPILER_GCC OR COMPILER_CLANG)
|
|
|
|
# to make numeric_limits<__int128> works with GCC
|
|
|
|
set (_CXX_STANDARD "gnu++2a")
|
|
|
|
else ()
|
|
|
|
set (_CXX_STANDARD "c++2a")
|
|
|
|
endif ()
|
2020-09-15 20:17:24 +00:00
|
|
|
|
2021-03-29 10:52:09 +00:00
|
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${_CXX_STANDARD}")
|
|
|
|
else ()
|
|
|
|
set (CMAKE_CXX_STANDARD 20)
|
|
|
|
set (CMAKE_CXX_EXTENSIONS ON) # Same as gnu++2a (ON) vs c++2a (OFF): https://cmake.org/cmake/help/latest/prop_tgt/CXX_EXTENSIONS.html
|
|
|
|
set (CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
endif ()
|
2020-08-19 18:02:53 +00:00
|
|
|
|
2021-03-29 18:05:00 +00:00
|
|
|
set (CMAKE_C_STANDARD 11)
|
|
|
|
set (CMAKE_C_EXTENSIONS ON)
|
|
|
|
set (CMAKE_C_STANDARD_REQUIRED ON)
|
2017-11-02 21:30:27 +00:00
|
|
|
|
2019-07-12 17:22:20 +00:00
|
|
|
if (COMPILER_GCC OR COMPILER_CLANG)
|
|
|
|
# Enable C++14 sized global deallocation functions. It should be enabled by setting -std=c++14 but I'm not sure.
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsized-deallocation")
|
|
|
|
endif ()
|
|
|
|
|
2021-03-03 19:41:20 +00:00
|
|
|
# falign-functions=32 prevents from random performance regressions with the code change. Thus, providing more stable
|
|
|
|
# benchmarks.
|
|
|
|
if (COMPILER_GCC OR COMPILER_CLANG)
|
|
|
|
set(COMPILER_FLAGS "${COMPILER_FLAGS} -falign-functions=32")
|
|
|
|
endif ()
|
|
|
|
|
2020-09-15 20:17:24 +00:00
|
|
|
# Compiler-specific coverage flags e.g. -fcoverage-mapping for gcc
|
2020-09-17 15:09:59 +00:00
|
|
|
option(WITH_COVERAGE "Profile the resulting binary/binaries" OFF)
|
2020-03-18 18:54:27 +00:00
|
|
|
|
2020-05-08 14:11:19 +00:00
|
|
|
if (WITH_COVERAGE AND COMPILER_CLANG)
|
|
|
|
set(COMPILER_FLAGS "${COMPILER_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
|
|
|
|
# If we want to disable coverage for specific translation units
|
|
|
|
set(WITHOUT_COVERAGE "-fno-profile-instr-generate -fno-coverage-mapping")
|
2019-06-27 17:37:24 +00:00
|
|
|
endif()
|
2020-03-18 18:54:27 +00:00
|
|
|
|
2020-05-08 14:11:19 +00:00
|
|
|
if (WITH_COVERAGE AND COMPILER_GCC)
|
|
|
|
set(COMPILER_FLAGS "${COMPILER_FLAGS} -fprofile-arcs -ftest-coverage")
|
|
|
|
set(COVERAGE_OPTION "-lgcov")
|
|
|
|
set(WITHOUT_COVERAGE "-fno-profile-arcs -fno-test-coverage")
|
2019-06-27 17:37:24 +00:00
|
|
|
endif()
|
|
|
|
|
2020-12-04 02:15:44 +00:00
|
|
|
set(COMPILER_FLAGS "${COMPILER_FLAGS}")
|
|
|
|
|
2016-12-01 22:44:59 +00:00
|
|
|
set (CMAKE_BUILD_COLOR_MAKEFILE ON)
|
2019-12-09 13:28:45 +00:00
|
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILER_FLAGS} ${PLATFORM_EXTRA_CXX_FLAG} ${COMMON_WARNING_FLAGS} ${CXX_WARNING_FLAGS}")
|
2018-01-15 18:57:10 +00:00
|
|
|
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 ${CMAKE_CXX_FLAGS_ADD}")
|
|
|
|
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g3 -ggdb3 -fno-inline ${CMAKE_CXX_FLAGS_ADD}")
|
2016-07-28 14:14:18 +00:00
|
|
|
|
2019-12-09 13:28:45 +00:00
|
|
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMPILER_FLAGS} ${COMMON_WARNING_FLAGS} ${CMAKE_C_FLAGS_ADD}")
|
2018-01-15 18:57:10 +00:00
|
|
|
set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 ${CMAKE_C_FLAGS_ADD}")
|
|
|
|
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g3 -ggdb3 -fno-inline ${CMAKE_C_FLAGS_ADD}")
|
2016-08-25 14:58:01 +00:00
|
|
|
|
2019-12-11 18:08:09 +00:00
|
|
|
if (COMPILER_CLANG)
|
2020-03-06 13:31:27 +00:00
|
|
|
if (OS_DARWIN)
|
2020-04-27 17:53:15 +00:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-U,_inside_main")
|
2020-03-06 13:31:27 +00:00
|
|
|
endif()
|
2020-04-22 09:14:08 +00:00
|
|
|
|
|
|
|
# Display absolute paths in error messages. Otherwise KDevelop fails to navigate to correct file and opens a new file instead.
|
2020-05-12 02:12:08 +00:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-absolute-paths")
|
|
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-absolute-paths")
|
2020-04-29 13:43:42 +00:00
|
|
|
|
2020-08-13 23:07:39 +00:00
|
|
|
if (NOT ENABLE_TESTS AND NOT SANITIZE)
|
2020-09-15 20:17:24 +00:00
|
|
|
# https://clang.llvm.org/docs/ThinLTO.html
|
|
|
|
# Applies to clang only.
|
|
|
|
# Disabled when building with tests or sanitizers.
|
2020-09-17 15:09:59 +00:00
|
|
|
option(ENABLE_THINLTO "Clang-specific link time optimization" ON)
|
2020-08-13 23:07:39 +00:00
|
|
|
endif()
|
2020-05-02 13:50:57 +00:00
|
|
|
|
2020-10-05 06:01:51 +00:00
|
|
|
# Set new experimental pass manager, it's a performance, build time and binary size win.
|
|
|
|
# Can be removed after https://reviews.llvm.org/D66490 merged and released to at least two versions of clang.
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexperimental-new-pass-manager")
|
|
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fexperimental-new-pass-manager")
|
|
|
|
|
2020-09-15 20:17:24 +00:00
|
|
|
# We cannot afford to use LTO when compiling unit tests, and it's not enough
|
2020-04-29 13:43:42 +00:00
|
|
|
# to only supply -fno-lto at the final linking stage. So we disable it
|
|
|
|
# completely.
|
2020-05-02 13:50:57 +00:00
|
|
|
if (ENABLE_THINLTO AND NOT ENABLE_TESTS AND NOT SANITIZE)
|
2020-04-29 13:43:42 +00:00
|
|
|
# Link time optimization
|
2020-10-01 19:22:14 +00:00
|
|
|
set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -flto=thin")
|
|
|
|
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -flto=thin")
|
|
|
|
set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} -flto=thin")
|
2020-08-14 15:44:04 +00:00
|
|
|
elseif (ENABLE_THINLTO)
|
|
|
|
message (${RECONFIGURE_MESSAGE_LEVEL} "Cannot enable ThinLTO")
|
2020-04-29 13:43:42 +00:00
|
|
|
endif ()
|
|
|
|
|
|
|
|
# Always prefer llvm tools when using clang. For instance, we cannot use GNU ar when llvm LTO is enabled
|
2021-03-09 14:24:12 +00:00
|
|
|
find_program (LLVM_AR_PATH NAMES "llvm-ar" "llvm-ar-12" "llvm-ar-11" "llvm-ar-10" "llvm-ar-9" "llvm-ar-8")
|
2020-09-15 20:17:24 +00:00
|
|
|
|
2020-04-30 12:15:30 +00:00
|
|
|
if (LLVM_AR_PATH)
|
|
|
|
message(STATUS "Using llvm-ar: ${LLVM_AR_PATH}.")
|
|
|
|
set (CMAKE_AR ${LLVM_AR_PATH})
|
2020-05-01 13:44:49 +00:00
|
|
|
else ()
|
|
|
|
message(WARNING "Cannot find llvm-ar. System ar will be used instead. It does not work with ThinLTO.")
|
2020-04-30 12:15:30 +00:00
|
|
|
endif ()
|
|
|
|
|
2021-03-09 14:24:12 +00:00
|
|
|
find_program (LLVM_RANLIB_PATH NAMES "llvm-ranlib" "llvm-ranlib-12" "llvm-ranlib-11" "llvm-ranlib-10" "llvm-ranlib-9" "llvm-ranlib-8")
|
2020-09-17 15:09:59 +00:00
|
|
|
|
2020-04-30 12:15:30 +00:00
|
|
|
if (LLVM_RANLIB_PATH)
|
|
|
|
message(STATUS "Using llvm-ranlib: ${LLVM_RANLIB_PATH}.")
|
|
|
|
set (CMAKE_RANLIB ${LLVM_RANLIB_PATH})
|
2020-05-01 13:44:49 +00:00
|
|
|
else ()
|
|
|
|
message(WARNING "Cannot find llvm-ranlib. System ranlib will be used instead. It does not work with ThinLTO.")
|
2020-04-30 12:15:30 +00:00
|
|
|
endif ()
|
2020-09-17 15:09:59 +00:00
|
|
|
|
2020-08-13 23:07:39 +00:00
|
|
|
elseif (ENABLE_THINLTO)
|
|
|
|
message (${RECONFIGURE_MESSAGE_LEVEL} "ThinLTO is only available with CLang")
|
2019-12-11 18:08:09 +00:00
|
|
|
endif ()
|
|
|
|
|
2020-09-17 15:37:23 +00:00
|
|
|
# Turns on all external libs like s3, kafka, ODBC, ...
|
|
|
|
option(ENABLE_LIBRARIES "Enable all external libraries by default" ON)
|
2020-09-15 20:17:24 +00:00
|
|
|
|
2021-08-15 06:52:55 +00:00
|
|
|
# We recommend avoiding this mode for production builds because we can't guarantee
|
|
|
|
# all needed libraries exist in your system.
|
2020-09-15 20:17:24 +00:00
|
|
|
# This mode exists for enthusiastic developers who are searching for trouble.
|
2021-08-15 06:52:55 +00:00
|
|
|
# The whole idea of using unknown version of libraries from the OS distribution is deeply flawed.
|
2020-09-15 20:17:24 +00:00
|
|
|
# Useful for maintainers of OS packages.
|
2020-09-17 15:09:59 +00:00
|
|
|
option (UNBUNDLED "Use system libraries instead of ones in contrib/" OFF)
|
2018-12-28 03:24:03 +00:00
|
|
|
|
2019-07-09 21:16:04 +00:00
|
|
|
if (UNBUNDLED)
|
2020-09-15 20:17:24 +00:00
|
|
|
set(NOT_UNBUNDLED OFF)
|
2019-07-09 21:16:04 +00:00
|
|
|
else ()
|
2020-09-15 20:17:24 +00:00
|
|
|
set(NOT_UNBUNDLED ON)
|
2019-07-09 21:16:04 +00:00
|
|
|
endif ()
|
2019-08-28 20:49:37 +00:00
|
|
|
|
2020-04-07 08:33:49 +00:00
|
|
|
if (UNBUNDLED OR NOT (OS_LINUX OR OS_DARWIN))
|
2020-02-22 17:32:25 +00:00
|
|
|
# Using system libs can cause a lot of warnings in includes (on macro expansion).
|
2020-09-17 15:09:59 +00:00
|
|
|
option(WERROR "Enable -Werror compiler option" OFF)
|
2020-02-22 17:32:25 +00:00
|
|
|
else ()
|
2020-09-15 20:17:24 +00:00
|
|
|
option(WERROR "Enable -Werror compiler option" ON)
|
2020-02-22 17:32:25 +00:00
|
|
|
endif ()
|
2020-02-16 08:04:03 +00:00
|
|
|
|
2020-02-22 17:32:25 +00:00
|
|
|
if (WERROR)
|
|
|
|
add_warning(error)
|
2019-07-09 21:16:04 +00:00
|
|
|
endif ()
|
|
|
|
|
2019-08-23 15:05:27 +00:00
|
|
|
# Make this extra-checks for correct library dependencies.
|
2019-09-04 15:17:18 +00:00
|
|
|
if (OS_LINUX AND NOT SANITIZE)
|
2019-09-11 20:00:46 +00:00
|
|
|
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined")
|
2020-04-27 17:51:32 +00:00
|
|
|
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
|
2019-08-04 00:19:03 +00:00
|
|
|
endif ()
|
2019-07-03 16:53:20 +00:00
|
|
|
|
2019-08-28 20:49:37 +00:00
|
|
|
include(cmake/dbms_glob_sources.cmake)
|
2019-09-11 10:01:38 +00:00
|
|
|
|
2020-07-15 11:16:00 +00:00
|
|
|
if (OS_LINUX OR OS_ANDROID)
|
2019-08-30 16:50:43 +00:00
|
|
|
include(cmake/linux/default_libs.cmake)
|
2019-09-09 18:19:43 +00:00
|
|
|
elseif (OS_DARWIN)
|
|
|
|
include(cmake/darwin/default_libs.cmake)
|
2020-04-07 08:33:49 +00:00
|
|
|
elseif (OS_FREEBSD)
|
|
|
|
include(cmake/freebsd/default_libs.cmake)
|
2019-08-30 16:50:43 +00:00
|
|
|
endif ()
|
2019-01-19 17:14:57 +00:00
|
|
|
|
2019-08-28 20:49:37 +00:00
|
|
|
######################################
|
|
|
|
### Add targets below this comment ###
|
|
|
|
######################################
|
2019-01-19 22:08:40 +00:00
|
|
|
|
2019-03-11 01:47:58 +00:00
|
|
|
set (CMAKE_POSTFIX_VARIABLE "CMAKE_${CMAKE_BUILD_TYPE_UC}_POSTFIX")
|
|
|
|
|
2019-12-31 00:28:01 +00:00
|
|
|
if (MAKE_STATIC_LIBRARIES)
|
|
|
|
set (CMAKE_POSITION_INDEPENDENT_CODE OFF)
|
2020-06-23 17:58:42 +00:00
|
|
|
if (OS_LINUX AND NOT ARCH_ARM)
|
2019-12-31 01:04:44 +00:00
|
|
|
# Slightly more efficient code can be generated
|
2020-06-23 17:58:42 +00:00
|
|
|
# It's disabled for ARM because otherwise ClickHouse cannot run on Android.
|
2019-12-31 01:04:44 +00:00
|
|
|
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fno-pie")
|
|
|
|
set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -fno-pie")
|
2019-12-31 00:28:01 +00:00
|
|
|
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-no-pie")
|
|
|
|
endif ()
|
|
|
|
else ()
|
|
|
|
set (CMAKE_POSITION_INDEPENDENT_CODE ON)
|
2017-02-08 18:53:00 +00:00
|
|
|
endif ()
|
|
|
|
|
2020-09-15 20:17:24 +00:00
|
|
|
# https://github.com/include-what-you-use/include-what-you-use
|
2020-09-16 09:42:55 +00:00
|
|
|
option (USE_INCLUDE_WHAT_YOU_USE "Automatically reduce unneeded includes in source code (external tool)" OFF)
|
2020-09-15 20:17:24 +00:00
|
|
|
|
2017-09-10 06:51:27 +00:00
|
|
|
if (USE_INCLUDE_WHAT_YOU_USE)
|
|
|
|
find_program(IWYU_PATH NAMES include-what-you-use iwyu)
|
|
|
|
if (NOT IWYU_PATH)
|
|
|
|
message(FATAL_ERROR "Could not find the program include-what-you-use")
|
|
|
|
endif()
|
|
|
|
if (${CMAKE_VERSION} VERSION_LESS "3.3.0")
|
|
|
|
message(FATAL_ERROR "include-what-you-use requires CMake version at least 3.3.")
|
|
|
|
endif()
|
|
|
|
endif ()
|
|
|
|
|
2016-12-01 22:44:59 +00:00
|
|
|
if (ENABLE_TESTS)
|
2020-09-19 18:05:40 +00:00
|
|
|
message (STATUS "Unit tests are enabled")
|
|
|
|
else()
|
|
|
|
message(STATUS "Unit tests are disabled")
|
2017-04-10 17:43:30 +00:00
|
|
|
endif ()
|
2020-09-15 20:17:24 +00:00
|
|
|
|
2019-01-18 15:19:53 +00:00
|
|
|
enable_testing() # Enable for tests without binary
|
2016-12-01 22:44:59 +00:00
|
|
|
|
2017-04-05 12:19:05 +00:00
|
|
|
# when installing to /usr - place configs to /etc but for /usr/local place to /usr/local/etc
|
2017-04-12 18:41:53 +00:00
|
|
|
if (CMAKE_INSTALL_PREFIX STREQUAL "/usr")
|
|
|
|
set (CLICKHOUSE_ETC_DIR "/etc")
|
2017-01-12 13:51:30 +00:00
|
|
|
else ()
|
2017-04-12 18:41:53 +00:00
|
|
|
set (CLICKHOUSE_ETC_DIR "${CMAKE_INSTALL_PREFIX}/etc")
|
2016-12-24 01:03:10 +00:00
|
|
|
endif ()
|
|
|
|
|
2020-09-15 20:17:24 +00:00
|
|
|
message (STATUS
|
|
|
|
"Building for: ${CMAKE_SYSTEM} ${CMAKE_SYSTEM_PROCESSOR} ${CMAKE_LIBRARY_ARCHITECTURE} ;
|
|
|
|
USE_STATIC_LIBRARIES=${USE_STATIC_LIBRARIES}
|
|
|
|
MAKE_STATIC_LIBRARIES=${MAKE_STATIC_LIBRARIES}
|
|
|
|
SPLIT_SHARED=${SPLIT_SHARED_LIBRARIES}
|
|
|
|
UNBUNDLED=${UNBUNDLED}
|
|
|
|
CCACHE=${CCACHE_FOUND} ${CCACHE_VERSION}")
|
2017-02-28 23:49:04 +00:00
|
|
|
|
2020-05-08 14:11:19 +00:00
|
|
|
include (GNUInstallDirs)
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/contrib_finder.cmake)
|
2017-04-10 17:43:30 +00:00
|
|
|
|
2019-07-09 22:19:59 +00:00
|
|
|
find_contrib_lib(double-conversion) # Must be before parquet
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/ssl.cmake)
|
2020-05-12 19:19:15 +00:00
|
|
|
include (cmake/find/ldap.cmake) # after ssl
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/icu.cmake)
|
2021-04-03 22:05:07 +00:00
|
|
|
include (cmake/find/xz.cmake)
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/zlib.cmake)
|
|
|
|
include (cmake/find/zstd.cmake)
|
|
|
|
include (cmake/find/ltdl.cmake) # for odbc
|
2020-05-08 14:11:19 +00:00
|
|
|
# openssl, zlib before poco
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/sparsehash.cmake)
|
|
|
|
include (cmake/find/re2.cmake)
|
2020-07-16 20:32:32 +00:00
|
|
|
include (cmake/find/krb5.cmake)
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/libgsasl.cmake)
|
2020-07-16 20:32:32 +00:00
|
|
|
include (cmake/find/cyrus-sasl.cmake)
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/rdkafka.cmake)
|
2021-04-26 06:45:52 +00:00
|
|
|
include (cmake/find/libuv.cmake) # for amqpcpp and cassandra
|
2020-05-20 04:28:55 +00:00
|
|
|
include (cmake/find/amqpcpp.cmake)
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/capnp.cmake)
|
|
|
|
include (cmake/find/llvm.cmake)
|
|
|
|
include (cmake/find/h3.cmake)
|
|
|
|
include (cmake/find/libxml2.cmake)
|
|
|
|
include (cmake/find/brotli.cmake)
|
|
|
|
include (cmake/find/protobuf.cmake)
|
2019-12-29 11:40:55 +00:00
|
|
|
include (cmake/find/grpc.cmake)
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/pdqsort.cmake)
|
2020-11-09 17:22:05 +00:00
|
|
|
include (cmake/find/miniselect.cmake)
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/hdfs3.cmake) # uses protobuf
|
2020-08-17 12:44:41 +00:00
|
|
|
include (cmake/find/poco.cmake)
|
2020-08-21 22:20:18 +00:00
|
|
|
include (cmake/find/curl.cmake)
|
2019-12-03 16:23:24 +00:00
|
|
|
include (cmake/find/s3.cmake)
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/base64.cmake)
|
|
|
|
include (cmake/find/parquet.cmake)
|
|
|
|
include (cmake/find/simdjson.cmake)
|
2020-11-07 16:48:58 +00:00
|
|
|
include (cmake/find/fast_float.cmake)
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/rapidjson.cmake)
|
|
|
|
include (cmake/find/fastops.cmake)
|
2020-08-21 22:09:24 +00:00
|
|
|
include (cmake/find/odbc.cmake)
|
2021-04-20 11:07:05 +00:00
|
|
|
include (cmake/find/nanodbc.cmake)
|
2021-07-08 13:27:30 +00:00
|
|
|
include (cmake/find/sqlite.cmake)
|
2020-09-02 09:13:59 +00:00
|
|
|
include (cmake/find/rocksdb.cmake)
|
2020-12-10 00:36:31 +00:00
|
|
|
include (cmake/find/libpqxx.cmake)
|
2020-12-24 20:10:47 +00:00
|
|
|
include (cmake/find/nuraft.cmake)
|
2021-05-21 18:56:22 +00:00
|
|
|
include (cmake/find/yaml-cpp.cmake)
|
2021-07-06 11:34:33 +00:00
|
|
|
include (cmake/find/s2geometry.cmake)
|
2021-07-30 13:30:30 +00:00
|
|
|
include (cmake/find/nlp.cmake)
|
2021-08-06 23:55:04 +00:00
|
|
|
include (cmake/find/bzip2.cmake)
|
2020-08-17 18:47:16 +00:00
|
|
|
|
|
|
|
if(NOT USE_INTERNAL_PARQUET_LIBRARY)
|
|
|
|
set (ENABLE_ORC OFF CACHE INTERNAL "")
|
|
|
|
endif()
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/orc.cmake)
|
2020-08-17 18:47:16 +00:00
|
|
|
|
2020-01-08 09:13:12 +00:00
|
|
|
include (cmake/find/avro.cmake)
|
2020-03-26 16:33:00 +00:00
|
|
|
include (cmake/find/msgpack.cmake)
|
2020-05-22 14:19:33 +00:00
|
|
|
include (cmake/find/cassandra.cmake)
|
2020-05-27 19:11:04 +00:00
|
|
|
include (cmake/find/sentry.cmake)
|
2020-07-29 11:33:38 +00:00
|
|
|
include (cmake/find/stats.cmake)
|
2021-02-25 16:44:01 +00:00
|
|
|
include (cmake/find/datasketches.cmake)
|
2019-03-11 01:03:13 +00:00
|
|
|
|
2020-08-15 16:13:23 +00:00
|
|
|
set (USE_INTERNAL_CITYHASH_LIBRARY ON CACHE INTERNAL "")
|
2017-08-09 20:52:55 +00:00
|
|
|
find_contrib_lib(cityhash)
|
2020-08-15 16:13:23 +00:00
|
|
|
|
2017-08-09 20:52:55 +00:00
|
|
|
find_contrib_lib(farmhash)
|
2020-08-15 16:13:23 +00:00
|
|
|
|
2019-02-19 20:51:44 +00:00
|
|
|
if (ENABLE_TESTS)
|
2019-08-30 13:28:02 +00:00
|
|
|
include (cmake/find/gtest.cmake)
|
2019-02-19 20:51:44 +00:00
|
|
|
endif ()
|
2017-08-09 20:52:55 +00:00
|
|
|
|
2017-06-23 14:41:07 +00:00
|
|
|
# Need to process before "contrib" dir:
|
2020-02-14 14:48:30 +00:00
|
|
|
include (cmake/find/mysqlclient.cmake)
|
2017-06-23 14:41:07 +00:00
|
|
|
|
2019-09-30 11:58:32 +00:00
|
|
|
# When testing for memory leaks with Valgrind, don't link tcmalloc or jemalloc.
|
2019-08-22 03:24:05 +00:00
|
|
|
|
2018-02-26 18:34:22 +00:00
|
|
|
include (cmake/print_flags.cmake)
|
2017-01-25 22:24:36 +00:00
|
|
|
|
2019-10-05 19:25:31 +00:00
|
|
|
if (TARGET global-group)
|
|
|
|
install (EXPORT global DESTINATION cmake)
|
|
|
|
endif ()
|
2019-08-28 20:49:37 +00:00
|
|
|
|
2019-01-18 23:52:21 +00:00
|
|
|
add_subdirectory (contrib EXCLUDE_FROM_ALL)
|
2019-09-30 11:58:32 +00:00
|
|
|
|
2020-07-09 07:25:42 +00:00
|
|
|
if (NOT ENABLE_JEMALLOC)
|
|
|
|
message (WARNING "Non default allocator is disabled. This is not recommended for production builds.")
|
2020-07-09 07:25:13 +00:00
|
|
|
endif ()
|
|
|
|
|
2019-09-30 11:58:32 +00:00
|
|
|
macro (add_executable target)
|
|
|
|
# invoke built-in add_executable
|
2019-12-05 11:22:43 +00:00
|
|
|
# explicitly acquire and interpose malloc symbols by clickhouse_malloc
|
2020-10-05 09:58:23 +00:00
|
|
|
# if GLIBC_COMPATIBILITY is ON and ENABLE_THINLTO is on than provide memcpy symbol explicitly to neutrialize thinlto's libcall generation.
|
2020-10-05 09:57:28 +00:00
|
|
|
if (GLIBC_COMPATIBILITY AND ENABLE_THINLTO)
|
2021-03-02 19:09:37 +00:00
|
|
|
_add_executable (${ARGV} $<TARGET_OBJECTS:clickhouse_malloc> $<TARGET_OBJECTS:memcpy>)
|
2020-10-02 06:57:13 +00:00
|
|
|
else ()
|
2020-10-01 17:19:05 +00:00
|
|
|
_add_executable (${ARGV} $<TARGET_OBJECTS:clickhouse_malloc>)
|
|
|
|
endif ()
|
2020-10-02 06:57:13 +00:00
|
|
|
|
2019-09-30 11:58:32 +00:00
|
|
|
get_target_property (type ${target} TYPE)
|
|
|
|
if (${type} STREQUAL EXECUTABLE)
|
2020-12-15 19:59:07 +00:00
|
|
|
# disabled for TSAN and gcc since libtsan.a provides overrides too
|
|
|
|
if (TARGET clickhouse_new_delete)
|
|
|
|
# operator::new/delete for executables (MemoryTracker stuff)
|
2021-08-18 06:47:58 +00:00
|
|
|
target_link_libraries (${target} PRIVATE clickhouse_new_delete)
|
2020-12-15 19:59:07 +00:00
|
|
|
endif()
|
2021-08-18 06:47:59 +00:00
|
|
|
|
|
|
|
# In case of static jemalloc, because zone_register() is located in zone.c and
|
|
|
|
# is never used outside (it is declared as constructor) it is omitted
|
|
|
|
# by the linker, and so jemalloc will not be registered as system
|
|
|
|
# allocator under osx [1], and clickhouse will SIGSEGV.
|
|
|
|
#
|
|
|
|
# [1]: https://github.com/jemalloc/jemalloc/issues/708
|
|
|
|
#
|
|
|
|
# About symbol name:
|
|
|
|
# - _zone_register not zone_register due to Mach-O binary format,
|
|
|
|
# - _je_zone_register due to JEMALLOC_PRIVATE_NAMESPACE=je_ under OS X.
|
|
|
|
# - but jemalloc-cmake does not run private_namespace.sh
|
|
|
|
# so symbol name should be _zone_register
|
|
|
|
if (ENABLE_JEMALLOC AND MAKE_STATIC_LIBRARIES AND OS_DARWIN)
|
|
|
|
set_property(TARGET ${target} APPEND PROPERTY LINK_OPTIONS -u_zone_register)
|
|
|
|
endif()
|
2019-09-30 11:58:32 +00:00
|
|
|
endif()
|
|
|
|
endmacro()
|
|
|
|
|
2020-04-01 23:51:21 +00:00
|
|
|
set(ConfigIncludePath ${CMAKE_CURRENT_BINARY_DIR}/includes/configs CACHE INTERNAL "Path to generated configuration files.")
|
|
|
|
include_directories(${ConfigIncludePath})
|
|
|
|
|
2020-05-09 22:59:34 +00:00
|
|
|
# Add as many warnings as possible for our own code.
|
|
|
|
include (cmake/warnings.cmake)
|
|
|
|
|
2021-05-12 04:14:00 +00:00
|
|
|
# Check if needed compiler flags are supported
|
|
|
|
include (cmake/check_flags.cmake)
|
|
|
|
|
2020-02-14 14:48:30 +00:00
|
|
|
add_subdirectory (base)
|
2020-04-03 15:14:31 +00:00
|
|
|
add_subdirectory (src)
|
2020-12-15 19:59:07 +00:00
|
|
|
add_subdirectory (programs)
|
2020-04-01 23:51:21 +00:00
|
|
|
add_subdirectory (tests)
|
|
|
|
add_subdirectory (utils)
|
2017-01-18 14:03:30 +00:00
|
|
|
|
2016-12-06 18:04:10 +00:00
|
|
|
include (cmake/print_include_directories.cmake)
|
2020-07-07 16:22:41 +00:00
|
|
|
|
|
|
|
include (cmake/sanitize_target_link_libraries.cmake)
|