@@ -601,26 +601,17 @@ impl Build {
601
601
/// `known_flag_support` field. If `is_flag_supported(flag)`
602
602
/// is called again, the result will be read from the hash table.
603
603
pub fn is_flag_supported ( & self , flag : & str ) -> Result < bool , Error > {
604
- let target = self . get_target ( ) ?;
605
-
606
- let mut compiler = {
607
- let mut cfg = Build :: new ( ) ;
608
- cfg. flag ( flag)
609
- . cargo_metadata ( self . cargo_output . metadata )
610
- . target ( & target)
611
- . opt_level ( 0 )
612
- . host ( & self . get_host ( ) ?)
613
- . debug ( false )
614
- . cpp ( self . cpp )
615
- . cuda ( self . cuda ) ;
616
- if let Some ( ref c) = self . compiler {
617
- cfg. compiler ( c. clone ( ) ) ;
618
- }
619
- cfg. try_get_compiler ( ) ?
620
- } ;
604
+ self . is_flag_supported_inner ( flag, self . get_base_compiler ( ) ?. path ( ) , & self . get_target ( ) ?)
605
+ }
621
606
607
+ fn is_flag_supported_inner (
608
+ & self ,
609
+ flag : & str ,
610
+ compiler_path : & Path ,
611
+ target : & str ,
612
+ ) -> Result < bool , Error > {
622
613
let compiler_flag = CompilerFlag {
623
- compiler : compiler . path . clone ( ) . into ( ) ,
614
+ compiler : compiler_path . into ( ) ,
624
615
flag : flag. into ( ) ,
625
616
} ;
626
617
@@ -638,6 +629,20 @@ impl Build {
638
629
let src = self . ensure_check_file ( ) ?;
639
630
let obj = out_dir. join ( "flag_check" ) ;
640
631
632
+ let mut compiler = {
633
+ let mut cfg = Build :: new ( ) ;
634
+ cfg. flag ( flag)
635
+ . compiler ( compiler_path)
636
+ . cargo_metadata ( self . cargo_output . metadata )
637
+ . target ( target)
638
+ . opt_level ( 0 )
639
+ . host ( & self . get_host ( ) ?)
640
+ . debug ( false )
641
+ . cpp ( self . cpp )
642
+ . cuda ( self . cuda ) ;
643
+ cfg. try_get_compiler ( ) ?
644
+ } ;
645
+
641
646
// Clang uses stderr for verbose output, which yields a false positive
642
647
// result if the CFLAGS/CXXFLAGS include -v to aid in debugging.
643
648
if compiler. family . verbose_stderr ( ) {
@@ -1803,7 +1808,10 @@ impl Build {
1803
1808
}
1804
1809
1805
1810
for flag in self . flags_supported . iter ( ) {
1806
- if self . is_flag_supported ( flag) . unwrap_or ( false ) {
1811
+ if self
1812
+ . is_flag_supported_inner ( flag, & cmd. path , & target)
1813
+ . unwrap_or ( false )
1814
+ {
1807
1815
cmd. push_cc_arg ( ( * * flag) . into ( ) ) ;
1808
1816
}
1809
1817
}
0 commit comments