mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-25 09:02:00 +00:00
Better cmake for keeper
This commit is contained in:
parent
df22534dbc
commit
ee46850112
@ -198,6 +198,54 @@ macro(clickhouse_program_add name)
|
|||||||
clickhouse_program_add_executable(${name})
|
clickhouse_program_add_executable(${name})
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
# Embed default config files as a resource into the binary.
|
||||||
|
# This is needed for two purposes:
|
||||||
|
# 1. Allow to run the binary without download of any other files.
|
||||||
|
# 2. Allow to implement "sudo clickhouse install" tool.
|
||||||
|
#
|
||||||
|
# Arguments: target (server, client, keeper, etc.) and list of files
|
||||||
|
#
|
||||||
|
# Also dependency on TARGET_FILE is required, look at examples in programs/server and programs/keeper
|
||||||
|
macro(clickhouse_embed_binaries)
|
||||||
|
# TODO We actually need this on Mac, FreeBSD.
|
||||||
|
if (OS_LINUX)
|
||||||
|
|
||||||
|
set(arguments_list "${ARGN}")
|
||||||
|
list(GET arguments_list 0 target)
|
||||||
|
|
||||||
|
# for some reason cmake iterates loop including <stop>
|
||||||
|
math(EXPR arguments_count "${ARGC}-1")
|
||||||
|
|
||||||
|
foreach(RESOURCE_POS RANGE 1 "${arguments_count}")
|
||||||
|
list(GET arguments_list "${RESOURCE_POS}" RESOURCE_FILE)
|
||||||
|
set(RESOURCE_OBJ ${RESOURCE_FILE}.o)
|
||||||
|
set(RESOURCE_OBJS ${RESOURCE_OBJS} ${RESOURCE_OBJ})
|
||||||
|
|
||||||
|
# https://stackoverflow.com/questions/14776463/compile-and-add-an-object-file-from-a-binary-with-cmake
|
||||||
|
# PPC64LE fails to do this with objcopy, use ld or lld instead
|
||||||
|
if (ARCH_PPC64LE)
|
||||||
|
add_custom_command(OUTPUT ${RESOURCE_OBJ}
|
||||||
|
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && ${CMAKE_LINKER} -m elf64lppc -r -b binary -o "${CMAKE_CURRENT_BINARY_DIR}/${RESOURCE_OBJ}" ${RESOURCE_FILE})
|
||||||
|
else()
|
||||||
|
add_custom_command(OUTPUT ${RESOURCE_OBJ}
|
||||||
|
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && ${OBJCOPY_PATH} -I binary ${OBJCOPY_ARCH_OPTIONS} ${RESOURCE_FILE} "${CMAKE_CURRENT_BINARY_DIR}/${RESOURCE_OBJ}"
|
||||||
|
COMMAND ${OBJCOPY_PATH} --rename-section .data=.rodata,alloc,load,readonly,data,contents
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/${RESOURCE_OBJ}" "${CMAKE_CURRENT_BINARY_DIR}/${RESOURCE_OBJ}")
|
||||||
|
endif()
|
||||||
|
set_source_files_properties(${RESOURCE_OBJ} PROPERTIES EXTERNAL_OBJECT true GENERATED true)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
add_library(clickhouse_${target}_configs STATIC ${RESOURCE_OBJS})
|
||||||
|
set_target_properties(clickhouse_${target}_configs PROPERTIES LINKER_LANGUAGE C)
|
||||||
|
|
||||||
|
# whole-archive prevents symbols from being discarded for unknown reason
|
||||||
|
# CMake can shuffle each of target_link_libraries arguments with other
|
||||||
|
# libraries in linker command. To avoid this we hardcode whole-archive
|
||||||
|
# library into single string.
|
||||||
|
add_dependencies(clickhouse-${target}-lib clickhouse_${target}_configs)
|
||||||
|
endif ()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
|
||||||
add_subdirectory (server)
|
add_subdirectory (server)
|
||||||
add_subdirectory (client)
|
add_subdirectory (client)
|
||||||
|
@ -2,6 +2,10 @@ set(CLICKHOUSE_KEEPER_SOURCES
|
|||||||
Keeper.cpp
|
Keeper.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (OS_LINUX)
|
||||||
|
set (LINK_RESOURCE_LIB INTERFACE "-Wl,${WHOLE_ARCHIVE} $<TARGET_FILE:clickhouse_keeper_configs> -Wl,${NO_WHOLE_ARCHIVE}")
|
||||||
|
endif ()
|
||||||
|
|
||||||
set (CLICKHOUSE_KEEPER_LINK
|
set (CLICKHOUSE_KEEPER_LINK
|
||||||
PRIVATE
|
PRIVATE
|
||||||
clickhouse_common_config
|
clickhouse_common_config
|
||||||
@ -9,8 +13,12 @@ set (CLICKHOUSE_KEEPER_LINK
|
|||||||
clickhouse_common_zookeeper
|
clickhouse_common_zookeeper
|
||||||
daemon
|
daemon
|
||||||
dbms
|
dbms
|
||||||
|
|
||||||
|
${LINK_RESOURCE_LIB}
|
||||||
)
|
)
|
||||||
|
|
||||||
clickhouse_program_add(keeper)
|
clickhouse_program_add(keeper)
|
||||||
|
|
||||||
install (FILES keeper_config.xml DESTINATION "${CLICKHOUSE_ETC_DIR}/clickhouse-keeper" COMPONENT clickhouse-keeper)
|
install (FILES keeper_config.xml DESTINATION "${CLICKHOUSE_ETC_DIR}/clickhouse-keeper" COMPONENT clickhouse-keeper)
|
||||||
|
|
||||||
|
clickhouse_embed_binaries(keeper keeper_config.xml keeper_embedded.xml)
|
||||||
|
@ -31,37 +31,4 @@ clickhouse_program_add(server)
|
|||||||
|
|
||||||
install(FILES config.xml users.xml DESTINATION "${CLICKHOUSE_ETC_DIR}/clickhouse-server" COMPONENT clickhouse)
|
install(FILES config.xml users.xml DESTINATION "${CLICKHOUSE_ETC_DIR}/clickhouse-server" COMPONENT clickhouse)
|
||||||
|
|
||||||
# TODO We actually need this on Mac, FreeBSD.
|
clickhouse_embed_binaries(server config.xml users.xml embedded.xml play.html)
|
||||||
if (OS_LINUX)
|
|
||||||
# Embed default config files as a resource into the binary.
|
|
||||||
# This is needed for two purposes:
|
|
||||||
# 1. Allow to run the binary without download of any other files.
|
|
||||||
# 2. Allow to implement "sudo clickhouse install" tool.
|
|
||||||
|
|
||||||
foreach(RESOURCE_FILE config.xml users.xml embedded.xml play.html keeper_embedded.xml)
|
|
||||||
set(RESOURCE_OBJ ${RESOURCE_FILE}.o)
|
|
||||||
set(RESOURCE_OBJS ${RESOURCE_OBJS} ${RESOURCE_OBJ})
|
|
||||||
|
|
||||||
# https://stackoverflow.com/questions/14776463/compile-and-add-an-object-file-from-a-binary-with-cmake
|
|
||||||
# PPC64LE fails to do this with objcopy, use ld or lld instead
|
|
||||||
if (ARCH_PPC64LE)
|
|
||||||
add_custom_command(OUTPUT ${RESOURCE_OBJ}
|
|
||||||
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && ${CMAKE_LINKER} -m elf64lppc -r -b binary -o "${CMAKE_CURRENT_BINARY_DIR}/${RESOURCE_OBJ}" ${RESOURCE_FILE})
|
|
||||||
else()
|
|
||||||
add_custom_command(OUTPUT ${RESOURCE_OBJ}
|
|
||||||
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && ${OBJCOPY_PATH} -I binary ${OBJCOPY_ARCH_OPTIONS} ${RESOURCE_FILE} "${CMAKE_CURRENT_BINARY_DIR}/${RESOURCE_OBJ}"
|
|
||||||
COMMAND ${OBJCOPY_PATH} --rename-section .data=.rodata,alloc,load,readonly,data,contents
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${RESOURCE_OBJ}" "${CMAKE_CURRENT_BINARY_DIR}/${RESOURCE_OBJ}")
|
|
||||||
endif()
|
|
||||||
set_source_files_properties(${RESOURCE_OBJ} PROPERTIES EXTERNAL_OBJECT true GENERATED true)
|
|
||||||
endforeach(RESOURCE_FILE)
|
|
||||||
|
|
||||||
add_library(clickhouse_server_configs STATIC ${RESOURCE_OBJS})
|
|
||||||
set_target_properties(clickhouse_server_configs PROPERTIES LINKER_LANGUAGE C)
|
|
||||||
|
|
||||||
# whole-archive prevents symbols from being discarded for unknown reason
|
|
||||||
# CMake can shuffle each of target_link_libraries arguments with other
|
|
||||||
# libraries in linker command. To avoid this we hardcode whole-archive
|
|
||||||
# library into single string.
|
|
||||||
add_dependencies(clickhouse-server-lib clickhouse_server_configs)
|
|
||||||
endif ()
|
|
||||||
|
Loading…
Reference in New Issue
Block a user