aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2016-08-05 09:21:42 +0000
committerGravatar Yun Peng <pcloudy@google.com>2016-08-05 13:32:37 +0000
commit0284e822b276e7d1909aafb5e3732467d946d5ae (patch)
treec42553f7661bc920627387f91ac738047338d00b /src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
parentcdb6ef554397c1d3da7ee9921305f646bec5ae16 (diff)
Avoid hard-coded extensions for compilation outputs.
The multi-layered transformation (base -> base.pic -> base.pic.pcm -> base.pic.pcm.d) is kinda ugly, but is preferable to having 22 separate, mostly orthogonal artifact categories. It's actually untested what happens if we put these new name patterns into the CROSSTOOL file. -- MOS_MIGRATED_REVID=129423055
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index 9233bd4d3e..8981256edc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.rules.cpp;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.Artifact;
@@ -47,13 +48,11 @@ import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode;
-
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-
import javax.annotation.Nullable;
/**
@@ -605,4 +604,26 @@ public class CppHelper {
builder.add(StaticallyLinkedMarkerProvider.class, new StaticallyLinkedMarkerProvider(true));
}
}
+
+ static Artifact getCompileOutputArtifact(RuleContext ruleContext, String outputName) {
+ PathFragment objectDir = getObjDirectory(ruleContext.getLabel());
+ return ruleContext.getDerivedArtifact(objectDir.getRelative(outputName),
+ ruleContext.getConfiguration().getBinDirectory());
+ }
+
+ static String getCompileArtifactName(RuleContext ruleContext, ArtifactCategory category,
+ String base) {
+ return getToolchain(ruleContext).getFeatures().getArtifactNameForCategory(
+ category, ruleContext, ImmutableMap.of("output_name", base));
+ }
+
+ static String getDotdFileName(RuleContext ruleContext, ArtifactCategory outputCategory,
+ String outputName) {
+ String baseName = outputCategory == ArtifactCategory.OBJECT_FILE
+ || outputCategory == ArtifactCategory.PROCESSED_HEADER
+ ? outputName
+ : getCompileArtifactName(ruleContext, outputCategory, outputName);
+
+ return getCompileArtifactName(ruleContext, ArtifactCategory.INCLUDED_FILE_LIST, baseName);
+ }
}