Skip to content

Commit bdbe62f

Browse files
committed
initial
Signed-off-by: Mikhail Kot <mikhail@spiraldb.com>
1 parent 3d7bbfb commit bdbe62f

1 file changed

Lines changed: 28 additions & 7 deletions

File tree

vortex-duckdb/build.rs

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -397,17 +397,40 @@ fn cbindgen_rust2c(crate_dir: &Path) {
397397
}
398398

399399
fn main() {
400-
println!("cargo:rerun-if-env-changed=DUCKDB_VERSION");
400+
println!("cargo:rerun-if-changed=cpp/include");
401401
println!("cargo:rerun-if-env-changed=VX_DUCKDB_DEBUG");
402402
println!("cargo:rerun-if-env-changed=VX_DUCKDB_SAN");
403403
println!("cargo:rerun-if-env-changed=CARGO_HTTP_TIMEOUT");
404404
println!("cargo:rerun-if-env-changed=HTTP_TIMEOUT");
405405
println!("cargo:rerun-if-env-changed=TARGET");
406406

407-
// `DUCKDB_VERSION` is set by the extension build in CI.
408-
// This is to ensure we don't implicitly build against a different DuckDB
409-
// version during an extension build which might lead to subtle ABI breaks,
410-
// e.g. reordering fields in C++ structs.
407+
// These two variables are set in duckdb-vortex's CI. Don't download
408+
// duckdb if they are present
409+
println!("cargo:rerun-if-env-changed=DUCKDB_SOURCE_DIR");
410+
println!("cargo:rerun-if-env-changed=DUCKDB_VERSION");
411+
412+
// sanity check that either none or both are provided
413+
assert_eq!(
414+
env::var("DUCKDB_VERSION").is_ok(),
415+
env::var("DUCKDB_SOURCE_DIR").is_ok()
416+
);
417+
// If variables are not set, we are either running locally or
418+
// in vortex's CI.
419+
420+
let crate_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
421+
if let Some(source_dir) = env::var_os("DUCKDB_SOURCE_DIR") {
422+
let source_dir = PathBuf::from(source_dir);
423+
let duckdb_include_dir = source_dir.join("src").join("include");
424+
println!(
425+
"cargo:info=Using DuckDB source from DUCKDB_SOURCE_DIR={}",
426+
source_dir.display()
427+
);
428+
bindgen_c2rust(&crate_dir, &duckdb_include_dir);
429+
cbindgen_rust2c(&crate_dir);
430+
compile_cpp(&duckdb_include_dir);
431+
return;
432+
}
433+
411434
let version = env::var("DUCKDB_VERSION")
412435
// You can also change this version to a commit hash
413436
.unwrap_or_else(|_| DEFAULT_DUCKDB_VERSION.to_owned());
@@ -417,7 +440,6 @@ fn main() {
417440
DuckDBVersion::Commit(c) => println!("cargo:info=Using DuckDB commit: {c}"),
418441
}
419442

420-
let crate_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
421443
let duckdb_dir = crate_dir.join("duckdb");
422444
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
423445
let library_dir = out_dir.join(format!("duckdb-lib-{version}"));
@@ -486,7 +508,6 @@ fn main() {
486508
};
487509

488510
let duckdb_include_dir = inner_dir.join("src").join("include");
489-
println!("cargo:rerun-if-changed=cpp/include");
490511
bindgen_c2rust(&crate_dir, &duckdb_include_dir);
491512
cbindgen_rust2c(&crate_dir);
492513
compile_cpp(&duckdb_include_dir);

0 commit comments

Comments
 (0)