1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
Description: Use system zstd and xxhash libraries
Adds USE_SYSTEM_ZSTD cmake option. When enabled, thin shim headers
include system zstd.h and xxhash.h inside the duckdb_zstd namespace
so that existing duckdb_zstd:: references remain valid without
patching all call sites.
Author: Dominique Belhachemi <domibel@debian.org>
Forwarded: not-needed
Last-Update: 2026-03-27
Index: duckdb/CMakeLists.txt
===================================================================
--- duckdb.orig/CMakeLists.txt
+++ duckdb/CMakeLists.txt
@@ -714,7 +714,12 @@ include_directories(third_party/mbedtls/
include_directories(third_party/jaro_winkler)
include_directories(third_party/vergesort)
include_directories(third_party/yyjson/include)
-include_directories(third_party/zstd/include)
+option(USE_SYSTEM_ZSTD "Use system-provided zstd library" OFF)
+if(USE_SYSTEM_ZSTD)
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/include/shims/zstd)
+else()
+ include_directories(third_party/zstd/include)
+endif()
# todo only regenerate ub file if one of the input files changed hack alert
function(enable_unity_build UB_SUFFIX SOURCE_VARIABLE_NAME)
@@ -834,7 +839,9 @@ add_third_party(re2)
add_third_party(skiplist)
add_third_party(utf8proc)
add_third_party(yyjson)
-add_third_party(zstd)
+if(NOT USE_SYSTEM_ZSTD)
+ add_third_party(zstd)
+endif()
if(NOT DUCKDB_EXPLICIT_PLATFORM)
set(VERSION_SOURCES tools/utils/test_platform.cpp)
Index: duckdb/extension/parquet/CMakeLists.txt
===================================================================
--- duckdb.orig/extension/parquet/CMakeLists.txt
+++ duckdb/extension/parquet/CMakeLists.txt
@@ -84,7 +84,15 @@ build_static_extension(parquet ${PARQUET
set(PARAMETERS "-warnings")
build_loadable_extension(parquet ${PARAMETERS} ${PARQUET_EXTENSION_FILES})
-target_link_libraries(parquet_loadable_extension duckdb_mbedtls duckdb_zstd)
+target_link_libraries(parquet_loadable_extension duckdb_mbedtls)
+if(NOT USE_SYSTEM_ZSTD)
+ target_link_libraries(parquet_loadable_extension duckdb_zstd)
+else()
+ find_package(PkgConfig REQUIRED)
+ pkg_check_modules(libzstd REQUIRED IMPORTED_TARGET libzstd)
+ pkg_check_modules(libxxhash REQUIRED IMPORTED_TARGET libxxhash)
+ target_link_libraries(parquet_loadable_extension PkgConfig::libzstd PkgConfig::libxxhash)
+endif()
install(
TARGETS parquet_extension
Index: duckdb/src/CMakeLists.txt
===================================================================
--- duckdb.orig/src/CMakeLists.txt
+++ duckdb/src/CMakeLists.txt
@@ -82,8 +82,16 @@ set(DUCKDB_LINK_LIBS
duckdb_fastpforlib
duckdb_skiplistlib
duckdb_mbedtls
- duckdb_yyjson
- duckdb_zstd)
+ duckdb_yyjson)
+
+if(USE_SYSTEM_ZSTD)
+ find_package(PkgConfig REQUIRED)
+ pkg_check_modules(libzstd REQUIRED IMPORTED_TARGET libzstd)
+ pkg_check_modules(libxxhash REQUIRED IMPORTED_TARGET libxxhash)
+ list(APPEND DUCKDB_SYSTEM_LIBS PkgConfig::libzstd PkgConfig::libxxhash)
+else()
+ list(APPEND DUCKDB_LINK_LIBS duckdb_zstd)
+endif()
foreach(LINK_LIB ${DUCKDB_LINK_LIBS})
list(APPEND LINK_OBJECTS $<TARGET_OBJECTS:${LINK_LIB}>)
Index: duckdb/src/include/shims/zstd/zstd.h
===================================================================
--- /dev/null
+++ duckdb/src/include/shims/zstd/zstd.h
@@ -0,0 +1,6 @@
+#pragma once
+#include <stddef.h>
+#include <limits.h>
+namespace duckdb_zstd {
+#include_next <zstd.h>
+} // namespace duckdb_zstd
Index: duckdb/src/include/shims/zstd/zstd/common/xxhash.hpp
===================================================================
--- /dev/null
+++ duckdb/src/include/shims/zstd/zstd/common/xxhash.hpp
@@ -0,0 +1,8 @@
+#pragma once
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+namespace duckdb_zstd {
+#include <xxhash.h>
+} // namespace duckdb_zstd
|