@@ -23,18 +23,28 @@ fn main() {
2323 let manifest = env ! ( "CARGO_MANIFEST_DIR" ) ;
2424 let bin = format ! ( "{manifest}/../bin" ) ; // kvlang/bin(新构建的 libkvlang_runtime.so)
2525
26+ // KVSPACE_LIB_DIR 可覆盖安装目录:macOS 的 /usr 受 SIP 保护,应指向 <prefix>/lib/kvspace。
27+ let kvspace_dir = std:: env:: var ( "KVSPACE_LIB_DIR" ) . unwrap_or_else ( |_| "/usr/lib/kvspace" . into ( ) ) ;
28+
2629 println ! ( "cargo:rustc-link-search=native={bin}" ) ;
27- println ! ( "cargo:rustc-link-search=native=/usr/lib/kvspace" ) ;
28- println ! ( "cargo:rustc-link-search=native=/usr/lib" ) ;
30+ println ! ( "cargo:rustc-link-search=native={kvspace_dir}" ) ;
2931 println ! ( "cargo:rustc-link-lib=dylib=kvlang_runtime" ) ;
3032 println ! ( "cargo:rustc-link-lib=dylib=kvspace" ) ;
3133 println ! ( "cargo:rustc-link-lib=dylib=kvlanglayout" ) ;
3234
33- println ! ( "cargo:rustc-link-arg=-Wl,--disable-new-dtags" ) ; // rpath 转 DT_RPATH,传递解析子依赖
34- println ! ( "cargo:rustc-link-arg=-Wl,-rpath,$ORIGIN" ) ;
35- println ! ( "cargo:rustc-link-arg=-Wl,-rpath,$ORIGIN/../lib" ) ;
36- println ! ( "cargo:rustc-link-arg=-Wl,-rpath,/usr/lib/kvspace" ) ;
37- println ! ( "cargo:rustc-link-arg=-Wl,-rpath,/usr/lib" ) ;
35+ if cfg ! ( target_os = "macos" ) {
36+ // macOS:ld64 无 --disable-new-dtags;$ORIGIN 对应 @loader_path
37+ println ! ( "cargo:rustc-link-arg=-Wl,-rpath,@loader_path" ) ;
38+ println ! ( "cargo:rustc-link-arg=-Wl,-rpath,@loader_path/../lib" ) ;
39+ println ! ( "cargo:rustc-link-arg=-Wl,-rpath,{kvspace_dir}" ) ;
40+ } else {
41+ println ! ( "cargo:rustc-link-search=native=/usr/lib" ) ;
42+ println ! ( "cargo:rustc-link-arg=-Wl,--disable-new-dtags" ) ; // rpath 转 DT_RPATH,传递解析子依赖
43+ println ! ( "cargo:rustc-link-arg=-Wl,-rpath,$ORIGIN" ) ;
44+ println ! ( "cargo:rustc-link-arg=-Wl,-rpath,$ORIGIN/../lib" ) ;
45+ println ! ( "cargo:rustc-link-arg=-Wl,-rpath,{kvspace_dir}" ) ;
46+ println ! ( "cargo:rustc-link-arg=-Wl,-rpath,/usr/lib" ) ;
47+ }
3848
3949 // 内嵌顶层 stdlib/**/*.kv → EMBEDDED_KV。
4050 let libdir = format ! ( "{manifest}/../stdlib" ) ;
0 commit comments