diff options
author | lberki <lberki@google.com> | 2017-07-13 09:55:49 +0200 |
---|---|---|
committer | László Csomor <laszlocsomor@google.com> | 2017-07-14 10:48:15 +0200 |
commit | 5234676e03d25da3207057bb3d225f26bcf08e5a (patch) | |
tree | 1a36b008b74ecc9b63409e685d6f2f7d52ed1f35 /src/main/java/com/google/devtools | |
parent | 5d453d93499e328d4c0ea9b8f0c6ff4bbba08b54 (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.java | 63 |
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(" ")); + } } |