@@ -53,6 +53,14 @@ const OPAQUE_TYPES: &[&str] = &[
5353 // and https://github.com/rust-lang/rust-bindgen/issues/1538
5454 "desc_struct" ,
5555 "xregs_state" ,
56+ "xsave_struct" ,
57+ ] ;
58+ const CLANG_ARGS_BLACKLIST : [ & ' static str ; 5 ] = [
59+ "-maccumulate-outgoing-args" ,
60+ "-mpreferred-stack-boundary=3" ,
61+ "-mindirect-branch=thunk-extern" ,
62+ "-mindirect-branch-register" ,
63+ "-fconserve-stack" ,
5664] ;
5765
5866fn handle_kernel_version_cfg ( bindings_path : & PathBuf ) {
@@ -86,10 +94,15 @@ fn handle_kernel_version_cfg(bindings_path: &PathBuf) {
8694 }
8795 if major >= 4 {
8896 // We don't currently support anything older than 4.4
89- for x in 4 ..=if major > 4 { 20 } else { minor } {
97+ for x in 1 ..=if major > 4 { 20 } else { minor } {
9098 println ! ( "cargo:rustc-cfg=kernel_4_{}_0_or_greater" , x) ;
9199 }
92100 }
101+ if major >= 3 {
102+ for x in 1 ..=if major > 3 { 19 } else { minor } {
103+ println ! ( "cargo:rustc-cfg=kernel_3_{}_0_or_greater" , x) ;
104+ }
105+ }
93106}
94107
95108fn handle_kernel_symbols_cfg ( symvers_path : & PathBuf ) {
@@ -153,6 +166,12 @@ fn main() {
153166
154167 builder = builder. clang_arg ( format ! ( "--target={}" , target) ) ;
155168 for arg in kernel_args. iter ( ) {
169+ if CLANG_ARGS_BLACKLIST . contains ( & arg. as_str ( ) ) {
170+ continue ;
171+ }
172+ if arg. as_str ( ) == "-DOS_CENTOS" {
173+ println ! ( "cargo:rustc-cfg=os_centos" )
174+ }
156175 builder = builder. clang_arg ( arg. clone ( ) ) ;
157176 }
158177
@@ -182,13 +201,17 @@ fn main() {
182201 handle_kernel_symbols_cfg ( & PathBuf :: from ( & kernel_dir) . join ( "Module.symvers" ) ) ;
183202
184203 let mut builder = cc:: Build :: new ( ) ;
185- builder. compiler ( env:: var ( "CC" ) . unwrap_or_else ( |_| "clang" . to_string ( ) ) ) ;
204+ let compiler = env:: var ( "CC" ) . unwrap_or_else ( |_| "clang" . to_string ( ) ) ;
205+ builder. compiler ( & compiler) ;
186206 builder. target ( & target) ;
187207 builder. warnings ( false ) ;
188208 println ! ( "cargo:rerun-if-changed=src/helpers.c" ) ;
189209 builder. file ( "src/helpers.c" ) ;
190210 for arg in kernel_args. iter ( ) {
191211 builder. flag ( & arg) ;
192212 }
213+ if & compiler == "gcc" {
214+ builder. flag ( "-fno-pie" ) ;
215+ }
193216 builder. compile ( "helpers" ) ;
194217}
0 commit comments