@@ -46,24 +46,24 @@ impl Tool {
46
46
) -> Self {
47
47
Self :: with_features (
48
48
path,
49
- None ,
49
+ vec ! [ ] ,
50
50
false ,
51
51
cached_compiler_family,
52
52
cargo_output,
53
53
out_dir,
54
54
)
55
55
}
56
56
57
- pub ( crate ) fn with_clang_driver (
57
+ pub ( crate ) fn with_args (
58
58
path : PathBuf ,
59
- clang_driver : Option < & str > ,
59
+ args : Vec < String > ,
60
60
cached_compiler_family : & RwLock < HashMap < Box < Path > , ToolFamily > > ,
61
61
cargo_output : & CargoOutput ,
62
62
out_dir : Option < & Path > ,
63
63
) -> Self {
64
64
Self :: with_features (
65
65
path,
66
- clang_driver ,
66
+ args ,
67
67
false ,
68
68
cached_compiler_family,
69
69
cargo_output,
@@ -88,7 +88,7 @@ impl Tool {
88
88
89
89
pub ( crate ) fn with_features (
90
90
path : PathBuf ,
91
- clang_driver : Option < & str > ,
91
+ args : Vec < String > ,
92
92
cuda : bool ,
93
93
cached_compiler_family : & RwLock < HashMap < Box < Path > , ToolFamily > > ,
94
94
cargo_output : & CargoOutput ,
@@ -235,12 +235,19 @@ impl Tool {
235
235
Some ( fname) if fname. ends_with ( "cl" ) || fname == "cl.exe" => {
236
236
ToolFamily :: Msvc { clang_cl : false }
237
237
}
238
- Some ( fname) if fname. contains ( "clang" ) => match clang_driver {
239
- Some ( "cl" ) => ToolFamily :: Msvc { clang_cl : true } ,
240
- _ => ToolFamily :: Clang {
241
- zig_cc : is_zig_cc ( & path, cargo_output) ,
242
- } ,
243
- } ,
238
+ Some ( fname) if fname. contains ( "clang" ) => {
239
+ let is_clang_cl = args
240
+ . iter ( )
241
+ . find_map ( |a| a. strip_prefix ( "--driver-mode=" ) )
242
+ . is_some_and ( |dm| dm == "cl" ) ;
243
+ if is_clang_cl {
244
+ ToolFamily :: Msvc { clang_cl : true }
245
+ } else {
246
+ ToolFamily :: Clang {
247
+ zig_cc : is_zig_cc ( & path, cargo_output) ,
248
+ }
249
+ }
250
+ }
244
251
Some ( fname) if fname. contains ( "zig" ) => ToolFamily :: Clang { zig_cc : true } ,
245
252
_ => ToolFamily :: Gnu ,
246
253
}
0 commit comments