ClickHouse/contrib/librdkafka-cmake/CMakeLists.txt
2022-01-20 10:02:03 +03:00

141 lines
5.1 KiB
CMake

option (ENABLE_KAFKA "Enable kafka" ${ENABLE_LIBRARIES})
if (NOT ENABLE_KAFKA)
message(STATUS "Not using librdkafka")
return()
endif()
set(RDKAFKA_SOURCE_DIR "${ClickHouse_SOURCE_DIR}/contrib/librdkafka/src")
set(SRCS
"${RDKAFKA_SOURCE_DIR}/crc32c.c"
# "${RDKAFKA_SOURCE_DIR}/lz4.c"
# "${RDKAFKA_SOURCE_DIR}/lz4frame.c"
# "${RDKAFKA_SOURCE_DIR}/lz4hc.c"
"${RDKAFKA_SOURCE_DIR}/rdaddr.c"
"${RDKAFKA_SOURCE_DIR}/rdavl.c"
"${RDKAFKA_SOURCE_DIR}/rdbuf.c"
"${RDKAFKA_SOURCE_DIR}/rdcrc32.c"
"${RDKAFKA_SOURCE_DIR}/rddl.c"
"${RDKAFKA_SOURCE_DIR}/rdfnv1a.c"
"${RDKAFKA_SOURCE_DIR}/rdgz.c"
"${RDKAFKA_SOURCE_DIR}/rdhdrhistogram.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_admin.c" # looks optional
"${RDKAFKA_SOURCE_DIR}/rdkafka_assignment.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_assignor.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_aux.c" # looks optional
"${RDKAFKA_SOURCE_DIR}/rdkafka_background.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_broker.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_buf.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_cert.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_cgrp.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_conf.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_coord.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_error.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_event.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_feature.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_header.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_idempotence.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_interceptor.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_lz4.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_metadata.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_metadata_cache.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_mock.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_mock_cgrp.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_mock_handlers.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_msg.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_msgset_reader.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_msgset_writer.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_offset.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_op.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_partition.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_pattern.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_plugin.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_queue.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_range_assignor.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_request.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_roundrobin_assignor.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_sasl.c"
# "${RDKAFKA_SOURCE_DIR}/rdkafka_sasl_cyrus.c" # optionally included below
# "${RDKAFKA_SOURCE_DIR}/rdkafka_sasl_oauthbearer.c" # optionally included below
"${RDKAFKA_SOURCE_DIR}/rdkafka_sasl_plain.c"
# "${RDKAFKA_SOURCE_DIR}/rdkafka_sasl_scram.c" # optionally included below
# "${RDKAFKA_SOURCE_DIR}/rdkafka_sasl_win32.c"
# "${RDKAFKA_SOURCE_DIR}/rdkafka_ssl.c" # optionally included below
"${RDKAFKA_SOURCE_DIR}/rdkafka_sticky_assignor.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_subscription.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_timer.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_topic.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_transport.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_txnmgr.c"
"${RDKAFKA_SOURCE_DIR}/rdkafka_zstd.c"
"${RDKAFKA_SOURCE_DIR}/rdlist.c"
"${RDKAFKA_SOURCE_DIR}/rdlog.c"
"${RDKAFKA_SOURCE_DIR}/rdmap.c"
"${RDKAFKA_SOURCE_DIR}/rdmurmur2.c"
"${RDKAFKA_SOURCE_DIR}/rdports.c"
"${RDKAFKA_SOURCE_DIR}/rdrand.c"
"${RDKAFKA_SOURCE_DIR}/rdregex.c"
"${RDKAFKA_SOURCE_DIR}/rdstring.c"
"${RDKAFKA_SOURCE_DIR}/rdunittest.c"
"${RDKAFKA_SOURCE_DIR}/rdvarint.c"
"${RDKAFKA_SOURCE_DIR}/rdxxhash.c"
# "${RDKAFKA_SOURCE_DIR}/regexp.c"
"${RDKAFKA_SOURCE_DIR}/snappy.c"
"${RDKAFKA_SOURCE_DIR}/tinycthread.c"
"${RDKAFKA_SOURCE_DIR}/tinycthread_extra.c"
)
if(TARGET ch_contrib::sasl2)
message (STATUS "librdkafka with SASL support")
set(WITH_SASL_CYRUS 1)
endif()
message (STATUS "librdkafka with SSL support")
set(WITH_SSL 1)
if(WITH_SASL_CYRUS)
set(WITH_SASL_SCRAM 1)
set(WITH_SASL_OAUTHBEARER 1)
endif()
list(APPEND SRCS "${RDKAFKA_SOURCE_DIR}/rdkafka_ssl.c")
if(WITH_SASL_CYRUS)
list(APPEND SRCS "${RDKAFKA_SOURCE_DIR}/rdkafka_sasl_cyrus.c") # needed to support Kerberos, requires cyrus-sasl
endif()
if(WITH_SASL_SCRAM)
list(APPEND SRCS "${RDKAFKA_SOURCE_DIR}/rdkafka_sasl_scram.c")
endif()
if(WITH_SASL_OAUTHBEARER)
list(APPEND SRCS "${RDKAFKA_SOURCE_DIR}/rdkafka_sasl_oauthbearer.c")
endif()
add_library(_rdkafka ${SRCS})
add_library(ch_contrib::rdkafka ALIAS _rdkafka)
target_compile_options(_rdkafka PRIVATE -fno-sanitize=undefined)
# target_include_directories(_rdkafka SYSTEM PUBLIC include)
target_include_directories(_rdkafka SYSTEM PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") # for "librdkafka/rdkafka.h"
target_include_directories(_rdkafka SYSTEM PUBLIC ${RDKAFKA_SOURCE_DIR}) # Because weird logic with "include_next" is used.
target_include_directories(_rdkafka SYSTEM PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/auxdir") # for "../config.h"
target_link_libraries(_rdkafka
PRIVATE
ch_contrib::lz4
ch_contrib::zlib
ch_contrib::zstd
OpenSSL::Crypto OpenSSL::SSL
)
if(WITH_SASL_CYRUS)
target_link_libraries(_rdkafka PRIVATE ch_contrib::sasl2)
endif()
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/auxdir")
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/config.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/config.h"
IMMEDIATE @ONLY
)