stage2: make cuda file extensions a separate enum tag than c++

follow-up to 2f41bd3be438dae2a188cfae3295dc28f4e9d434.
This commit is contained in:
Andrew Kelley 2022-01-27 13:29:32 -07:00
parent 8c90b05add
commit f589a66062
2 changed files with 15 additions and 8 deletions

View File

@ -3854,7 +3854,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",
@ -4153,6 +4153,7 @@ fn failCObjWithOwnedErrorMsg(
pub const FileExt = enum {
c,
cpp,
cuda,
h,
m,
mm,
@ -4167,7 +4168,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,
@ -4198,10 +4199,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 {
@ -4268,6 +4270,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;
}

View File

@ -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
@ -1247,7 +1248,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),
@ -1315,7 +1316,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,