IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
MESSAGE_ONCE(duckdb "DuckDB: not Linux, skipping")
return()
ENDIF()
IF(NOT (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR
CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64"))
MESSAGE_ONCE(duckdb "DuckDB: not x86_64 or aarch64, skipping")
return()
ENDIF()
# Catch -m32 / multilib builds (e.g. 32-bit build inside an x86_64 CI
# container): CMAKE_SYSTEM_PROCESSOR still reports x86_64, but the target is
# 32-bit. DuckDB (and its jemalloc extension) is 64-bit only.
IF(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
MESSAGE_ONCE(duckdb "DuckDB: not a 64-bit build, skipping")
return()
ENDIF()
# Check C++17 compiler support
MY_CHECK_CXX_COMPILER_FLAG("-std=c++17")
IF(NOT have_CXX__std_c__17)
MESSAGE_ONCE(duckdb "DuckDB: C++ compiler does not support -std=c++17, skipping")
RETURN()
ENDIF()
# libduckdb_bundle.a is built without debug STL wrappers.
# Mismatched _GLIBCXX_DEBUG changes sizeof(std::vector) → SIGSEGV.
SET(CMAKE_CXX_FLAGS_DEBUG
"${CMAKE_CXX_FLAGS_DEBUG} -U_GLIBCXX_DEBUG -U_GLIBCXX_ASSERTIONS")
# Plugin sources (handler layer + UDFs whose extern "C" symbols must be
# in the final .so for dlsym() loading).
SET(DUCKDB_PLUGIN_SOURCES
ha_duckdb.cc
ha_duckdb_pushdown.cc
duckdb_udf.cc
)
MYSQL_ADD_PLUGIN(duckdb ${DUCKDB_PLUGIN_SOURCES} STORAGE_ENGINE MODULE_ONLY
COMPONENT duckdb-engine)
SET(CPACK_RPM_duckdb-engine_PACKAGE_SUMMARY "DuckDB storage engine for MariaDB server" PARENT_SCOPE)
SET(CPACK_RPM_duckdb-engine_PACKAGE_DESCRIPTION "The MariaDB DuckDB storage
engine embeds DuckDB as a pluggable storage engine, enabling fast analytical
(OLAP) query processing directly inside MariaDB." PARENT_SCOPE)
IF(TARGET duckdb)
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/duckdb.cmake)
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/duckdb_target_setup.cmake)
# Provide MariaDB server include paths to sub-libraries.
# MYSQL_ADD_PLUGIN normally does this, but it runs after ADD_SUBDIRECTORY.
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/sql
${CMAKE_BINARY_DIR}/include
${PCRE_INCLUDE_DIRS}
${SSL_INCLUDE_DIRS}
${ZLIB_INCLUDE_DIRS})
# Build sub-libraries.
ADD_SUBDIRECTORY(common)
ADD_SUBDIRECTORY(convertor)
ADD_SUBDIRECTORY(runtime)
# atomic: GCC lowers the 16-byte atomic ops of the AUTO_INCREMENT block
# cache (Duckdb_share::autoinc_range) to libatomic calls.
target_link_libraries(duckdb duckdb_runtime duckdb_convertor duckdb_common
${DUCKDB_LIBRARY} atomic
)
duckdb_setup_target(duckdb)
TARGET_INCLUDE_DIRECTORIES(duckdb PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/common
${CMAKE_CURRENT_SOURCE_DIR}/convertor
${CMAKE_CURRENT_SOURCE_DIR}/runtime
)
ENDIF()
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-10-08)
¤
*© Formatika GbR, Deutschland