Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ci/deps.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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' ' ')"
6 changes: 4 additions & 2 deletions deps.json
Original file line number Diff line number Diff line change
@@ -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"
}
20 changes: 4 additions & 16 deletions layout/build.rs
Original file line number Diff line number Diff line change
@@ -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");
}
}
12 changes: 6 additions & 6 deletions runtime/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
Loading