Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  duckdb.cmake  Sprache: unbekannt

 
Spracherkennung für: .cmake vermutete Sprache: Postscript {Postscript[54] Python[54] R[54]} [Methode: maximale Elemente, drei Dimensionen]

# Copyright (c) 2026, MariaDB Foundation.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA

#
# Build DuckDB static libraries from submodule source.
#
# The upstream DuckDB repo lives at storage/duckdb/third_parties/duckdb/
# as a git submodule.  We build it via ExternalProject so its CMake targets
# (including one named "duckdb") don't clash with the MariaDB plugin target
# of the same name created by MYSQL_ADD_PLUGIN().
#

SET(DUCKDB_SUBMODULE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_parties/duckdb")
SET(DUCKDB_INCLUDE_DIR   "${DUCKDB_SUBMODULE_DIR}/src/include")

INCLUDE(ExternalProject)

# Map MariaDB build type to a DuckDB-friendly one.
IF(CMAKE_BUILD_TYPE MATCHES "[Dd]ebug")
  SET(_DUCKDB_BUILD_TYPE "Debug")
ELSE()
  SET(_DUCKDB_BUILD_TYPE "Release")
ENDIF()

SET(_DUCKDB_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/duckdb-build")

# The individual static archives DuckDB produces (for the three extensions
# listed in cmake/duckdb_extensions.cmake: core_functions, icu, json).
SET(_DUCKDB_STATIC_LIBS
  "${_DUCKDB_BUILD_DIR}/src/libduckdb_static.a"
  "${_DUCKDB_BUILD_DIR}/extension/libduckdb_generated_extension_loader.a"
  "${_DUCKDB_BUILD_DIR}/extension/core_functions/libcore_functions_extension.a"
  "${_DUCKDB_BUILD_DIR}/extension/icu/libicu_extension.a"
  "${_DUCKDB_BUILD_DIR}/extension/parquet/libparquet_extension.a"
  "${_DUCKDB_BUILD_DIR}/extension/json/libjson_extension.a"
)

MESSAGE(STATUS "=== Building DuckDB from submodule (${DUCKDB_SUBMODULE_DIR}) ===")
ADD_SUBMODULE(third_parties/duckdb)

# Local patches applied on top of the pinned submodule commit.
#
# duckdb-pr24061-setval.diff: backport of upstream PR #24061 ("Add SetVal",
# merged 2026-07-23, first release after v1.5.2) rewritten against the v1.5.2
# API. Provides setval('seq', value[, is_called]) needed for AUTO_INCREMENT
# counter repositioning (TRUNCATE, ALTER ... AUTO_INCREMENT=N, explicit-id
# reconciliation). Drop when the submodule is bumped to a release containing
# the PR: the apply below will fail loudly on an already-present setval.
SET(_DUCKDB_PATCH "${CMAKE_CURRENT_SOURCE_DIR}/patches/duckdb-pr24061-setval.diff")
SET(_DUCKDB_GIT_DESCRIBE "v1.5.5-0-g0000000000")

# Upstream sets DUCKDB_EXTENSION_JEMALLOC_LINKED via add_extension_definitions(),
# which runs in extension/ but NOT in src/, so allocator.cpp (in duckdb_static)
# compiles the glibc malloc() path even though libjemalloc_extension.a is linked.
# Define it globally + add the jemalloc header dir so the USE_JEMALLOC branch is active.
SET(_DUCKDB_EXTRA_CXX_FLAGS "")
# GCC 16+ warns about DuckDB classes in SFINAE contexts (upstream issue, not ours).
# Silence it for DuckDB's own ExternalProject build too.
MY_CHECK_CXX_COMPILER_FLAG("-Wsfinae-incomplete")
IF(have_CXX__Wsfinae_incomplete)
  STRING(APPEND _DUCKDB_EXTRA_CXX_FLAGS " -Wno-sfinae-incomplete")
ENDIF()

IF(WITH_ASAN)
  SET(ADDRESS_SANITIZER TRUE)
ELSE()
  SET(ADDRESS_SANITIZER FALSE)
ENDIF()

IF(WITH_UBSAN)
  SET(UB_SANITIZER TRUE)
ELSE()
  SET(UB_SANITIZER FALSE)
ENDIF()

ExternalProject_Add(duckdb_build
  PREFIX          "${_DUCKDB_BUILD_DIR}"
  SOURCE_DIR      "${DUCKDB_SUBMODULE_DIR}"
  BINARY_DIR      "${_DUCKDB_BUILD_DIR}"
  # Idempotent: skip when the working tree already carries the patch.
  PATCH_COMMAND   bash -c "echo '${_DUCKDB_GIT_DESCRIBE}' >/dev/null && (git apply --reverse --check '${_DUCKDB_PATCH}' 2>/dev/null || git apply --verbose '${_DUCKDB_PATCH}')"
  CMAKE_ARGS
    -DCMAKE_BUILD_TYPE=${_DUCKDB_BUILD_TYPE}
    -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
    -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
    -DCMAKE_POSITION_INDEPENDENT_CODE=ON
    -DBUILD_SHELL=OFF
    -DBUILD_UNITTESTS=OFF
    -DENABLE_UNITTEST_CPP_TESTS=OFF
    -DBUILD_PYTHON=OFF
    -DBUILD_BENCHMARKS=OFF
    -DBUILD_TPCE=OFF
    -DEXTENSION_STATIC_BUILD=1
    "-DDUCKDB_EXTENSION_CONFIGS=${CMAKE_CURRENT_SOURCE_DIR}/cmake/duckdb_extensions.cmake"
    "-DCMAKE_CXX_FLAGS=${_DUCKDB_EXTRA_CXX_FLAGS}"
    -DENABLE_SANITIZER=${ADDRESS_SANITIZER}
    -DENABLE_UBSAN=${UB_SANITIZER}
    -DOVERRIDE_GIT_DESCRIBE=${_DUCKDB_GIT_DESCRIBE}
  INSTALL_COMMAND  ""
  BUILD_BYPRODUCTS ${_DUCKDB_STATIC_LIBS}
  USES_TERMINAL_BUILD ON
)

# Expose all DuckDB archives as a single INTERFACE target so the rest of the
# cmake tree links against "libduckdb" unchanged.
ADD_LIBRARY(libduckdb INTERFACE)
TARGET_LINK_LIBRARIES(libduckdb INTERFACE -Wl,--start-group ${_DUCKDB_STATIC_LIBS} -Wl,--end-group)
ADD_DEPENDENCIES(libduckdb duckdb_build)

MESSAGE(STATUS "DuckDB include: ${DUCKDB_INCLUDE_DIR}")
MESSAGE(STATUS "DuckDB libs:    ${_DUCKDB_STATIC_LIBS}")

INCLUDE_DIRECTORIES(BEFORE SYSTEM "${DUCKDB_INCLUDE_DIR}")
INCLUDE_DIRECTORIES(BEFORE SYSTEM "${DUCKDB_SUBMODULE_DIR}/third_party/re2")
SET(DUCKDB_LIBRARY libduckdb)

[Dauer der Verarbeitung: 0.15 Sekunden, vorverarbeitet 2026-10-08]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1126438
#Domains=1897691