@@ -328,10 +328,14 @@ fn c2rust(crate_dir: &Path, duckdb_include_dir: &Path) {
328328 }
329329}
330330
331- fn cpp ( duckdb_include_dir : & Path ) {
331+ fn cpp ( duckdb_include_dir : & Path , build_type : & str ) {
332+ let mut flags = vec ! [ "-Wall" , "-Wextra" , "-Wpedantic" , "-Werror" ] ;
333+ if build_type == "release" {
334+ flags. extend_from_slice ( & [ "-flto=auto" ] ) ;
335+ }
332336 cc:: Build :: new ( )
333337 . std ( "c++20" )
334- . flags ( [ "-Wall" , "-Wextra" , "-Wpedantic" ] )
338+ . flags ( flags )
335339 . cpp ( true )
336340 . include ( duckdb_include_dir)
337341 . include ( "cpp/include" )
@@ -392,8 +396,12 @@ fn main() {
392396
393397 let crate_dir = PathBuf :: from ( env:: var ( "CARGO_MANIFEST_DIR" ) . unwrap ( ) ) ;
394398 let duckdb_dir = crate_dir. join ( "duckdb" ) ;
395- let out_dir = PathBuf :: from ( env:: var ( "OUT_DIR" ) . unwrap ( ) ) ;
396- let library_dir = out_dir. join ( format ! ( "duckdb-lib-{version}" ) ) ;
399+ // Cargo has changed OUT_DIR behaviour so for every branch and build we have
400+ // a different directory e.g.
401+ // ~/vortex/target/release/build/vortex-duckdb-b6bc1fb73230910e/out/duckdb-lib-v1.5.2
402+ // We don't want this since artifacts are the same.
403+ // We can't use CARGO_TARGET_DIR since it's out of tree.
404+ let library_dir = duckdb_dir. join ( format ! ( "duckdb-lib-{version}" ) ) ;
397405
398406 let library_dir_str = library_dir. display ( ) ;
399407 println ! ( "cargo:rustc-link-search=native={library_dir_str}" ) ;
@@ -414,7 +422,7 @@ fn main() {
414422 // Alternatively, set LD_LIBRARY_PATH (Linux) or DYLD_LIBRARY_PATH (macOS) at runtime.
415423 println ! ( "cargo:lib_dir={library_dir_str}" ) ;
416424
417- let source_dir = out_dir . join ( format ! ( "duckdb-source-{version}" ) ) ;
425+ let source_dir = duckdb_dir . join ( format ! ( "duckdb-source-{version}" ) ) ;
418426 let source_archive_url = match & version {
419427 DuckDBVersion :: Release ( v) => format ! ( "{DUCKDB_SOURCE_RELEASE_URL}/v{v}.zip" ) ,
420428 DuckDBVersion :: Commit ( c) => format ! ( "{DUCKDB_SOURCE_COMMIT_URL}/{c}.zip" ) ,
@@ -429,10 +437,6 @@ fn main() {
429437 extract ( & source_archive_path, & source_dir) ;
430438 }
431439
432- drop ( fs:: remove_file ( & duckdb_dir) ) ;
433- drop ( fs:: remove_dir_all ( & duckdb_dir) ) ;
434- std:: os:: unix:: fs:: symlink ( & source_dir, & duckdb_dir) . unwrap ( ) ;
435-
436440 let has_debug_env =
437441 env:: var ( "VX_DUCKDB_DEBUG" ) . is_ok_and ( |v| matches ! ( v. as_str( ) , "1" | "true" ) ) ;
438442 let build_type = match has_debug_env {
@@ -449,6 +453,6 @@ fn main() {
449453
450454 let duckdb_include_dir = inner_dir. join ( "src" ) . join ( "include" ) ;
451455 c2rust ( & crate_dir, & duckdb_include_dir) ;
452- cpp ( & duckdb_include_dir) ;
456+ cpp ( & duckdb_include_dir, build_type ) ;
453457 rust2c ( & crate_dir) ;
454458}
0 commit comments