diff options
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.java | 35 |
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(); |