diff options
author | 2016-08-05 09:21:42 +0000 | |
---|---|---|
committer | 2016-08-05 13:32:37 +0000 | |
commit | 0284e822b276e7d1909aafb5e3732467d946d5ae (patch) | |
tree | c42553f7661bc920627387f91ac738047338d00b /src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java | |
parent | cdb6ef554397c1d3da7ee9921305f646bec5ae16 (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.java | 25 |
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); + } } |