From 31fbd3229673b8b8d1e16ef5f730735d9ec87aa3 Mon Sep 17 00:00:00 2001 From: MeteroSky Date: Wed, 25 Mar 2026 22:00:21 +0800 Subject: [PATCH 1/2] librocksdb_sys: link liburing when available Signed-off-by: MeteroSky --- librocksdb_sys/build.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/librocksdb_sys/build.rs b/librocksdb_sys/build.rs index 3d0235cff..a8ff3a2e2 100644 --- a/librocksdb_sys/build.rs +++ b/librocksdb_sys/build.rs @@ -17,6 +17,7 @@ extern crate cmake; use cc::Build; use cmake::Config; +use std::fs; use std::path::{Path, PathBuf}; use std::{env, str}; @@ -170,6 +171,7 @@ fn build_rocksdb() -> Build { .very_verbose(true) .build(); let build_dir = format!("{}/build", dst.display()); + link_optional_uring(&build_dir); let mut build = Build::new(); if target_os == "windows" { let profile = match &*env::var("PROFILE").unwrap_or_else(|_| "debug".to_owned()) { @@ -221,3 +223,42 @@ fn build_rocksdb() -> Build { ); build } + +fn link_optional_uring(build_dir: &str) { + let cache_path = Path::new(build_dir).join("CMakeCache.txt"); + let cache = match fs::read_to_string(&cache_path) { + Ok(cache) => cache, + Err(_) => return, + }; + + let uring_path = cache + .lines() + .find_map(|line| line.strip_prefix("uring_LIBRARIES:FILEPATH=")) + .map(str::trim) + .filter(|path| !path.is_empty()); + + let Some(uring_path) = uring_path else { + return; + }; + + let path = Path::new(uring_path); + let Some(parent) = path.parent() else { + return; + }; + let Some(file_name) = path.file_name().and_then(|name| name.to_str()) else { + return; + }; + let Some(libname) = file_name + .strip_prefix("lib") + .and_then(|name| name.split('.').next()) + else { + return; + }; + + println!("cargo:rustc-link-search=native={}", parent.display()); + if file_name.ends_with(".a") { + println!("cargo:rustc-link-lib=static={}", libname); + } else { + println!("cargo:rustc-link-lib=dylib={}", libname); + } +} From 2850f47adc65757b88d630e3cdf0418db1873f82 Mon Sep 17 00:00:00 2001 From: MeteroSky Date: Wed, 25 Mar 2026 22:20:34 +0800 Subject: [PATCH 2/2] adjust link order Signed-off-by: MeteroSky --- librocksdb_sys/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librocksdb_sys/build.rs b/librocksdb_sys/build.rs index a8ff3a2e2..1e30962c1 100644 --- a/librocksdb_sys/build.rs +++ b/librocksdb_sys/build.rs @@ -171,7 +171,6 @@ fn build_rocksdb() -> Build { .very_verbose(true) .build(); let build_dir = format!("{}/build", dst.display()); - link_optional_uring(&build_dir); let mut build = Build::new(); if target_os == "windows" { let profile = match &*env::var("PROFILE").unwrap_or_else(|_| "debug".to_owned()) { @@ -212,6 +211,7 @@ fn build_rocksdb() -> Build { println!("cargo:rustc-link-lib=static=lz4"); println!("cargo:rustc-link-lib=static=zstd"); println!("cargo:rustc-link-lib=static=snappy"); + link_optional_uring(&build_dir); println!( "cargo:rerun-if-changed={}",