Recognize CUDA and OpenCL source file types (.cu, .cl) and compile them with the C++ compiler. This will allow CUDA and OpenCL files to be compiled with clang, which supports both natively.
Change taken from https://github.com/bazelbuild/bazel/issues/6578#issuecomment-463944092
RELNOTES: Treat .cu and .cl files as C++ source. CUDA or OpenCL are not natively supported and will require custom flags to compile with e.g. clang.
PiperOrigin-RevId: 295733167
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java
index 1bbd03b..d557063 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java
@@ -24,7 +24,11 @@
* C++-related file type definitions.
*/
public final class CppFileTypes {
- public static final FileType CPP_SOURCE = FileType.of(".cc", ".cpp", ".cxx", ".c++", ".C");
+ // .cu and .cl are CUDA and OpenCL source extensions, respectively. They are expected to only be
+ // supported with clang. Bazel is not officially supporting these targets, and the extensions are
+ // listed only as long as they work with the existing C++ actions.
+ public static final FileType CPP_SOURCE =
+ FileType.of(".cc", ".cpp", ".cxx", ".c++", ".C", ".cu", ".cl");
public static final FileType C_SOURCE = FileType.of(".c");
public static final FileType OBJC_SOURCE = FileType.of(".m");
public static final FileType OBJCPP_SOURCE = FileType.of(".mm");
diff --git a/tools/test/CoverageOutputGenerator/java/com/google/devtools/coverageoutputgenerator/Constants.java b/tools/test/CoverageOutputGenerator/java/com/google/devtools/coverageoutputgenerator/Constants.java
index 2961382..a4b1b53 100644
--- a/tools/test/CoverageOutputGenerator/java/com/google/devtools/coverageoutputgenerator/Constants.java
+++ b/tools/test/CoverageOutputGenerator/java/com/google/devtools/coverageoutputgenerator/Constants.java
@@ -53,6 +53,6 @@
// Please keep in sync with the extensions in CppFileTypes.
static final ImmutableList<String> CC_EXTENSIONS =
ImmutableList.of(
- ".cc", ".cpp", ".cxx", ".c++", ".C", ".c", ".h", ".hh", ".hpp", ".ipp", ".hxx", ".inc",
- ".inl", ".tlh", ".tli", ".H");
+ ".cc", ".cpp", ".cxx", ".c++", ".C", ".c", ".cu", ".cl", ".h", ".hh", ".hpp", ".ipp",
+ ".hxx", ".inc", ".inl", ".tlh", ".tli", ".H");
}