File tree Expand file tree Collapse file tree 3 files changed +28
-1
lines changed Expand file tree Collapse file tree 3 files changed +28
-1
lines changed Original file line number Diff line number Diff line change @@ -60,6 +60,10 @@ End-users should set these environment variables to modify `bindgen`'s behavior
60
60
- Examples:
61
61
- Specify alternate sysroot: ` --sysroot=/path/to/sysroot `
62
62
- Add include search path with spaces: ` -I"/path/with spaces" `
63
+ - ` BINDGEN_EXTRA_CLANG_ARGS_<TARGET> ` : similar to ` BINDGEN_EXTRA_CLANG_ARGS ` ,
64
+ but used to set per-target arguments to pass to clang. Useful to set system include
65
+ directories in a target-specific way in cross-compilation environments with multiple targets.
66
+ Has precedence over ` BINDGEN_EXTRA_CLANG_ARGS ` .
63
67
64
68
Additionally, ` bindgen ` uses ` libclang ` to parse C and C++ header files.
65
69
To modify how ` bindgen ` searches for ` libclang ` , see the [ ` clang-sys ` documentation] [ clang-sys-env ] .
Original file line number Diff line number Diff line change @@ -79,4 +79,12 @@ fn main() {
79
79
println ! ( "cargo:rerun-if-env-changed=LIBCLANG_PATH" ) ;
80
80
println ! ( "cargo:rerun-if-env-changed=LIBCLANG_STATIC_PATH" ) ;
81
81
println ! ( "cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS" ) ;
82
+ println ! (
83
+ "cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_{}" ,
84
+ std:: env:: var( "TARGET" ) . unwrap( )
85
+ ) ;
86
+ println ! (
87
+ "cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_{}" ,
88
+ std:: env:: var( "TARGET" ) . unwrap( ) . replace( "-" , "_" )
89
+ ) ;
82
90
}
Original file line number Diff line number Diff line change @@ -1405,7 +1405,7 @@ impl Builder {
1405
1405
pub fn generate ( mut self ) -> Result < Bindings , ( ) > {
1406
1406
// Add any extra arguments from the environment to the clang command line.
1407
1407
if let Some ( extra_clang_args) =
1408
- env :: var ( "BINDGEN_EXTRA_CLANG_ARGS" ) . ok ( )
1408
+ get_target_dependent_env_var ( "BINDGEN_EXTRA_CLANG_ARGS" )
1409
1409
{
1410
1410
// Try to parse it with shell quoting. If we fail, make it one single big argument.
1411
1411
if let Some ( strings) = shlex:: split ( & extra_clang_args) {
@@ -2557,6 +2557,21 @@ pub fn clang_version() -> ClangVersion {
2557
2557
}
2558
2558
}
2559
2559
2560
+ /// Looks for the env var `var_${TARGET}`, and falls back to just `var` when it is not found.
2561
+ fn get_target_dependent_env_var ( var : & str ) -> Option < String > {
2562
+ if let Ok ( target) = env:: var ( "TARGET" ) {
2563
+ if let Ok ( v) = env:: var ( & format ! ( "{}_{}" , var, target) ) {
2564
+ return Some ( v) ;
2565
+ }
2566
+ if let Ok ( v) =
2567
+ env:: var ( & format ! ( "{}_{}" , var, target. replace( "-" , "_" ) ) )
2568
+ {
2569
+ return Some ( v) ;
2570
+ }
2571
+ }
2572
+ env:: var ( var) . ok ( )
2573
+ }
2574
+
2560
2575
/// A ParseCallbacks implementation that will act on file includes by echoing a rerun-if-changed
2561
2576
/// line
2562
2577
///
You can’t perform that action at this time.
0 commit comments