@@ -6,14 +6,15 @@ use std::{
6
6
str,
7
7
} ;
8
8
9
- #[ cfg( feature = "llvm16-0" ) ]
10
- const LLVM_MAJOR_VERSION : usize = 16 ;
11
- #[ cfg( feature = "llvm17-0" ) ]
12
- const LLVM_MAJOR_VERSION : usize = 17 ;
13
- #[ cfg( feature = "llvm18-0" ) ]
14
- const LLVM_MAJOR_VERSION : usize = 18 ;
15
- #[ cfg( feature = "llvm19-0" ) ]
16
- const LLVM_MAJOR_VERSION : usize = 19 ;
9
+ const LLVM_MAJOR_VERSION : usize = if cfg ! ( feature = "llvm16-0" ) {
10
+ 16
11
+ } else if cfg ! ( feature = "llvm17-0" ) {
12
+ 17
13
+ } else if cfg ! ( feature = "llvm18-0" ) {
14
+ 18
15
+ } else {
16
+ 19
17
+ } ;
17
18
18
19
fn main ( ) {
19
20
if let Err ( error) = run ( ) {
@@ -36,14 +37,9 @@ fn run() -> Result<(), Box<dyn Error>> {
36
37
println ! ( "cargo:rerun-if-changed=wrapper.h" ) ;
37
38
println ! ( "cargo:rerun-if-changed=cc" ) ;
38
39
println ! ( "cargo:rustc-link-search={}" , llvm_config( "--libdir" ) ?) ;
39
- println ! ( "cargo:rustc-link-lib=static=LLVMCore" ) ;
40
- println ! ( "cargo:rustc-link-lib=static=LLVMSupport" ) ;
41
- println ! ( "cargo:rustc-link-lib=static=LLVMTableGen" ) ;
42
40
43
41
for name in llvm_config ( "--libnames" ) ?. trim ( ) . split ( ' ' ) {
44
- if let Some ( name) = trim_library_name ( name) {
45
- println ! ( "cargo:rustc-link-lib={}" , name) ;
46
- }
42
+ println ! ( "cargo:rustc-link-lib=static={}" , parse_library_name( name) ?) ;
47
43
}
48
44
49
45
for flag in llvm_config ( "--system-libs" ) ?. trim ( ) . split ( ' ' ) {
@@ -59,20 +55,15 @@ fn run() -> Result<(), Box<dyn Error>> {
59
55
) ;
60
56
println ! (
61
57
"cargo:rustc-link-lib={}" ,
62
- path. file_name( )
63
- . unwrap( )
64
- . to_str( )
65
- . unwrap( )
66
- . split_once( '.' )
67
- . unwrap( )
68
- . 0
69
- . trim_start_matches( "lib" )
58
+ parse_library_name( path. file_name( ) . unwrap( ) . to_str( ) . unwrap( ) ) ?
70
59
) ;
71
60
} else {
72
61
println ! ( "cargo:rustc-link-lib={}" , flag) ;
73
62
}
74
63
}
75
64
65
+ println ! ( "cargo:rustc-link-lib=ffi" ) ;
66
+
76
67
if let Some ( name) = get_system_libcpp ( ) {
77
68
println ! ( "cargo:rustc-link-lib={}" , name) ;
78
69
}
@@ -100,7 +91,7 @@ fn run() -> Result<(), Box<dyn Error>> {
100
91
101
92
bindgen:: builder ( )
102
93
. header ( "wrapper.h" )
103
- . clang_arg ( format ! ( "-I{}" , "cc /include") )
94
+ . clang_arg ( "-Icc /include")
104
95
. clang_arg ( format ! ( "-I{}" , llvm_config( "--includedir" ) ?) )
105
96
. default_enum_style ( bindgen:: EnumVariation :: ModuleConsts )
106
97
. parse_callbacks ( Box :: new ( bindgen:: CargoCallbacks :: new ( ) ) )
@@ -143,10 +134,8 @@ fn llvm_config(argument: &str) -> Result<String, Box<dyn Error>> {
143
134
. to_string ( ) )
144
135
}
145
136
146
- fn trim_library_name ( name : & str ) -> Option < & str > {
147
- if let Some ( name) = name. strip_prefix ( "lib" ) {
148
- name. strip_suffix ( ".a" )
149
- } else {
150
- None
151
- }
137
+ fn parse_library_name ( name : & str ) -> Result < & str , String > {
138
+ name. strip_prefix ( "lib" )
139
+ . and_then ( |name| name. split ( '.' ) . next ( ) )
140
+ . ok_or_else ( || format ! ( "failed to parse library name: {}" , name) )
152
141
}
0 commit comments