diff --git a/CMakeLists.txt b/CMakeLists.txt index e586dec2891..4741b6b2025 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -599,14 +599,52 @@ add_subdirectory(${FLB_PATH_LIB_MINIZ} EXCLUDE_FROM_ALL) # Zstd (zstd) if(FLB_PREFER_SYSTEM_LIB_ZSTD) - find_package(PkgConfig) - pkg_check_modules(LIBZSTD libzstd>=1.4.8) + find_package(ZSTD 1.4.8 QUIET) + if(ZSTD_FOUND) + set(LIBZSTD_FOUND TRUE) + # Use the target provided by find_package(ZSTD) + # Modern FindZSTD provides ZSTD::libzstd_static or ZSTD::libzstd_shared + if(TARGET ZSTD::libzstd_static) + set(LIBZSTD_LIBRARIES ZSTD::libzstd_static) + elseif(TARGET ZSTD::libzstd_shared) + set(LIBZSTD_LIBRARIES ZSTD::libzstd_shared) + elseif(TARGET ZSTD::ZSTD) + set(LIBZSTD_LIBRARIES ZSTD::ZSTD) + else() + # Fallback: create a wrapper if no target is provided + add_library(BUNDLED::ZSTD INTERFACE IMPORTED) + if(ZSTD_LIBRARIES) + set_property(TARGET BUNDLED::ZSTD PROPERTY + INTERFACE_LINK_LIBRARIES "${ZSTD_LIBRARIES}") + endif() + if(ZSTD_INCLUDE_DIRS) + set_property(TARGET BUNDLED::ZSTD PROPERTY + INTERFACE_INCLUDE_DIRECTORIES "${ZSTD_INCLUDE_DIRS}") + endif() + set(LIBZSTD_LIBRARIES BUNDLED::ZSTD) + endif() + else() + find_package(PkgConfig) + pkg_check_modules(LIBZSTD libzstd>=1.4.8) + if(LIBZSTD_FOUND) + include_directories(${LIBZSTD_INCLUDE_DIRS}) + link_directories(${LIBZSTD_LIBRARY_DIRS}) + add_library(BUNDLED::ZSTD INTERFACE IMPORTED) + set_property(TARGET BUNDLED::ZSTD PROPERTY + INTERFACE_LINK_LIBRARIES "${LIBZSTD_LIBRARIES}") + set(LIBZSTD_LIBRARIES BUNDLED::ZSTD) + endif() + endif() endif() -if(LIBZSTD_FOUND) - include_directories(${LIBZSTD_INCLUDE_DIRS}) - link_directories(${LIBZSTD_LIBRARY_DIRS}) -else() + +if(NOT LIBZSTD_FOUND) include(cmake/zstd.cmake) + + if(NOT MSVC) + target_compile_options(libzstd_static PRIVATE -fvisibility=hidden) + endif() + + set(LIBZSTD_LIBRARIES libzstd_static) endif() # ring buffer library diff --git a/packaging/distros/almalinux/Dockerfile b/packaging/distros/almalinux/Dockerfile index e95075ee613..8fc050b02e7 100644 --- a/packaging/distros/almalinux/Dockerfile +++ b/packaging/distros/almalinux/Dockerfile @@ -23,6 +23,9 @@ RUN yum -y update && \ cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config && \ yum clean all +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD + # almalinux/8.arm64v8 base image # hadolint ignore=DL3029 FROM --platform=arm64 almalinux:8 AS almalinux-8.arm64v8-base @@ -40,6 +43,8 @@ RUN yum -y update && \ cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config && \ yum clean all +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # Need larger page size ARG FLB_JEMALLOC_OPTIONS="--with-lg-page=16 --with-lg-quantum=3" ENV FLB_JEMALLOC_OPTIONS=$FLB_JEMALLOC_OPTIONS @@ -57,6 +62,9 @@ RUN yum -y update && \ cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config && \ yum clean all +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD + # almalinux/8.arm64v8 base image # hadolint ignore=DL3029 FROM --platform=arm64 almalinux:9 AS almalinux-9.arm64v8-base @@ -74,6 +82,8 @@ RUN yum -y update && \ cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config && \ yum clean all +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # Need larger page size ARG FLB_JEMALLOC_OPTIONS="--with-lg-page=16 --with-lg-quantum=3" ENV FLB_JEMALLOC_OPTIONS=$FLB_JEMALLOC_OPTIONS @@ -88,9 +98,14 @@ RUN yum -y update && \ yum install -y --allowerasing rpm-build curl ca-certificates gcc gcc-c++ cmake make bash \ wget unzip systemd-devel wget flex bison \ postgresql-libs postgresql-devel postgresql-server postgresql \ - cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config && \ + cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config \ + libzstd-devel && \ yum clean all +# Use system installed libzstd library. +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=On +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD + # almalinux/8.arm64v8 base image # hadolint ignore=DL3029 FROM --platform=arm64 almalinux:10 AS almalinux-10.arm64v8-base @@ -105,9 +120,13 @@ RUN yum -y update && \ yum install -y --allowerasing rpm-build curl ca-certificates gcc gcc-c++ cmake make bash \ wget unzip systemd-devel wget flex bison \ postgresql-libs postgresql-devel postgresql-server postgresql \ - cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config && \ + cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config \ + libzstd-devel && \ yum clean all +# Use system installed libzstd library. +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=On +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # Need larger page size ARG FLB_JEMALLOC_OPTIONS="--with-lg-page=16 --with-lg-quantum=3" ENV FLB_JEMALLOC_OPTIONS=$FLB_JEMALLOC_OPTIONS @@ -155,6 +174,7 @@ RUN cmake -DCMAKE_INSTALL_PREFIX="$CMAKE_INSTALL_PREFIX" \ -DFLB_JEMALLOC="${FLB_JEMALLOC}" \ -DFLB_CHUNK_TRACE="${FLB_CHUNK_TRACE}" \ -DFLB_UNICODE_ENCODER="${FLB_UNICODE_ENCODER}" \ + -DFLB_PREFER_SYSTEM_LIB_ZSTD="${FLB_PREFER_SYSTEM_LIB_ZSTD}" \ ../ VOLUME [ "/output" ] diff --git a/packaging/distros/centos/Dockerfile b/packaging/distros/centos/Dockerfile index fc427764455..68628aed5c7 100644 --- a/packaging/distros/centos/Dockerfile +++ b/packaging/distros/centos/Dockerfile @@ -41,6 +41,8 @@ ARG FLB_UNICODE_ENCODER=Off ENV FLB_UNICODE_ENCODER=$FLB_UNICODE_ENCODER ARG FLB_KAFKA=Off ENV FLB_KAFKA=$FLB_KAFKA +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # centos/7.arm64v8 base image FROM arm64v8/centos:7 AS centos-7.arm64v8-base @@ -77,6 +79,8 @@ ARG FLB_UNICODE_ENCODER=Off ENV FLB_UNICODE_ENCODER=$FLB_UNICODE_ENCODER ARG FLB_KAFKA=Off ENV FLB_KAFKA=$FLB_KAFKA +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # Need larger page size ARG FLB_JEMALLOC_OPTIONS="--with-lg-page=16 --with-lg-quantum=3" @@ -118,6 +122,8 @@ ARG FLB_UNICODE_ENCODER=On ENV FLB_UNICODE_ENCODER=$FLB_UNICODE_ENCODER ARG FLB_KAFKA=On ENV FLB_KAFKA=$FLB_KAFKA +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # centos/8.arm64v8 base image FROM arm64v8/centos:8 AS centos-8.arm64v8-base @@ -157,6 +163,8 @@ ARG FLB_UNICODE_ENCODER=On ENV FLB_UNICODE_ENCODER=$FLB_UNICODE_ENCODER ARG FLB_KAFKA=On ENV FLB_KAFKA=$FLB_KAFKA +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # Need larger page size ARG FLB_JEMALLOC_OPTIONS="--with-lg-page=16 --with-lg-quantum=3" @@ -187,6 +195,8 @@ ENV PATH="${CMAKE_HOME}/bin:${PATH}" ARG FLB_OUT_PGSQL=On ENV FLB_OUT_PGSQL=$FLB_OUT_PGSQL +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # hadolint ignore=DL3029 FROM --platform=arm64 quay.io/centos/centos:stream9 AS centos-9.arm64v8-base @@ -220,6 +230,8 @@ ARG FLB_UNICODE_ENCODER=On ENV FLB_UNICODE_ENCODER=$FLB_UNICODE_ENCODER ARG FLB_KAFKA=On ENV FLB_KAFKA=$FLB_KAFKA +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # Need larger page size ARG FLB_JEMALLOC_OPTIONS="--with-lg-page=16 --with-lg-quantum=3" @@ -238,7 +250,7 @@ RUN dnf -y install 'dnf-command(config-manager)' && dnf -y config-manager --set- wget unzip systemd-devel wget flex bison \ postgresql-libs postgresql-devel postgresql-server postgresql \ cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libcurl-devel pkgconf-pkg-config \ - libyaml-devel zlib-devel \ + libyaml-devel zlib-devel libzstd-devel \ tar gzip && \ dnf clean all && \ mkdir -p "${CMAKE_HOME}" && \ @@ -250,6 +262,9 @@ ENV PATH="${CMAKE_HOME}/bin:${PATH}" ARG FLB_OUT_PGSQL=On ENV FLB_OUT_PGSQL=$FLB_OUT_PGSQL +# Use system installed libzstd library. +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=On +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # hadolint ignore=DL3029 FROM --platform=arm64 quay.io/centos/centos:stream10 AS centos-10.arm64v8-base @@ -267,7 +282,7 @@ RUN dnf -y install 'dnf-command(config-manager)' && dnf -y config-manager --set- wget unzip systemd-devel wget flex bison \ postgresql-libs postgresql-devel postgresql-server postgresql \ cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libcurl-devel pkgconf-pkg-config \ - libyaml-devel zlib-devel \ + libyaml-devel zlib-devel libzstd-devel \ tar gzip && \ dnf clean all && \ mkdir -p "${CMAKE_HOME}" && \ @@ -283,6 +298,9 @@ ARG FLB_UNICODE_ENCODER=On ENV FLB_UNICODE_ENCODER=$FLB_UNICODE_ENCODER ARG FLB_KAFKA=On ENV FLB_KAFKA=$FLB_KAFKA +# Use system installed libzstd library. +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=On +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # Need larger page size ARG FLB_JEMALLOC_OPTIONS="--with-lg-page=16 --with-lg-quantum=3" @@ -328,6 +346,7 @@ RUN cmake -DCMAKE_INSTALL_PREFIX="$CMAKE_INSTALL_PREFIX" \ -DFLB_JEMALLOC="${FLB_JEMALLOC}" \ -DFLB_CHUNK_TRACE="${FLB_CHUNK_TRACE}" \ -DFLB_UNICODE_ENCODER="${FLB_UNICODE_ENCODER}" \ + -DFLB_PREFER_SYSTEM_LIB_ZSTD="${FLB_PREFER_SYSTEM_LIB_ZSTD}" \ ../ VOLUME [ "/output" ] diff --git a/packaging/distros/rockylinux/Dockerfile b/packaging/distros/rockylinux/Dockerfile index 3de0bcaa78e..8a30978fbd7 100644 --- a/packaging/distros/rockylinux/Dockerfile +++ b/packaging/distros/rockylinux/Dockerfile @@ -23,6 +23,9 @@ RUN yum -y update && \ cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config && \ yum clean all +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD + # rockylinux/8.arm64v8 base image # hadolint ignore=DL3029 FROM --platform=arm64 rockylinux/rockylinux:8 AS rockylinux-8.arm64v8-base @@ -40,6 +43,8 @@ RUN yum -y update && \ cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config && \ yum clean all +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # Need larger page size ARG FLB_JEMALLOC_OPTIONS="--with-lg-page=16 --with-lg-quantum=3" ENV FLB_JEMALLOC_OPTIONS=$FLB_JEMALLOC_OPTIONS @@ -57,6 +62,9 @@ RUN yum -y update && \ cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config && \ yum clean all +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD + # rockylinux/9.arm64v8 base image # hadolint ignore=DL3029 FROM --platform=arm64 rockylinux/rockylinux:9 AS rockylinux-9.arm64v8-base @@ -74,6 +82,8 @@ RUN yum -y update && \ cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config && \ yum clean all +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=Off +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # Need larger page size ARG FLB_JEMALLOC_OPTIONS="--with-lg-page=16 --with-lg-quantum=3" ENV FLB_JEMALLOC_OPTIONS=$FLB_JEMALLOC_OPTIONS @@ -88,9 +98,14 @@ RUN yum -y update && \ yum install -y --allowerasing rpm-build curl ca-certificates gcc gcc-c++ cmake make bash \ wget unzip systemd-devel wget flex bison \ postgresql-libs postgresql-devel postgresql-server postgresql \ - cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config && \ + cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config \ + libzstd-devel && \ yum clean all +# Use system installed libzstd library. +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=On +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD + # rockylinux/10.arm64v8 base image # hadolint ignore=DL3029 FROM --platform=arm64 rockylinux/rockylinux:10 AS rockylinux-10.arm64v8-base @@ -105,9 +120,13 @@ RUN yum -y update && \ yum install -y --allowerasing rpm-build curl ca-certificates gcc gcc-c++ cmake make bash \ wget unzip systemd-devel wget flex bison \ postgresql-libs postgresql-devel postgresql-server postgresql \ - cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config && \ + cyrus-sasl-lib cyrus-sasl-devel openssl openssl-libs openssl-devel libyaml-devel pkgconf-pkg-config \ + libzstd-devel && \ yum clean all +# Use system installed libzstd library. +ARG FLB_PREFER_SYSTEM_LIB_ZSTD=On +ENV FLB_PREFER_SYSTEM_LIB_ZSTD=$FLB_PREFER_SYSTEM_LIB_ZSTD # Need larger page size ARG FLB_JEMALLOC_OPTIONS="--with-lg-page=16 --with-lg-quantum=3" ENV FLB_JEMALLOC_OPTIONS=$FLB_JEMALLOC_OPTIONS @@ -155,6 +174,7 @@ RUN cmake -DCMAKE_INSTALL_PREFIX="$CMAKE_INSTALL_PREFIX" \ -DFLB_JEMALLOC="${FLB_JEMALLOC}" \ -DFLB_CHUNK_TRACE="${FLB_CHUNK_TRACE}" \ -DFLB_UNICODE_ENCODER="${FLB_UNICODE_ENCODER}" \ + -DFLB_PREFER_SYSTEM_LIB_ZSTD="${FLB_PREFER_SYSTEM_LIB_ZSTD}" \ ../ VOLUME [ "/output" ]