chore(vendor): vendor DuckDB v1.1.3 + CMake target DuckDB::DuckDB
cpp/vendor/duckdb/ con: - include/duckdb.h (C API, versionado) - download_duckdb.sh (descarga libs precompiladas para linux/windows) - .gitignore (libduckdb.so, duckdb.dll, duckdb.lib, libduckdb_static.a) - README.md cpp/CMakeLists.txt anade target INTERFACE 'duckdb_vendored' (alias DuckDB::DuckDB) que las apps enlazan con target_link_libraries. duckdb_copy_runtime(<target>) copia la lib runtime al lado del exe en build time. Primer consumidor: graph_explorer (issue 0010).
This commit is contained in:
@@ -107,6 +107,39 @@ if(NOT SQLite3_FOUND AND NOT TARGET sqlite3_vendored)
|
|||||||
add_library(SQLite::SQLite3 ALIAS sqlite3_vendored)
|
add_library(SQLite::SQLite3 ALIAS sqlite3_vendored)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# --- DuckDB (precompiled libs — see cpp/vendor/duckdb/README.md) ---
|
||||||
|
# Header en vendor/duckdb/include/. Lib dinamica en linux/ o windows/ segun
|
||||||
|
# el target. Las libs estan gitignored — ejecutar
|
||||||
|
# `cpp/vendor/duckdb/download_duckdb.sh` la primera vez.
|
||||||
|
if(NOT TARGET duckdb_vendored)
|
||||||
|
set(DUCKDB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vendor/duckdb)
|
||||||
|
if(WIN32)
|
||||||
|
set(DUCKDB_LIB ${DUCKDB_DIR}/windows/duckdb.lib)
|
||||||
|
set(DUCKDB_RUNTIME ${DUCKDB_DIR}/windows/duckdb.dll)
|
||||||
|
else()
|
||||||
|
set(DUCKDB_LIB ${DUCKDB_DIR}/linux/libduckdb.so)
|
||||||
|
set(DUCKDB_RUNTIME ${DUCKDB_DIR}/linux/libduckdb.so)
|
||||||
|
endif()
|
||||||
|
if(NOT EXISTS ${DUCKDB_LIB})
|
||||||
|
message(WARNING "[duckdb] ${DUCKDB_LIB} no existe — corre cpp/vendor/duckdb/download_duckdb.sh")
|
||||||
|
endif()
|
||||||
|
add_library(duckdb_vendored INTERFACE)
|
||||||
|
target_include_directories(duckdb_vendored INTERFACE ${DUCKDB_DIR}/include)
|
||||||
|
target_link_libraries(duckdb_vendored INTERFACE ${DUCKDB_LIB})
|
||||||
|
add_library(DuckDB::DuckDB ALIAS duckdb_vendored)
|
||||||
|
|
||||||
|
# Helper para que las apps copien la runtime lib al lado del exe.
|
||||||
|
# add_imgui_app puede invocarlo, o cada app lo hace en su CMakeLists.
|
||||||
|
function(duckdb_copy_runtime target)
|
||||||
|
if(EXISTS ${DUCKDB_RUNTIME})
|
||||||
|
add_custom_command(TARGET ${target} POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
|
${DUCKDB_RUNTIME} $<TARGET_FILE_DIR:${target}>
|
||||||
|
COMMENT "Copying DuckDB runtime next to ${target}")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
endif()
|
||||||
|
|
||||||
# --- Framework ---
|
# --- Framework ---
|
||||||
# Incluye tokens.cpp (identidad visual Mantine dark + indigo), icon_font.cpp
|
# Incluye tokens.cpp (identidad visual Mantine dark + indigo), icon_font.cpp
|
||||||
# (Karla/Roboto/... + Tabler), app_settings.cpp (persistencia y ventana de
|
# (Karla/Roboto/... + Tabler), app_settings.cpp (persistencia y ventana de
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
linux/libduckdb.so
|
||||||
|
linux/libduckdb_static.a
|
||||||
|
windows/duckdb.dll
|
||||||
|
windows/duckdb.lib
|
||||||
Vendored
+31
@@ -0,0 +1,31 @@
|
|||||||
|
# DuckDB vendor
|
||||||
|
|
||||||
|
DuckDB v1.1.3 (C API) usado por `cpp/functions/duck/` y por apps como
|
||||||
|
`graph_explorer` (issue 0010 — nodo Table).
|
||||||
|
|
||||||
|
## Estructura
|
||||||
|
|
||||||
|
```
|
||||||
|
duckdb/
|
||||||
|
include/duckdb.h # C API (versionado)
|
||||||
|
linux/libduckdb.so # gitignored — bajar con download_duckdb.sh
|
||||||
|
windows/duckdb.dll # gitignored — bajar con download_duckdb.sh
|
||||||
|
windows/duckdb.lib # gitignored — bajar con download_duckdb.sh
|
||||||
|
download_duckdb.sh # script de descarga
|
||||||
|
```
|
||||||
|
|
||||||
|
## Setup primera vez
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd cpp/vendor/duckdb
|
||||||
|
./download_duckdb.sh # ambas plataformas
|
||||||
|
./download_duckdb.sh linux # solo lo que vayas a usar
|
||||||
|
```
|
||||||
|
|
||||||
|
## CMake
|
||||||
|
|
||||||
|
`cpp/CMakeLists.txt` define el target `duckdb_vendored` (alias `DuckDB::DuckDB`)
|
||||||
|
que las apps pueden enlazar con `target_link_libraries(<app> PRIVATE DuckDB::DuckDB)`.
|
||||||
|
|
||||||
|
El runtime requiere `libduckdb.so` (linux) o `duckdb.dll` (windows) en el
|
||||||
|
mismo directorio del exe — la regla CMake hace la copia automatica al build.
|
||||||
+46
@@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Descarga las libs precompiladas de DuckDB para linux y windows en
|
||||||
|
# cpp/vendor/duckdb/{linux,windows}/. El header duckdb.h vive en include/
|
||||||
|
# y SI esta versionado.
|
||||||
|
#
|
||||||
|
# Uso:
|
||||||
|
# ./download_duckdb.sh # ambas plataformas
|
||||||
|
# ./download_duckdb.sh linux # solo linux
|
||||||
|
# ./download_duckdb.sh windows # solo windows
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
VERSION="v1.1.3"
|
||||||
|
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
TMP="$(mktemp -d)"
|
||||||
|
trap "rm -rf $TMP" EXIT
|
||||||
|
|
||||||
|
target="${1:-all}"
|
||||||
|
|
||||||
|
dl_linux() {
|
||||||
|
echo "[duckdb] downloading linux libs..."
|
||||||
|
curl -sL -o "$TMP/lin.zip" \
|
||||||
|
"https://github.com/duckdb/duckdb/releases/download/${VERSION}/libduckdb-linux-amd64.zip"
|
||||||
|
mkdir -p "$HERE/linux"
|
||||||
|
unzip -o "$TMP/lin.zip" -d "$TMP/lin/" > /dev/null
|
||||||
|
cp "$TMP/lin/libduckdb.so" "$HERE/linux/"
|
||||||
|
echo "[duckdb] -> $HERE/linux/libduckdb.so ($(du -h "$HERE/linux/libduckdb.so" | cut -f1))"
|
||||||
|
}
|
||||||
|
|
||||||
|
dl_windows() {
|
||||||
|
echo "[duckdb] downloading windows libs..."
|
||||||
|
curl -sL -o "$TMP/win.zip" \
|
||||||
|
"https://github.com/duckdb/duckdb/releases/download/${VERSION}/libduckdb-windows-amd64.zip"
|
||||||
|
mkdir -p "$HERE/windows"
|
||||||
|
unzip -o "$TMP/win.zip" -d "$TMP/win/" > /dev/null
|
||||||
|
cp "$TMP/win/duckdb.dll" "$HERE/windows/"
|
||||||
|
cp "$TMP/win/duckdb.lib" "$HERE/windows/"
|
||||||
|
echo "[duckdb] -> $HERE/windows/duckdb.dll ($(du -h "$HERE/windows/duckdb.dll" | cut -f1))"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$target" in
|
||||||
|
linux) dl_linux ;;
|
||||||
|
windows) dl_windows ;;
|
||||||
|
all) dl_linux; dl_windows ;;
|
||||||
|
*) echo "Uso: $0 [linux|windows|all]"; exit 1 ;;
|
||||||
|
esac
|
||||||
Vendored
+4162
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user