|
| 1 | +.DEFAULT_GOAL := duckdb |
| 2 | + |
| 3 | +# --------------------------------------------------------------------------- |
| 4 | +# Config |
| 5 | + |
| 6 | +ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) |
| 7 | + |
| 8 | +UID=${shell id -u} |
| 9 | +GID=${shell id -g} |
| 10 | + |
| 11 | +LIB_SOURCE_DIR="${ROOT_DIR}/lib" |
| 12 | +LIB_DEBUG_DIR="${ROOT_DIR}/lib/build/Debug" |
| 13 | +LIB_RELEASE_DIR="${ROOT_DIR}/lib/build/Release" |
| 14 | +LIB_RELWITHDEBINFO_DIR="${ROOT_DIR}/lib/build/RelWithDebInfo" |
| 15 | +DUCKDB_WASM_DIR="${ROOT_DIR}/packages/duckdb/src/wasm" |
| 16 | + |
| 17 | +CI_IMAGE_NAMESPACE="duckdb" |
| 18 | +CI_IMAGE_NAME="wasm-ci" |
| 19 | +CI_IMAGE_TAG="$(shell cat ./actions/image/TAG)" |
| 20 | +CI_IMAGE_FULLY_QUALIFIED="${CI_IMAGE_NAMESPACE}/${CI_IMAGE_NAME}:${CI_IMAGE_TAG}" |
| 21 | +CACHE_DIRS=${ROOT_DIR}/.ccache/ ${ROOT_DIR}/.emscripten_cache/ |
| 22 | +IN_IMAGE_MOUNTS=-v${ROOT_DIR}:${ROOT_DIR} -v${ROOT_DIR}/.emscripten_cache/:/mnt/emscripten_cache/ -v${ROOT_DIR}/.ccache/:/mnt/ccache/ |
| 23 | +IN_IMAGE_ENV=-e CCACHE_DIR=/mnt/ccache -e CCACHE_BASEDIR=${ROOT_DIR}/lib/ -e EM_CACHE=/mnt/emscripten_cache/ |
| 24 | +EXEC_ENVIRONMENT?=docker run -it --rm ${IN_IMAGE_MOUNTS} ${IN_IMAGE_ENV} "${CI_IMAGE_FULLY_QUALIFIED}" |
| 25 | + |
| 26 | +CORES=$(shell grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu) |
| 27 | + |
| 28 | +# --------------------------------------------------------------------------- |
| 29 | +# Formatting |
| 30 | + |
| 31 | +# Format all source files |
| 32 | +.PHONY: format |
| 33 | +format: |
| 34 | + ${ROOT_DIR}/scripts/format.sh |
| 35 | + |
| 36 | +.PHONY: check_format |
| 37 | +check_format: |
| 38 | + ${ROOT_DIR}/scripts/format.sh check |
| 39 | + |
| 40 | +# --------------------------------------------------------------------------- |
| 41 | +# Building |
| 42 | + |
| 43 | +# Compile the core in debug mode |
| 44 | +.PHONY: lib |
| 45 | +lib: |
| 46 | + mkdir -p ${LIB_DEBUG_DIR} |
| 47 | + cmake -S ${LIB_SOURCE_DIR} -B ${LIB_DEBUG_DIR} \ |
| 48 | + -GNinja \ |
| 49 | + -DCMAKE_BUILD_TYPE=Debug \ |
| 50 | + -DCMAKE_EXPORT_COMPILE_COMMANDS=1 |
| 51 | + ninja -C ${LIB_DEBUG_DIR} |
| 52 | + |
| 53 | +# Compile the core in release mode |
| 54 | +.PHONY: lib_relwithdebinfo |
| 55 | +lib_relwithdebinfo: |
| 56 | + mkdir -p ${LIB_RELWITHDEBINFO_DIR} |
| 57 | + cmake -S ${LIB_SOURCE_DIR} -B ${LIB_RELWITHDEBINFO_DIR} \ |
| 58 | + -GNinja \ |
| 59 | + -DCMAKE_BUILD_TYPE=RelWithDebInfo |
| 60 | + ninja -C ${LIB_RELWITHDEBINFO_DIR} |
| 61 | + |
| 62 | +# Compile the core in release mode |
| 63 | +.PHONY: lib_release |
| 64 | +lib_release: |
| 65 | + mkdir -p ${LIB_RELEASE_DIR} |
| 66 | + cmake -S ${LIB_SOURCE_DIR} -B ${LIB_RELEASE_DIR} \ |
| 67 | + -GNinja \ |
| 68 | + -DCMAKE_BUILD_TYPE=Release |
| 69 | + ninja -C ${LIB_RELEASE_DIR} |
| 70 | + |
| 71 | +# Perf the library |
| 72 | +.PHONY: lib_perf |
| 73 | +lib_perf: lib_relwithdebinfo |
| 74 | + perf record --call-graph dwarf ${LIB_RELWITHDEBINFO_DIR}/tester --source_dir ${LIB_SOURCE_DIR} --gtest_filter=*CSV*ParseTest |
| 75 | + hotspot ./perf.data |
| 76 | + |
| 77 | +# Test the core library |
| 78 | +.PHONY: lib_tests |
| 79 | +lib_tests: lib |
| 80 | + ${LIB_DEBUG_DIR}/tester --source_dir ${LIB_SOURCE_DIR} --gtest_filter=* |
| 81 | + |
| 82 | +# Debug the core library |
| 83 | +.PHONY: lib_tests |
| 84 | +lib_tests_lldb: lib |
| 85 | + lldb ${LIB_DEBUG_DIR}/tester -- --source_dir ${LIB_SOURCE_DIR} --gtest_filter=* |
| 86 | + |
| 87 | +# Debug the core library |
| 88 | +.PHONY: lib_tests |
| 89 | +lib_tests_gdb: lib |
| 90 | + gdb --args ${LIB_DEBUG_DIR}/tester --source_dir ${LIB_SOURCE_DIR} --gtest_filter=* |
| 91 | + |
| 92 | +# Test the core library |
| 93 | +.PHONY: lib_tests_relwithdebinfo |
| 94 | +lib_tests_relwithdebinfo: lib_relwithdebinfo |
| 95 | + ${LIB_RELWITHDEBINFO_DIR}/tester --source_dir ${LIB_SOURCE_DIR} |
| 96 | + |
| 97 | +# Test the core library |
| 98 | +.PHONY: lib_tests_relwithdebinfo_lldb |
| 99 | +lib_tests_relwithdebinfo_lldb: lib_relwithdebinfo |
| 100 | + lldb ${LIB_RELWITHDEBINFO_DIR}/tester -- --source_dir ${LIB_SOURCE_DIR} |
| 101 | + |
| 102 | +# Debug the library |
| 103 | +.PHONY: lib_debug |
| 104 | +lib_debug: lib |
| 105 | + lldb --args ${LIB_DEBUG_DIR}/tester ${LIB_SOURCE_DIR} |
| 106 | + |
| 107 | +# Make sure we can access the wasm caches |
| 108 | +wasm_caches: |
| 109 | + mkdir -p ${ROOT_DIR}/.ccache ${ROOT_DIR}/.emscripten_cache |
| 110 | + chown -R $(id -u):$(id -g) ${ROOT_DIR}/.ccache ${ROOT_DIR}/.emscripten_cache |
| 111 | + |
| 112 | +# Build the wasm module with debug info |
| 113 | +.PHONY: wasm |
| 114 | +wasm: wasm_caches |
| 115 | + mkdir -p ${CACHE_DIRS} |
| 116 | + ${EXEC_ENVIRONMENT} ${ROOT_DIR}/scripts/wasm_build_lib.sh Fast |
| 117 | + |
| 118 | +# Build the wasm modules with all debug info |
| 119 | +.PHONY: wasm_debug |
| 120 | +wasm_debug: wasm_caches |
| 121 | + mkdir -p ${CACHE_DIRS} |
| 122 | + ${EXEC_ENVIRONMENT} ${ROOT_DIR}/scripts/wasm_build_lib.sh Debug |
| 123 | + |
| 124 | +# Build the wasm modules |
| 125 | +.PHONY: wasm_release |
| 126 | +wasm_release: wasm_caches |
| 127 | + mkdir -p ${CACHE_DIRS} |
| 128 | + ${EXEC_ENVIRONMENT} ${ROOT_DIR}/scripts/wasm_build_lib.sh Release |
| 129 | + |
| 130 | +# Build the duckdb library |
| 131 | +.PHONY: duckdb |
| 132 | +duckdb: |
| 133 | + yarn workspace @duckdb/duckdb-wasm build |
| 134 | + |
| 135 | +# Build the duckdb docs |
| 136 | +.PHONY: duckdb_docs |
| 137 | +duckdb_docs: |
| 138 | + yarn workspace @duckdb/duckdb-wasm docs |
| 139 | + |
| 140 | +# Run the duckdb javascript tests |
| 141 | +.PHONY: duckdb_tests |
| 142 | +duckdb_tests: duckdb |
| 143 | + yarn workspace @duckdb/duckdb-wasm test |
| 144 | + |
| 145 | +# Run the duckdb javascript tests in browser |
| 146 | +.PHONY: duckdb_tests_browser |
| 147 | +duckdb_tests_browser: duckdb |
| 148 | + yarn workspace @duckdb/duckdb-wasm test:browser |
| 149 | + |
| 150 | +# Run the duckdb javascript tests in browser |
| 151 | +.PHONY: duckdb_tests_browser |
| 152 | +duckdb_tests_debug: duckdb |
| 153 | + yarn workspace @duckdb/duckdb-wasm test:browser:dbg |
| 154 | + |
| 155 | +# Run the duckdb javascript tests on nodejs |
| 156 | +.PHONY: duckdb_tests_node |
| 157 | +duckdb_tests_node: duckdb |
| 158 | + yarn workspace @duckdb/duckdb-wasm test:node |
| 159 | + |
| 160 | +# C++ formatting |
| 161 | +.PHONY: clang_format |
| 162 | +clang_format: |
| 163 | + python3 ./scripts/run_clang_format.py \ |
| 164 | + --exclude ./lib/build \ |
| 165 | + --exclude ./lib/third_party \ |
| 166 | + -r ./lib/ |
| 167 | + |
| 168 | +# JS formatting |
| 169 | +.PHONY: eslint |
| 170 | +eslint: |
| 171 | + yarn workspace @duckdb/duckdb-wasm run lint |
| 172 | + |
| 173 | +# Install all yarn packages |
| 174 | +.PHONY: yarn_install |
| 175 | +yarn_install: |
| 176 | + yarn |
| 177 | + |
| 178 | +# --------------------------------------------------------------------------- |
| 179 | +# Environment |
| 180 | + |
| 181 | +# Generate the compile commands for the language server |
| 182 | +.PHONY: compile_commands |
| 183 | +compile_commands: |
| 184 | + mkdir -p ${LIB_DEBUG_DIR} |
| 185 | + cmake -S ${LIB_SOURCE_DIR} -B ${LIB_DEBUG_DIR} \ |
| 186 | + -GNinja \ |
| 187 | + -DCMAKE_BUILD_TYPE=Debug \ |
| 188 | + -DCMAKE_EXPORT_COMPILE_COMMANDS=1 |
| 189 | + ln -sf ${LIB_DEBUG_DIR}/compile_commands.json ${LIB_SOURCE_DIR}/compile_commands.json |
| 190 | + |
| 191 | +# Clean the repository |
| 192 | +.PHONY: clean |
| 193 | +clean: |
| 194 | + git clean -xfd |
| 195 | + git submodule foreach --recursive git clean -xfd |
| 196 | + git submodule update --init --recursive |
| 197 | + |
| 198 | +# Build the docker dev image |
| 199 | +.PHONY: docker_ci_image |
| 200 | +docker_ci_image: |
| 201 | + tar -cvf - ./actions/image/Dockerfile | docker build \ |
| 202 | + --platform linux/amd64 \ |
| 203 | + -t ${CI_IMAGE_FULLY_QUALIFIED} \ |
| 204 | + -f ./actions/image/Dockerfile \ |
| 205 | + --build-arg UID=${UID} \ |
| 206 | + --build-arg GID=${GID} \ |
| 207 | + - |
| 208 | + |
| 209 | +# Build infrastructure and packages required for development |
| 210 | +.PHONY: bootstrap |
| 211 | +bootstrap: |
| 212 | + git submodule update --init --recursive |
| 213 | + make docker_ci_image yarn_install |
| 214 | + make wasm |
| 215 | + make duckdb |
| 216 | + |
| 217 | +# Run all js tests |
| 218 | +.PHONY: jstests |
| 219 | +jstests: |
| 220 | + make duckdb_tests |
| 221 | + |
| 222 | +# --------------------------------------------------------------------------- |
| 223 | +# Data |
| 224 | + |
| 225 | +# Package the uni schema data |
| 226 | +UNI_SCHEMA_DIR="${ROOT_DIR}/data/uni" |
| 227 | +UNI_SCHEMA_OUT="${UNI_SCHEMA_DIR}/out" |
| 228 | +UNI_SCHEMA_PKG="${UNI_SCHEMA_DIR}/target/release/pkg_uni" |
| 229 | +.PHONY: pkg_uni_schema |
| 230 | +pkg_uni: |
| 231 | + cargo +nightly build --manifest-path="${UNI_SCHEMA_DIR}/Cargo.toml" --release |
| 232 | + mkdir -p ${UNI_SCHEMA_OUT} |
| 233 | + ${UNI_SCHEMA_PKG} ${UNI_SCHEMA_OUT} |
| 234 | + cd ${UNI_SCHEMA_OUT} && rm -f ./all.zip && zip ./all.zip ./*.parquet |
0 commit comments