ClickHouse/cmake/linux/default_libs.cmake

70 lines
2.6 KiB
CMake
Raw Normal View History

# Set standard, system and compiler libraries explicitly.
# This is intended for more control of what we are linking.
set (DEFAULT_LIBS "-nodefaultlibs")
2019-08-30 16:50:43 +00:00
# We need builtins from Clang's RT even without libcxx - for ubsan+int128.
# See https://bugs.llvm.org/show_bug.cgi?id=16404
2021-11-24 00:01:21 +00:00
if (COMPILER_CLANG)
2021-11-24 12:43:09 +00:00
execute_process (COMMAND ${CMAKE_CXX_COMPILER} --target=${CMAKE_CXX_COMPILER_TARGET} --print-libgcc-file-name --rtlib=compiler-rt OUTPUT_VARIABLE BUILTINS_LIBRARY OUTPUT_STRIP_TRAILING_WHITESPACE)
if (NOT EXISTS "${BUILTINS_LIBRARY}")
set (BUILTINS_LIBRARY "-lgcc")
endif ()
2019-08-30 16:50:43 +00:00
else ()
set (BUILTINS_LIBRARY "-lgcc")
endif ()
2020-07-15 11:16:00 +00:00
if (OS_ANDROID)
# pthread and rt are included in libc
set (DEFAULT_LIBS "${DEFAULT_LIBS} ${BUILTINS_LIBRARY} ${COVERAGE_OPTION} -lc -lm -ldl")
2021-10-15 23:07:13 +00:00
elseif (USE_MUSL)
set (DEFAULT_LIBS "${DEFAULT_LIBS} ${BUILTINS_LIBRARY} ${COVERAGE_OPTION} -static -lc")
2020-07-15 11:16:00 +00:00
else ()
set (DEFAULT_LIBS "${DEFAULT_LIBS} ${BUILTINS_LIBRARY} ${COVERAGE_OPTION} -lc -lm -lrt -lpthread -ldl")
2020-07-15 11:16:00 +00:00
endif ()
2019-08-30 16:50:43 +00:00
message(STATUS "Default libraries: ${DEFAULT_LIBS}")
set(CMAKE_CXX_STANDARD_LIBRARIES ${DEFAULT_LIBS})
set(CMAKE_C_STANDARD_LIBRARIES ${DEFAULT_LIBS})
2020-06-22 14:59:38 +00:00
# glibc-compatibility library relies to constant version of libc headers
# (because minor changes in function attributes between different glibc versions will introduce incompatibilities)
2019-12-20 12:35:41 +00:00
# This is for x86_64. For other architectures we have separate toolchains.
2021-11-21 10:58:26 +00:00
if (ARCH_AMD64 AND NOT CMAKE_CROSSCOMPILING)
2019-12-20 12:35:41 +00:00
set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES ${ClickHouse_SOURCE_DIR}/contrib/libc-headers/x86_64-linux-gnu ${ClickHouse_SOURCE_DIR}/contrib/libc-headers)
2019-12-20 15:48:01 +00:00
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${ClickHouse_SOURCE_DIR}/contrib/libc-headers/x86_64-linux-gnu ${ClickHouse_SOURCE_DIR}/contrib/libc-headers)
2019-12-20 12:35:41 +00:00
endif ()
# Unfortunately '-pthread' doesn't work with '-nodefaultlibs'.
# Just make sure we have pthreads at all.
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
2020-07-15 11:16:00 +00:00
if (NOT OS_ANDROID)
2021-10-15 23:07:13 +00:00
if (NOT USE_MUSL)
# Our compatibility layer doesn't build under Android, many errors in musl.
add_subdirectory(base/glibc-compatibility)
endif ()
2020-10-26 01:54:35 +00:00
add_subdirectory(base/harmful)
2020-07-15 11:16:00 +00:00
endif ()
2019-08-30 13:28:02 +00:00
include (cmake/find/unwind.cmake)
include (cmake/find/cxx.cmake)
add_library(global-group INTERFACE)
target_link_libraries(global-group INTERFACE
-Wl,--start-group
$<TARGET_PROPERTY:global-libs,INTERFACE_LINK_LIBRARIES>
-Wl,--end-group
)
link_libraries(global-group)
2019-08-30 16:50:43 +00:00
# FIXME: remove when all contribs will get custom cmake lists
install(
TARGETS global-group global-libs
EXPORT global
)