@@ -296,6 +296,42 @@ impl Language {
296296 | Language :: Rust
297297 )
298298 }
299+
300+ /// Common implementation for GCC and Clang language argument mapping
301+ fn to_compiler_arg ( self , cuda_arg : & ' static str ) -> Option < & ' static str > {
302+ match self {
303+ Language :: C => Some ( "c" ) ,
304+ Language :: CHeader => Some ( "c-header" ) ,
305+ Language :: CPreprocessed => Some ( "cpp-output" ) ,
306+ Language :: Cxx => Some ( "c++" ) ,
307+ Language :: CxxHeader => Some ( "c++-header" ) ,
308+ Language :: CxxPreprocessed => Some ( "c++-cpp-output" ) ,
309+ Language :: ObjectiveC => Some ( "objective-c" ) ,
310+ Language :: ObjectiveCPreprocessed => Some ( "objective-c-cpp-output" ) ,
311+ Language :: ObjectiveCxx => Some ( "objective-c++" ) ,
312+ Language :: ObjectiveCxxHeader => Some ( "objective-c++-header" ) ,
313+ Language :: ObjectiveCxxPreprocessed => Some ( "objective-c++-cpp-output" ) ,
314+ Language :: Cuda => Some ( cuda_arg) ,
315+ Language :: CudaFE => None ,
316+ Language :: Ptx => None ,
317+ Language :: Cubin => None ,
318+ Language :: Rust => None , // Let the compiler decide
319+ Language :: Hip => Some ( "hip" ) ,
320+ Language :: GenericHeader => None , // Let the compiler decide
321+ }
322+ }
323+
324+ /// Returns the GCC-specific language argument for the `-x` flag
325+ /// https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html
326+ pub fn to_gcc_arg ( self ) -> Option < & ' static str > {
327+ self . to_compiler_arg ( "cu" )
328+ }
329+
330+ /// Returns the Clang-specific language argument for the `-x` flag
331+ /// https://github.com/llvm/llvm-project/blob/main/clang/include/clang/Driver/Types.def
332+ pub fn to_clang_arg ( self ) -> Option < & ' static str > {
333+ self . to_compiler_arg ( "cuda" )
334+ }
299335}
300336
301337impl CompilerKind {
0 commit comments