diff options
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(); } |