aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java35
1 files changed, 31 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
index 705dc80a26..383e64fd3b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
@@ -35,6 +35,7 @@ import com.google.devtools.build.lib.analysis.config.InvalidConfigurationExcepti
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.VariableValue;
+import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain;
import java.io.IOException;
@@ -1412,6 +1413,13 @@ public class CcToolchainFeatures implements Serializable {
return this;
}
+ /** Overrides a variable to expands {@code name} to {@code value} instead. */
+ public Builder overrideStringSequenceVariable(String name, ImmutableList<String> value) {
+ Preconditions.checkNotNull(value, "Cannot set null as a value for variable '%s'", name);
+ variablesMap.put(name, new StringSequence(value));
+ return this;
+ }
+
/**
* Add a sequence variable that expands {@code name} to {@code values}.
*
@@ -1508,10 +1516,8 @@ public class CcToolchainFeatures implements Serializable {
return this;
}
- /**
- * @return a new {@Variables} object.
- */
- Variables build() {
+ /** @return a new {@Variables} object. */
+ public Variables build() {
return new Variables(
ImmutableMap.copyOf(variablesMap), ImmutableMap.copyOf(stringVariablesMap));
}
@@ -1732,6 +1738,27 @@ public class CcToolchainFeatures implements Serializable {
return commandLine;
}
+ /** @return the flags expanded for the given {@code action} in per-feature buckets. */
+ public ImmutableList<Pair<String, List<String>>> getPerFeatureExpansions(
+ String action, Variables variables) {
+ ImmutableList.Builder<Pair<String, List<String>>> perFeatureExpansions =
+ ImmutableList.builder();
+ if (actionIsConfigured(action)) {
+ List<String> commandLine = new ArrayList<>();
+ ActionConfig actionConfig = actionConfigByActionName.get(action);
+ actionConfig.expandCommandLine(variables, enabledFeatureNames, commandLine);
+ perFeatureExpansions.add(Pair.of(actionConfig.getName(), commandLine));
+ }
+
+ for (Feature feature : enabledFeatures) {
+ List<String> commandLine = new ArrayList<>();
+ feature.expandCommandLine(action, variables, enabledFeatureNames, commandLine);
+ perFeatureExpansions.add(Pair.of(feature.getName(), commandLine));
+ }
+
+ return perFeatureExpansions.build();
+ }
+
/** @return the environment variables (key/value pairs) for the given {@code action}. */
ImmutableMap<String, String> getEnvironmentVariables(String action, Variables variables) {
ImmutableMap.Builder<String, String> envBuilder = ImmutableMap.builder();