diff --git a/ci/deps.sh b/ci/deps.sh index e3a8ff0d..4b96a519 100755 --- a/ci/deps.sh +++ b/ci/deps.sh @@ -8,7 +8,7 @@ for repo in $(jq -r 'keys[]' "$ROOT/deps.json"); do ver=$(jq -r ".\"$repo\"" "$ROOT/deps.json") tmp="$(mktemp -d)" gh release download "$ver" -R "array2d/$repo" -p "${repo}-abi-*-linux-x86_64.tar.gz" -D "$tmp" - tar xzf "$tmp"/*.tar.gz -C "$ROOT/libso" + tar xzf "$tmp"/*.tar.gz -C "$ROOT/libso" --strip-components=1 rm -rf "$tmp" done echo "✅ ABI deps → libso/: $(ls "$ROOT/libso" 2>/dev/null | tr '\n' ' ')" diff --git a/deps.json b/deps.json index 425172e2..57e46b2c 100644 --- a/deps.json +++ b/deps.json @@ -1,4 +1,6 @@ { - "kvspace-c": "v0.2.0", - "kvspace-durable": "v0.2.0" + "kvspace-c": "v0.2.1", + "kvspace-durable": "v0.2.1", + "blockmalloc": "v0.1.3", + "slotsboxmalloc": "v0.1.3" } diff --git a/layout/build.rs b/layout/build.rs index 9ad8e078..c023dbc5 100644 --- a/layout/build.rs +++ b/layout/build.rs @@ -1,23 +1,11 @@ // 链接 kvspace 动态库(cdylib)。布局侧只通过 extern "C" ABI 调用。 -// 默认链接 kvspace-durable;KVLANG_KVSPACE_LIB=kvspace-c 时链接 kvspace-c(SHM,durable 兼容 ABI)。 -// 依赖路径从 CARGO_MANIFEST_DIR 推导(array2d 工作区根),不 hardcode 绝对路径。 +// 依赖 .so 由 ci/deps.sh 下载到 libso/lib;默认 kvspace-durable,KVLANG_KVSPACE_LIB=kvspace-c 时用 SHM 版。 fn main() { println!("cargo:rerun-if-env-changed=KVLANG_KVSPACE_LIB"); let lib = std::env::var("KVLANG_KVSPACE_LIB").unwrap_or_else(|_| "kvspace_durable".into()); - let root = format!("{}/../..", env!("CARGO_MANIFEST_DIR")); // array2d 工作区根 - let (lib_dir, extra) = if lib == "kvspace-c" { - (format!("{root}/kvspace-c/build"), true) - } else { - (format!("{root}/kvspace-durable/target/release"), false) - }; - println!("cargo:rustc-link-search=native={lib_dir}"); + let libso = format!("{}/../libso/lib", env!("CARGO_MANIFEST_DIR")); // kvlang/libso/lib + println!("cargo:rustc-link-search=native={libso}"); println!("cargo:rustc-link-lib=dylib={lib}"); - // --disable-new-dtags 使 rpath 转 DT_RPATH(传递),让 kvspace-c → blockmalloc/slotsboxmalloc - // 的传递依赖能被 layout 的 rpath 找到。 - println!("cargo:rustc-link-arg=-Wl,-rpath,{lib_dir}"); + println!("cargo:rustc-link-arg=-Wl,-rpath,{libso}"); println!("cargo:rustc-link-arg=-Wl,--disable-new-dtags"); - if extra { - println!("cargo:rustc-link-arg=-Wl,-rpath,{root}/blockmalloc/build"); - println!("cargo:rustc-link-arg=-Wl,-rpath,{root}/slotsboxmalloc/build"); - } } diff --git a/runtime/CMakeLists.txt b/runtime/CMakeLists.txt index 6fcf7ca2..c6bdf975 100644 --- a/runtime/CMakeLists.txt +++ b/runtime/CMakeLists.txt @@ -5,12 +5,12 @@ set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) -# ── 依赖路径(相对 kvlang,不 hardcode 绝对路径)──────────────── -get_filename_component(ARRAY2D "${CMAKE_SOURCE_DIR}/../.." ABSOLUTE) -set(KVSPACE_C_DIR "${ARRAY2D}/kvspace-c/build") -set(KVSPACE_DURABLE_DIR "${ARRAY2D}/kvspace-durable/target/release") -set(BLOCKMALLOC_DIR "${ARRAY2D}/blockmalloc/build") -set(SLOTSBOXMALLOC_DIR "${ARRAY2D}/slotsboxmalloc/build") +# ── 依赖 .so 由 ci/deps.sh 下载到 libso/(不再引用相邻仓库)──────── +set(LIBSO_DIR "${CMAKE_SOURCE_DIR}/../libso") +set(KVSPACE_C_DIR "${LIBSO_DIR}/lib") +set(KVSPACE_DURABLE_DIR "${LIBSO_DIR}/lib") +set(BLOCKMALLOC_DIR "${LIBSO_DIR}/lib") +set(SLOTSBOXMALLOC_DIR "${LIBSO_DIR}/lib") # ── kvspace 后端(kvspace-c 或 kvspace_durable,均导出同一 C ABI)──── set(KVSPACE_LIB "kvspace-c" CACHE STRING "kvspace 后端库:kvspace-c / kvspace_durable")