aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java141
1 files changed, 141 insertions, 0 deletions
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
new file mode 100644
index 0000000000..d9bb7b6803
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java
@@ -0,0 +1,141 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.rules.cpp;
+
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.util.FileType;
+
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * C++-related file type definitions.
+ */
+public final class CppFileTypes {
+ public static final FileType CPP_SOURCE = FileType.of(".cc", ".cpp", ".cxx", ".C");
+ public static final FileType C_SOURCE = FileType.of(".c");
+ public static final FileType CPP_HEADER = FileType.of(".h", ".hh", ".hpp", ".hxx", ".inc");
+ public static final FileType CPP_TEXTUAL_INCLUDE = FileType.of(".inc");
+
+ public static final FileType PIC_PREPROCESSED_C = FileType.of(".pic.i");
+ public static final FileType PREPROCESSED_C = new FileType() {
+ final String ext = ".i";
+ @Override
+ public boolean apply(String filename) {
+ return filename.endsWith(ext) && !PIC_PREPROCESSED_C.matches(filename);
+ }
+ @Override
+ public List<String> getExtensions() {
+ return ImmutableList.of(ext);
+ }
+ };
+ public static final FileType PIC_PREPROCESSED_CPP = FileType.of(".pic.ii");
+ public static final FileType PREPROCESSED_CPP = new FileType() {
+ final String ext = ".ii";
+ @Override
+ public boolean apply(String filename) {
+ return filename.endsWith(ext) && !PIC_PREPROCESSED_CPP.matches(filename);
+ }
+ @Override
+ public List<String> getExtensions() {
+ return ImmutableList.of(ext);
+ }
+ };
+
+ public static final FileType ASSEMBLER_WITH_C_PREPROCESSOR = FileType.of(".S");
+ public static final FileType PIC_ASSEMBLER = FileType.of(".pic.s");
+ public static final FileType ASSEMBLER = new FileType() {
+ final String ext = ".s";
+ @Override
+ public boolean apply(String filename) {
+ return filename.endsWith(ext) && !PIC_ASSEMBLER.matches(filename);
+ }
+ @Override
+ public List<String> getExtensions() {
+ return ImmutableList.of(ext);
+ }
+ };
+
+ public static final FileType PIC_ARCHIVE = FileType.of(".pic.a");
+ public static final FileType ARCHIVE = new FileType() {
+ final String ext = ".a";
+ @Override
+ public boolean apply(String filename) {
+ return filename.endsWith(ext) && !PIC_ARCHIVE.matches(filename);
+ }
+ @Override
+ public List<String> getExtensions() {
+ return ImmutableList.of(ext);
+ }
+ };
+
+ public static final FileType ALWAYS_LINK_PIC_LIBRARY = FileType.of(".pic.lo");
+ public static final FileType ALWAYS_LINK_LIBRARY = new FileType() {
+ final String ext = ".lo";
+ @Override
+ public boolean apply(String filename) {
+ return filename.endsWith(ext) && !ALWAYS_LINK_PIC_LIBRARY.matches(filename);
+ }
+ @Override
+ public List<String> getExtensions() {
+ return ImmutableList.of(ext);
+ }
+ };
+
+ public static final FileType PIC_OBJECT_FILE = FileType.of(".pic.o");
+ public static final FileType OBJECT_FILE = new FileType() {
+ final String ext = ".o";
+ @Override
+ public boolean apply(String filename) {
+ return filename.endsWith(ext) && !PIC_OBJECT_FILE.matches(filename);
+ }
+ @Override
+ public List<String> getExtensions() {
+ return ImmutableList.of(ext);
+ }
+ };
+
+
+ public static final FileType SHARED_LIBRARY = FileType.of(".so");
+ public static final FileType INTERFACE_SHARED_LIBRARY = FileType.of(".ifso");
+ public static final FileType LINKER_SCRIPT = FileType.of(".lds");
+ // Matches shared libraries with version names in the extension, i.e.
+ // libmylib.so.2 or libmylib.so.2.10.
+ private static final Pattern VERSIONED_SHARED_LIBRARY_PATTERN =
+ Pattern.compile("^.+\\.so(\\.\\d+)+$");
+ public static final FileType VERSIONED_SHARED_LIBRARY = new FileType() {
+ @Override
+ public boolean apply(String filename) {
+ // Because regex matching can be slow, we first do a quick digit check on the final
+ // character before risking the full-on regex match. This should eliminate the performance
+ // hit on practically every non-qualifying file type.
+ if (Character.isDigit(filename.charAt(filename.length() - 1))) {
+ return VERSIONED_SHARED_LIBRARY_PATTERN.matcher(filename).matches();
+ } else {
+ return false;
+ }
+ }
+ };
+
+ public static final FileType COVERAGE_NOTES = FileType.of(".gcno");
+ public static final FileType COVERAGE_DATA = FileType.of(".gcda");
+ public static final FileType COVERAGE_DATA_IMPORTS = FileType.of(".gcda.imports");
+ public static final FileType GCC_AUTO_PROFILE = FileType.of(".afdo");
+
+ public static final FileType CPP_MODULE_MAP = FileType.of(".cppmap");
+ public static final FileType CPP_MODULE = FileType.of(".pcm");
+
+ // Output of the dwp tool
+ public static final FileType DEBUG_INFO_PACKAGE = FileType.of(".dwp");
+}