aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar lberki <lberki@google.com>2017-07-13 09:55:49 +0200
committerGravatar László Csomor <laszlocsomor@google.com>2017-07-14 10:48:15 +0200
commit5234676e03d25da3207057bb3d225f26bcf08e5a (patch)
tree1a36b008b74ecc9b63409e685d6f2f7d52ed1f35 /src/main/java/com/google/devtools
parent5d453d93499e328d4c0ea9b8f0c6ff4bbba08b54 (diff)
Refactor CcCommon a bit.
RELNOTES: None. PiperOrigin-RevId: 161774151
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java63
1 files changed, 36 insertions, 27 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index f2298b81a8..05d5258bcb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -33,6 +33,7 @@ import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.packages.BuildType;
+import com.google.devtools.build.lib.rules.MakeVariableProvider;
import com.google.devtools.build.lib.rules.apple.ApplePlatform;
import com.google.devtools.build.lib.rules.cpp.CcLibraryHelper.SourceCategory;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
@@ -330,33 +331,8 @@ public final class CcCommon {
return null;
}
- CcToolchainProvider toolchain =
- CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext);
- FeatureConfiguration featureConfiguration =
- CcCommon.configureFeatures(ruleContext, toolchain);
- if (!featureConfiguration.actionIsConfigured(
- CppCompileAction.CC_FLAGS_MAKE_VARIABLE_ACTION_NAME)) {
- return null;
- }
-
- Variables buildVariables = new Variables.Builder()
- .addAllStringVariables(toolchain.getBuildVariables())
- .build();
- String toolchainCcFlags =
- Joiner.on(" ")
- .join(
- featureConfiguration.getCommandLine(
- CppCompileAction.CC_FLAGS_MAKE_VARIABLE_ACTION_NAME, buildVariables));
-
- ImmutableMap<String, String> currentMakeVariables =
- ruleContext.getMakeVariables(ImmutableList.of(CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME));
- Preconditions.checkArgument(
- currentMakeVariables.containsKey(CppConfiguration.CC_FLAGS_MAKE_VARIABLE_NAME));
-
- return FluentIterable.of(
- currentMakeVariables.get(CppConfiguration.CC_FLAGS_MAKE_VARIABLE_NAME))
- .append(toolchainCcFlags)
- .join(Joiner.on(" "));
+ return CcCommon.computeCcFlags(ruleContext, ruleContext.getPrerequisite(
+ CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, Mode.TARGET));
}
@Override
@@ -696,4 +672,37 @@ public final class CcCommon {
RuleContext ruleContext, CcToolchainProvider toolchain) {
return configureFeatures(ruleContext, toolchain, SourceCategory.CC);
}
+
+ /**
+ * Computes the appropriate value of the {@code $(CC_FLAGS)} Make variable based on the given
+ * toolchain.
+ */
+ public static String computeCcFlags(RuleContext ruleContext, TransitiveInfoCollection toolchain) {
+ CcToolchainProvider toolchainProvider = toolchain.getProvider(CcToolchainProvider.class);
+ FeatureConfiguration featureConfiguration =
+ CcCommon.configureFeatures(ruleContext, toolchainProvider);
+ if (!featureConfiguration.actionIsConfigured(
+ CppCompileAction.CC_FLAGS_MAKE_VARIABLE_ACTION_NAME)) {
+ return null;
+ }
+
+ Variables buildVariables = new Variables.Builder()
+ .addAllStringVariables(toolchainProvider.getBuildVariables())
+ .build();
+ String toolchainCcFlags =
+ Joiner.on(" ")
+ .join(
+ featureConfiguration.getCommandLine(
+ CppCompileAction.CC_FLAGS_MAKE_VARIABLE_ACTION_NAME, buildVariables));
+ String oldCcFlags = "";
+ MakeVariableProvider makeVariableProvider =
+ toolchain.get(MakeVariableProvider.SKYLARK_CONSTRUCTOR);
+ if (makeVariableProvider != null) {
+ oldCcFlags = makeVariableProvider.getMakeVariables().getOrDefault(
+ CppConfiguration.CC_FLAGS_MAKE_VARIABLE_NAME, "");
+ }
+ return FluentIterable.of(oldCcFlags)
+ .append(toolchainCcFlags)
+ .join(Joiner.on(" "));
+ }
}