@@ -351,6 +351,7 @@ pub struct Build {
351
351
shell_escaped_flags : Option < bool > ,
352
352
build_cache : Arc < BuildCache > ,
353
353
inherit_rustflags : bool ,
354
+ prefer_clang_cl_over_msvc : bool ,
354
355
}
355
356
356
357
/// Represents the types of errors that may occur while using cc-rs.
@@ -479,6 +480,7 @@ impl Build {
479
480
shell_escaped_flags : None ,
480
481
build_cache : Arc :: default ( ) ,
481
482
inherit_rustflags : true ,
483
+ prefer_clang_cl_over_msvc : false ,
482
484
}
483
485
}
484
486
@@ -1290,6 +1292,14 @@ impl Build {
1290
1292
self
1291
1293
}
1292
1294
1295
+ /// Prefer to use clang-cl over msvc.
1296
+ ///
1297
+ /// This option defaults to `false`.
1298
+ pub fn prefer_clang_cl_over_msvc ( & mut self , prefer_clang_cl_over_msvc : bool ) -> & mut Build {
1299
+ self . prefer_clang_cl_over_msvc = prefer_clang_cl_over_msvc;
1300
+ self
1301
+ }
1302
+
1293
1303
#[ doc( hidden) ]
1294
1304
pub fn __set_env < A , B > ( & mut self , a : A , b : B ) -> & mut Build
1295
1305
where
@@ -2878,10 +2888,17 @@ impl Build {
2878
2888
}
2879
2889
let target = self . get_target ( ) ?;
2880
2890
let raw_target = self . get_raw_target ( ) ?;
2881
- let ( env, msvc, gnu, traditional, clang) = if self . cpp {
2882
- ( "CXX" , "cl.exe" , "g++" , "c++" , "clang++" )
2891
+
2892
+ let msvc = if self . prefer_clang_cl_over_msvc {
2893
+ "clang-cl.exe"
2894
+ } else {
2895
+ "cl.exe"
2896
+ } ;
2897
+
2898
+ let ( env, gnu, traditional, clang) = if self . cpp {
2899
+ ( "CXX" , "g++" , "c++" , "clang++" )
2883
2900
} else {
2884
- ( "CC" , "cl.exe" , " gcc", "cc" , "clang" )
2901
+ ( "CC" , "gcc" , "cc" , "clang" )
2885
2902
} ;
2886
2903
2887
2904
// On historical Solaris systems, "cc" may have been Sun Studio, which
@@ -2894,7 +2911,7 @@ impl Build {
2894
2911
traditional
2895
2912
} ;
2896
2913
2897
- let cl_exe = self . windows_registry_find_tool ( & target, "cl.exe" ) ;
2914
+ let cl_exe = self . windows_registry_find_tool ( & target, msvc ) ;
2898
2915
2899
2916
let tool_opt: Option < Tool > = self
2900
2917
. env_tool ( env)
0 commit comments