Commit 45cd1114f7

Andrew Kelley <andrew@ziglang.org>
2022-01-27 21:29:32
stage2: make cuda file extensions a separate enum tag than c++
follow-up to 2f41bd3be438dae2a188cfae3295dc28f4e9d434.
1 parent d7feeaa
Changed files (2)
src/Compilation.zig
@@ -3448,7 +3448,7 @@ pub fn addCCArgs(
     try argv.appendSlice(&[_][]const u8{ "-target", llvm_triple });
 
     switch (ext) {
-        .c, .cpp, .m, .mm, .h => {
+        .c, .cpp, .m, .mm, .h, .cuda => {
             try argv.appendSlice(&[_][]const u8{
                 "-nostdinc",
                 "-fno-spell-checking",
@@ -3747,6 +3747,7 @@ fn failCObjWithOwnedErrorMsg(
 pub const FileExt = enum {
     c,
     cpp,
+    cuda,
     h,
     m,
     mm,
@@ -3761,7 +3762,7 @@ pub const FileExt = enum {
 
     pub fn clangSupportsDepFile(ext: FileExt) bool {
         return switch (ext) {
-            .c, .cpp, .h, .m, .mm => true,
+            .c, .cpp, .h, .m, .mm, .cuda => true,
 
             .ll,
             .bc,
@@ -3792,10 +3793,11 @@ pub fn hasCppExt(filename: []const u8) bool {
     return mem.endsWith(u8, filename, ".C") or
         mem.endsWith(u8, filename, ".cc") or
         mem.endsWith(u8, filename, ".cpp") or
-        mem.endsWith(u8, filename, ".cxx") or
-        mem.endsWith(u8, filename, ".cu") or
-        // .stub files are compiled by nvcc when using `zig c++` as the host compiler. They contain C++ code.
-        mem.endsWith(u8, filename, ".stub");
+        mem.endsWith(u8, filename, ".cxx");
+}
+
+pub fn hasCudaExt(filename: []const u8) bool {
+    return mem.endsWith(u8, filename, ".cu") or mem.endsWith(u8, filename, ".stub");
 }
 
 pub fn hasObjCExt(filename: []const u8) bool {
@@ -3862,6 +3864,8 @@ pub fn classifyFileExt(filename: []const u8) FileExt {
         return .static_library;
     } else if (hasObjectExt(filename)) {
         return .object;
+    } else if (hasCudaExt(filename)) {
+        return .cuda;
     } else {
         return .unknown;
     }
src/main.zig
@@ -298,6 +298,7 @@ const usage_build_generic =
     \\                      .m    Objective-C source code (requires LLVM extensions)
     \\                     .mm    Objective-C++ source code (requires LLVM extensions)
     \\                     .bc    LLVM IR Module (requires LLVM extensions)
+    \\               .cu .stub    Cuda source code (requires LLVM extensions)
     \\
     \\General Options:
     \\  -h, --help                Print this help and exit
@@ -1239,7 +1240,7 @@ fn buildOutputType(
                     .object, .static_library, .shared_library => {
                         try link_objects.append(.{ .path = arg });
                     },
-                    .assembly, .c, .cpp, .h, .ll, .bc, .m, .mm => {
+                    .assembly, .c, .cpp, .h, .ll, .bc, .m, .mm, .cuda => {
                         try c_source_files.append(.{
                             .src_path = arg,
                             .extra_flags = try arena.dupe([]const u8, extra_cflags.items),
@@ -1307,7 +1308,9 @@ fn buildOutputType(
                     .positional => {
                         const file_ext = Compilation.classifyFileExt(mem.sliceTo(it.only_arg, 0));
                         switch (file_ext) {
-                            .assembly, .c, .cpp, .ll, .bc, .h, .m, .mm => try c_source_files.append(.{ .src_path = it.only_arg }),
+                            .assembly, .c, .cpp, .ll, .bc, .h, .m, .mm, .cuda => {
+                                try c_source_files.append(.{ .src_path = it.only_arg });
+                            },
                             .unknown, .shared_library, .object, .static_library => {
                                 try link_objects.append(.{
                                     .path = it.only_arg,