#!/usr/bin/make -f export DH_VERBOSE = 1 export DEB_BUILD_MAINT_OPTIONS = hardening=+bindnow include /usr/share/dpkg/architecture.mk include /usr/share/dpkg/pkg-info.mk PKGVER := $(shell echo $(DEB_VERSION_UPSTREAM) | sed -E 's/\+dfsg[0-9]*$$//') # Silence GCC 16's new -Wsfinae-incomplete warnings DEB_CXXFLAGS_MAINT_APPEND = -Wno-sfinae-incomplete # reduce dbgsym file size DEB_CXXFLAGS_MAINT_APPEND += -g1 DEB_CFLAGS_MAINT_APPEND = -g1 # Fix ELF_LITERAL overflow ifeq ($(DEB_HOST_ARCH),alpha) DEB_LDFLAGS_MAINT_APPEND = -Wl,--sort-section,name endif export DEB_CXXFLAGS_MAINT_APPEND export DEB_CFLAGS_MAINT_APPEND export DEB_LDFLAGS_MAINT_APPEND %: dh $@ --buildsystem=cmake cmake_flags := \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHELL=TRUE \ -DBUILD_UNITTESTS=FALSE \ -DENABLE_SANITIZER=FALSE # Sets MAJOR/MINOR/PATCH version variables and the SOVERSION on the shared # library. DUCKDB_EXPLICIT_VERSION does NOT set these. cmake_flags += \ -DOVERRIDE_GIT_DESCRIBE=v2.0.0 \ -DSET_DUCKDB_LIBRARY_VERSION=TRUE # Release builds on amd64 default to -march=x86-64-v3 # since https://github.com/duckdb/duckdb/commit/84c0e6cebe # Use Debian's plain x86-64 (SSE2) baseline. ifeq ($(DEB_HOST_ARCH),amd64) cmake_flags += \ -DDUCKDB_OPTIMIZATION_PROFILE=NONE endif # In-tree extensions to compile statically into libduckdb.so, in addition to # the built-ins (parquet, core_functions, json, icu). cmake_flags += \ -DBUILD_EXTENSIONS="autocomplete" \ -DLINK_CORE_EXTENSIONS=TRUE # Out-of-tree extensions, built as standalone loadable .duckdb_extension DUCKDB_EXTERNAL_EXTENSIONS := httpfs quack sqlite_scanner postgres_scanner mysql_scanner cmake_flags += \ -DDUCKDB_EXTENSION_CONFIGS="$(CURDIR)/debian/extension-configs/httpfs.cmake;$(CURDIR)/debian/extension-configs/quack.cmake;$(CURDIR)/debian/extension-configs/sqlite.cmake;$(CURDIR)/debian/extension-configs/postgres.cmake;$(CURDIR)/debian/extension-configs/mysql.cmake" cmake_flags += \ -DEXTENSION_DIRECTORIES="~/.duckdb/extensions;/usr/lib/duckdb/extensions" \ -DDEBIAN_DUCKDB_SYSTEM_EXTENSION_PATH="/usr/lib/duckdb/extensions/" # Use system zstd and xxhash via shim headers in src/include/shims/zstd/. cmake_flags += \ -DUSE_SYSTEM_ZSTD=TRUE # Use system snappy, lz4 and brotli for parquet codecs. cmake_flags += \ -DUSE_SYSTEM_SNAPPY=TRUE \ -DUSE_SYSTEM_LZ4=TRUE \ -DUSE_SYSTEM_BROTLI=TRUE # Use system yyjson for JSON parsing. cmake_flags += \ -DUSE_SYSTEM_YYJSON=TRUE # Use system mbedtls instead of bundled 3.6.x sources. cmake_flags += \ -DUSE_SYSTEM_MBEDTLS=TRUE override_dh_auto_configure: @echo " ### Build flags: $$(date '+%Y-%m-%dT%H:%M:%S')" @echo " CFLAGS: $$(dpkg-buildflags --get CFLAGS)" @echo " CXXFLAGS: $$(dpkg-buildflags --get CXXFLAGS)" @echo " CPPFLAGS: $$(dpkg-buildflags --get CPPFLAGS)" @echo " LDFLAGS: $$(dpkg-buildflags --get LDFLAGS)" dh_auto_configure -- $(cmake_flags) # Static archives are needed during linking but are not shipped. # Remove them because Salsa is running out of disk space. override_dh_auto_install: dh_auto_install find debian/tmp/usr/lib -name '*.a' -delete # Install the loadable extensions, stripping the ELF content before # DuckDB's metadata footer is appended. set -e; \ PLATFORM=linux_$$(dpkg-architecture -q DEB_HOST_ARCH); \ for ext in $(DUCKDB_EXTERNAL_EXTENSIONS); do \ DEST=debian/duckdb/usr/lib/duckdb/extensions/v$(PKGVER)/$${PLATFORM}/$$ext.duckdb_extension; \ install -D -m0644 obj-*/repository/v$(PKGVER)/$${PLATFORM}/$$ext.duckdb_extension "$$DEST"; \ SRC_SIZE=$$(stat -c%s "$$DEST"); \ tail -c 512 "$$DEST" > "$$DEST.footer"; \ head -c $$((SRC_SIZE - 512)) "$$DEST" > "$$DEST.elf"; \ strip --strip-unneeded "$$DEST.elf"; \ cat "$$DEST.footer" >> "$$DEST.elf"; \ mv "$$DEST.elf" "$$DEST"; \ rm -f "$$DEST.footer"; \ chmod 0644 "$$DEST"; \ done # Raise dwz's 50M DIE limit (libduckdb exceeds it) and exclude the loadable # extensions (dwz/dh_strip would corrupt their trailing metadata footer). override_dh_dwz: dh_dwz --exclude=duckdb/extensions/ -- -L none override_dh_strip: dh_strip --exclude=duckdb/extensions/