@@ -6,16 +6,15 @@ fn main() {
66 . display ( )
77 . to_string ( ) ;
88
9- println ! ( "cargo:rerun-if-changed=build.rs" ) ;
10- println ! ( "cargo:rerun-if-changed=lean/Wavelet" ) ;
11- println ! ( "cargo:rerun-if-changed=lean/Wavelet.lean" ) ;
12- println ! ( "cargo:rerun-if-changed=lean/lake-manifest.json" ) ;
13- println ! ( "cargo:rerun-if-changed=lean/lakefile.lean" ) ;
14- println ! ( "cargo:rerun-if-changed=lean/lean-toolchain" ) ;
15- println ! ( "cargo:rerun-if-changed=lean/.lake/packages/batteries/.lake/build/lib" ) ;
9+ println ! ( "cargo:: rerun-if-changed=build.rs" ) ;
10+ println ! ( "cargo:: rerun-if-changed=lean/Wavelet" ) ;
11+ println ! ( "cargo:: rerun-if-changed=lean/Wavelet.lean" ) ;
12+ println ! ( "cargo:: rerun-if-changed=lean/lake-manifest.json" ) ;
13+ println ! ( "cargo:: rerun-if-changed=lean/lakefile.lean" ) ;
14+ println ! ( "cargo:: rerun-if-changed=lean/lean-toolchain" ) ;
15+ println ! ( "cargo:: rerun-if-changed=lean/.lake/packages/batteries/.lake/build/lib" ) ;
1616
17- // Find and dynamically link against `leanshared`
18- // Adapted from `lean-sys`'s `build.rs`
17+ // Find Lean library paths
1918 let output = Command :: new ( "lean" )
2019 . current_dir ( "lean" )
2120 . args ( [ "--print-prefix" ] )
@@ -33,35 +32,13 @@ fn main() {
3332 . expect ( "invalid lean library path" )
3433 . trim ( ) ,
3534 ) ;
36-
37- let lib_dir = if cfg ! ( target_os = "windows" ) {
38- lean_dir. join ( "bin" )
39- } else {
40- lean_dir. join ( "lib/lean" )
41- } ;
42-
43- let mut shared_lib = lib_dir. clone ( ) ;
44- let exists = if cfg ! ( target_os = "windows" ) {
45- shared_lib. push ( "libleanshared.dll" ) ;
46- shared_lib. exists ( )
47- } else if cfg ! ( target_os = "macos" ) {
48- shared_lib. push ( "libleanshared.dylib" ) ;
49- shared_lib. exists ( )
50- } else {
51- shared_lib. push ( "libleanshared.so" ) ;
52- shared_lib. exists ( )
53- } ;
54-
5535 assert ! (
56- exists,
57- "lean shared library does not exist: {}" ,
58- shared_lib . display( )
36+ lean_dir . exists( ) ,
37+ "lean prefix does not exist: {}" ,
38+ lean_dir . display( )
5939 ) ;
6040
61- println ! ( "cargo:rustc-link-search=native={}" , lib_dir. display( ) ) ;
62- println ! ( "cargo:rustc-link-lib=dylib=leanshared" ) ;
63- println ! ( "cargo:rustc-link-arg=-Wl,{}" , lib_dir. display( ) ) ;
64-
41+ // Fetch Lake dependencies
6542 let status = Command :: new ( "lake" )
6643 . current_dir ( "lean" )
6744 . args ( [ "exec" , "cache" , "get" ] )
@@ -70,22 +47,38 @@ fn main() {
7047 assert ! ( status. success( ) , "`lake exec cache` get failed" ) ;
7148
7249 // Build `libWavelet` and `libBatteries`
73- let output = Command :: new ( "lake" )
50+ let status = Command :: new ( "lake" )
7451 . current_dir ( "lean" )
7552 . args ( [ "build" , "Wavelet" , "Batteries:static" ] )
76- . output ( )
53+ . status ( )
7754 . expect ( "failed to run `lake build`" ) ;
78- assert ! ( output. status. success( ) , "`lake build` failed" ) ;
79- let stdout = String :: from_utf8_lossy ( & output. stdout ) ;
80- let stderr = String :: from_utf8_lossy ( & output. stderr ) ;
81- for line in stdout. lines ( ) {
82- println ! ( "cargo:warning=[lake build] {}" , line) ;
55+ assert ! ( status. success( ) , "`lake build` failed" ) ;
56+
57+ // Include various linking search paths for Lean and Wavelet
58+ println ! ( "cargo::rustc-link-search=native={}/lib" , lean_dir. display( ) ) ;
59+ if cfg ! ( target_os = "windows" ) {
60+ println ! ( "cargo::rustc-link-search=native={}" , lean_dir. join( "bin" ) . display( ) ) ;
61+ } else {
62+ println ! ( "cargo::rustc-link-search=native={}" , lean_dir. join( "lib/lean" ) . display( ) ) ;
8363 }
84- for line in stderr. lines ( ) {
85- println ! ( "cargo:warning=[lake build] {}" , line) ;
64+ println ! ( "cargo::rustc-link-search=native={manifest_dir}/lean/.lake/build/lib" ) ;
65+ println ! ( "cargo::rustc-link-search=native={manifest_dir}/lean/.lake/packages/batteries/.lake/build/lib" ) ;
66+
67+ // Link against various required libraries
68+ for lib in [ "Wavelet" , "Batteries" , "Lean" , "Std" , "Init" , "leanrt" , "leancpp" , "uv" ] {
69+ println ! ( "cargo::rustc-link-lib=static={lib}" ) ;
70+ }
71+
72+ if cfg ! ( target_os = "macos" ) {
73+ // macOS does not have static libc++
74+ println ! ( "cargo::rustc-link-lib=dylib=c++" ) ;
75+ println ! ( "cargo::rustc-link-lib=dylib=c++abi" ) ;
76+ } else {
77+ println ! ( "cargo::rustc-link-lib=static=c++" ) ;
78+ println ! ( "cargo::rustc-link-lib=static=c++abi" ) ;
8679 }
8780
88- // Statically link `libWavelet`
89- println ! ( "cargo:rustc-link-search=native={manifest_dir}/lean/.lake/build/ lib" ) ;
90- println ! ( "cargo:rustc-link-search=native={manifest_dir}/lean/.lake/packages/batteries/.lake/build/lib" ) ;
81+ for lib in [ "m" , "dl" , "gmp" ] {
82+ println ! ( "cargo:: rustc-link-lib=dylib={ lib} " ) ;
83+ }
9184}
0 commit comments