aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar plf <plf@google.com>2018-05-30 00:57:11 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-30 00:58:34 -0700
commit8f384fc273e36ecc2a35f0b2f0d69e137651e36c (patch)
treee8b571561930246b4c71588df5328982ee483dea /src
parent7036e9dcd5f4dfe0d74b70f5754c2d3ec78c5c3c (diff)
C++: Hide compilation context from Skylark
RELNOTES:none PiperOrigin-RevId: 198518792
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java47
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationInfoApi.java8
6 files changed, 52 insertions, 51 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 8786a4b679..71a05ab92c 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
@@ -841,7 +841,7 @@ public final class CcCommon {
unsupportedFeaturesBuilder.add(CppRuleClasses.PARSE_HEADERS);
unsupportedFeaturesBuilder.add(CppRuleClasses.PREPROCESS_HEADERS);
}
- if (toolchain.getCcCompilationContext().getCppModuleMap() == null) {
+ if (toolchain.getCcCompilationInfo().getCcCompilationContext().getCppModuleMap() == null) {
unsupportedFeaturesBuilder.add(CppRuleClasses.MODULE_MAPS);
}
if (enableStaticLinkCppRuntimesFeature(requestedFeatures, unsupportedFeatures, toolchain)) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
index cec53199e4..931db5361a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
@@ -209,7 +209,7 @@ public final class CcCompilationHelper {
private CoptsFilter coptsFilter = CoptsFilter.alwaysPasses();
private final Set<String> defines = new LinkedHashSet<>();
private final List<TransitiveInfoCollection> deps = new ArrayList<>();
- private final List<CcCompilationContext> ccCompilationContexts = new ArrayList<>();
+ private final List<CcCompilationInfo> ccCompilationInfos = new ArrayList<>();
private final List<PathFragment> looseIncludeDirs = new ArrayList<>();
private final List<PathFragment> systemIncludeDirs = new ArrayList<>();
private final List<PathFragment> includeDirs = new ArrayList<>();
@@ -573,10 +573,9 @@ public final class CcCompilationHelper {
return this;
}
- /** For adding CC compilation contexts that affect compilation, e.g: from dependencies. */
- public CcCompilationHelper addCcCompilationContexts(
- List<CcCompilationContext> ccCompilationContexts) {
- this.ccCompilationContexts.addAll(Preconditions.checkNotNull(ccCompilationContexts));
+ /** For adding CC compilation infos that affect compilation, e.g: from dependencies. */
+ public CcCompilationHelper addCcCompilationInfos(Iterable<CcCompilationInfo> ccCompilationInfos) {
+ Iterables.addAll(this.ccCompilationInfos, Preconditions.checkNotNull(ccCompilationInfos));
return this;
}
@@ -958,9 +957,13 @@ public final class CcCompilationHelper {
if (useDeps) {
ccCompilationContextBuilder.mergeDependentCcCompilationContexts(
CcCompilationInfo.getCcCompilationContexts(deps));
- ccCompilationContextBuilder.mergeDependentCcCompilationContexts(ccCompilationContexts);
+ ccCompilationContextBuilder.mergeDependentCcCompilationContexts(
+ ccCompilationInfos
+ .stream()
+ .map(CcCompilationInfo::getCcCompilationContext)
+ .collect(ImmutableList.toImmutableList()));
}
- CppHelper.mergeToolchainDependentCcCompilationContext(
+ mergeToolchainDependentCcCompilationContext(
ruleContext, ccToolchain, ccCompilationContextBuilder);
// But defines come after those inherited from deps.
@@ -1138,7 +1141,7 @@ public final class CcCompilationHelper {
}
if (ccToolchain != null) {
- result.add(ccToolchain.getCcCompilationContext().getCppModuleMap());
+ result.add(ccToolchain.getCcCompilationInfo().getCcCompilationContext().getCppModuleMap());
}
for (CppModuleMap additionalCppModuleMap : additionalCppModuleMaps) {
result.add(additionalCppModuleMap);
@@ -2122,4 +2125,32 @@ public final class CcCompilationHelper {
return ImmutableList.of(dAction.getOutputFile(), sdAction.getOutputFile());
}
+
+ /**
+ * Merges the STL and toolchain contexts into context builder. The STL is automatically determined
+ * using the ":stl" attribute.
+ */
+ private static void mergeToolchainDependentCcCompilationContext(
+ RuleContext ruleContext,
+ CcToolchainProvider toolchain,
+ CcCompilationContext.Builder ccCompilationContextBuilder) {
+ if (ruleContext.getRule().getAttributeDefinition(":stl") != null) {
+ TransitiveInfoCollection stl = ruleContext.getPrerequisite(":stl", Mode.TARGET);
+ if (stl != null) {
+ CcCompilationInfo ccCompilationInfo = stl.get(CcCompilationInfo.PROVIDER);
+ CcCompilationContext ccCompilationContext =
+ ccCompilationInfo != null ? ccCompilationInfo.getCcCompilationContext() : null;
+ if (ccCompilationContext == null) {
+ ruleContext.ruleError(
+ "Unable to merge the STL '" + stl.getLabel() + "' and toolchain contexts");
+ return;
+ }
+ ccCompilationContextBuilder.mergeDependentCcCompilationContext(ccCompilationContext);
+ }
+ }
+ if (toolchain != null) {
+ ccCompilationContextBuilder.mergeDependentCcCompilationContext(
+ toolchain.getCcCompilationContext());
+ }
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java
index f36d12397f..37c43b6f5f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java
@@ -43,7 +43,7 @@ public final class CcCompilationInfo extends NativeInfo implements CcCompilation
/* numMandatoryNamedOnly= */ 1,
/* starArg= */ false,
/* kwArg= */ false,
- "cc_compilation_context"),
+ "cc_compilation_info"),
/* defaultValues= */ ImmutableList.of(),
/* types= */ ImmutableList.of(SkylarkType.of(CcCompilationContext.class)));
@@ -56,7 +56,8 @@ public final class CcCompilationInfo extends NativeInfo implements CcCompilation
Object[] args, Environment env, Location loc) throws EvalException {
CcCommon.checkLocationWhitelisted(loc);
CcCompilationInfo.Builder ccCompilationInfoBuilder = CcCompilationInfo.Builder.create();
- ccCompilationInfoBuilder.setCcCompilationContext((CcCompilationContext) args[0]);
+ ccCompilationInfoBuilder.setCcCompilationContext(
+ ((CcCompilationInfo) args[0]).getCcCompilationContext());
return ccCompilationInfoBuilder.build();
}
};
@@ -70,7 +71,6 @@ public final class CcCompilationInfo extends NativeInfo implements CcCompilation
this.ccCompilationContext = ccCompilationContext;
}
- @Override
public CcCompilationContext getCcCompilationContext() {
return ccCompilationContext;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
index 43fc27630d..81ebe62a51 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
@@ -107,7 +107,7 @@ public final class CcToolchainProvider extends ToolchainInfo
private final NestedSet<Artifact> dynamicRuntimeLinkInputs;
@Nullable private final Artifact dynamicRuntimeLinkMiddleman;
private final PathFragment dynamicRuntimeSolibDir;
- private final CcCompilationContext ccCompilationContext;
+ private final CcCompilationInfo ccCompilationInfo;
private final boolean supportsParamFiles;
private final boolean supportsHeaderParsing;
private final CcToolchainVariables buildVariables;
@@ -179,7 +179,8 @@ public final class CcToolchainProvider extends ToolchainInfo
this.dynamicRuntimeLinkInputs = Preconditions.checkNotNull(dynamicRuntimeLinkInputs);
this.dynamicRuntimeLinkMiddleman = dynamicRuntimeLinkMiddleman;
this.dynamicRuntimeSolibDir = Preconditions.checkNotNull(dynamicRuntimeSolibDir);
- this.ccCompilationContext = Preconditions.checkNotNull(ccCompilationContext);
+ this.ccCompilationInfo =
+ new CcCompilationInfo(Preconditions.checkNotNull(ccCompilationContext));
this.supportsParamFiles = supportsParamFiles;
this.supportsHeaderParsing = supportsHeaderParsing;
this.buildVariables = buildVariables;
@@ -430,7 +431,12 @@ public final class CcToolchainProvider extends ToolchainInfo
/** Returns the {@code CcCompilationContext} for the toolchain. */
public CcCompilationContext getCcCompilationContext() {
- return ccCompilationContext;
+ return ccCompilationInfo.getCcCompilationContext();
+ }
+
+ /** Returns the {@code CcCompilationContext} for the toolchain. */
+ public CcCompilationInfo getCcCompilationInfo() {
+ return ccCompilationInfo;
}
/**
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 a192983cb0..fa2531f0f7 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
@@ -108,34 +108,6 @@ public class CppHelper {
}
/**
- * Merges the STL and toolchain contexts into context builder. The STL is automatically determined
- * using the ":stl" attribute.
- */
- public static void mergeToolchainDependentCcCompilationContext(
- RuleContext ruleContext,
- CcToolchainProvider toolchain,
- CcCompilationContext.Builder ccCompilationContextBuilder) {
- if (ruleContext.getRule().getAttributeDefinition(":stl") != null) {
- TransitiveInfoCollection stl = ruleContext.getPrerequisite(":stl", Mode.TARGET);
- if (stl != null) {
- CcCompilationInfo ccCompilationInfo = stl.get(CcCompilationInfo.PROVIDER);
- CcCompilationContext ccCompilationContext =
- ccCompilationInfo != null ? ccCompilationInfo.getCcCompilationContext() : null;
- if (ccCompilationContext == null) {
- ruleContext.ruleError(
- "Unable to merge the STL '" + stl.getLabel() + "' and toolchain contexts");
- return;
- }
- ccCompilationContextBuilder.mergeDependentCcCompilationContext(ccCompilationContext);
- }
- }
- if (toolchain != null) {
- ccCompilationContextBuilder.mergeDependentCcCompilationContext(
- toolchain.getCcCompilationContext());
- }
- }
-
- /**
* Returns the malloc implementation for the given target.
*/
public static TransitiveInfoCollection mallocForTarget(
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationInfoApi.java
index e0e8a9f9e6..ca6176ae5f 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationInfoApi.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.lib.skylarkbuildapi.cpp;
-import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -28,11 +27,4 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
doc = "Wrapper for every C++ compilation provider"
)
public interface CcCompilationInfoApi {
- @SkylarkCallable(
- name = "cc_compilation_context",
- structField = true,
- allowReturnNones = true,
- doc = "Returns compilation information for this C++ target."
- )
- public CcCompilationContextApi getCcCompilationContext();
}