From d8ca5de0c16b31a8dce86502948490d8d4175710 Mon Sep 17 00:00:00 2001 From: zshuang0316 Date: Sun, 19 Apr 2026 23:02:48 +0800 Subject: [PATCH] cmake: kafka: enable zstd compression using bundled library Configure librdkafka to use zstd compression. Prefer system zstd when FLB_PREFER_SYSTEM_LIB_ZSTD is enabled and found, otherwise fall back to bundled zstd library. The CACHE FORCE flags ensure the bundled library takes precedence over any librdkafka find_package(ZSTD) results when using bundled. Co-Authored-By: Claude Opus 4.6 Signed-off-by: zshuang0316 --- cmake/kafka.cmake | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/cmake/kafka.cmake b/cmake/kafka.cmake index 6e9c111ecb8..df08d365334 100644 --- a/cmake/kafka.cmake +++ b/cmake/kafka.cmake @@ -77,6 +77,51 @@ if (FLB_SYSTEM_MACOS) FLB_OPTION(WITH_CURL Off) endif() +# Enable zstd compression for librdkafka using the library already resolved +# by the top-level zstd detection block (LIBZSTD_LIBRARIES is set for all +# cases: bundled, system CMake config, and system pkg-config fallback). +if(LIBZSTD_LIBRARIES) + if(TARGET libzstd_static) + # Bundled: force-inject vars — librdkafka's find_package(ZSTD) cannot + # discover an in-tree target on its own. + set(ZSTD_FOUND TRUE CACHE BOOL "" FORCE) + set(ZSTD_INCLUDE_DIR "${FLB_PATH_ROOT_SOURCE}/${FLB_PATH_LIB_ZSTD}/lib" CACHE PATH "" FORCE) + set(ZSTD_LIBRARY_DEBUG libzstd_static CACHE STRING "" FORCE) + set(ZSTD_LIBRARY_RELEASE libzstd_static CACHE STRING "" FORCE) + set(ZSTD_LIBRARY libzstd_static CACHE STRING "" FORCE) + FLB_OPTION(WITH_ZSTD ON) + set(FLB_KAFKA_ZSTD_SOURCE "bundled") + else() + # System: clear stale bundled-sentinel entries and WITH_ZSTD so librdkafka + # re-runs find_package(ZSTD) fresh and its option() sets its own default. + # Preserve explicit caller overrides such as -DZSTD_LIBRARY=/custom/path. + if(ZSTD_LIBRARY STREQUAL "libzstd_static") + unset(ZSTD_FOUND CACHE) + unset(ZSTD_INCLUDE_DIR CACHE) + unset(ZSTD_LIBRARY CACHE) + unset(ZSTD_LIBRARY_DEBUG CACHE) + unset(ZSTD_LIBRARY_RELEASE CACHE) + unset(WITH_ZSTD CACHE) + endif() + set(FLB_KAFKA_ZSTD_SOURCE "system") + endif() +else() + # FLB didn't find zstd. Clear stale bundled entries so librdkafka's + # find_package/option() runs fresh and defaults to OFF. + # Preserve user-supplied custom paths (ZSTD_LIBRARY != sentinel). + if(ZSTD_LIBRARY STREQUAL "libzstd_static") + unset(ZSTD_FOUND CACHE) + unset(ZSTD_INCLUDE_DIR CACHE) + unset(ZSTD_LIBRARY CACHE) + unset(ZSTD_LIBRARY_DEBUG CACHE) + unset(ZSTD_LIBRARY_RELEASE CACHE) + unset(WITH_ZSTD CACHE) + elseif(NOT ZSTD_LIBRARY) + unset(WITH_ZSTD CACHE) + endif() + set(FLB_KAFKA_ZSTD_SOURCE "disabled") +endif() + include_directories(${FLB_PATH_ROOT_SOURCE}/${FLB_PATH_LIB_RDKAFKA}/src/) add_subdirectory(${FLB_PATH_LIB_RDKAFKA} EXCLUDE_FROM_ALL) @@ -88,4 +133,5 @@ message(STATUS "=== Kafka Feature Summary ===") message(STATUS "SASL Auth: ${FLB_SASL_ENABLED}") message(STATUS "OAuth Bearer: ${FLB_SASL_OAUTHBEARER_ENABLED}") message(STATUS "MSK IAM: ${FLB_KAFKA_MSK_IAM_ENABLED}") +message(STATUS "ZSTD: ${FLB_KAFKA_ZSTD_SOURCE}") message(STATUS "===============================")