aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java58
1 files changed, 42 insertions, 16 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
index 8931024b93..aa98d37cac 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
@@ -31,6 +31,7 @@ import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap;
+import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMapBuilder;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
@@ -41,6 +42,7 @@ import com.google.devtools.build.lib.packages.NativeAspectClass;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.cpp.CcCommon;
import com.google.devtools.build.lib.rules.cpp.CcLibraryHelper;
+import com.google.devtools.build.lib.rules.cpp.CcLibraryHelper.Info;
import com.google.devtools.build.lib.rules.cpp.CcToolchain;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
@@ -144,13 +146,12 @@ public class CcProtoAspect extends NativeAspectClass implements ConfiguredAspect
FeatureConfiguration featureConfiguration = getFeatureConfiguration(supportData);
ProtoConfiguration protoConfiguration = ruleContext.getFragment(ProtoConfiguration.class);
- CcLibraryHelper helper = initializeCcLibraryHelper(featureConfiguration);
- helper.addDeps(ruleContext.getPrerequisites("deps", TARGET));
+ CcLibraryHelper compilationHelper = initializeCompilationHelper(featureConfiguration);
// Compute and register files generated by this proto library.
Collection<Artifact> outputs = new ArrayList<>();
if (areSrcsBlacklisted()) {
- registerBlacklistedSrcs(supportData, helper);
+ registerBlacklistedSrcs(supportData, compilationHelper);
headerProvider = null;
} else if (supportData.hasProtoSources()) {
Collection<Artifact> headers =
@@ -160,8 +161,8 @@ public class CcProtoAspect extends NativeAspectClass implements ConfiguredAspect
outputs.addAll(headers);
outputs.addAll(sources);
- helper.addSources(sources);
- helper.addPublicHeaders(headers);
+ compilationHelper.addSources(sources);
+ compilationHelper.addPublicHeaders(headers);
NestedSetBuilder<Artifact> publicHeaderPaths = NestedSetBuilder.stableOrder();
publicHeaderPaths.addAll(headers);
@@ -176,7 +177,7 @@ public class CcProtoAspect extends NativeAspectClass implements ConfiguredAspect
NestedSetBuilder<Artifact> transitiveHeaders = NestedSetBuilder.stableOrder();
for (ProtoCcHeaderProvider provider :
ruleContext.getPrerequisites("deps", TARGET, ProtoCcHeaderProvider.class)) {
- helper.addPublicTextualHeaders(provider.getHeaders());
+ compilationHelper.addPublicTextualHeaders(provider.getHeaders());
transitiveHeaders.addTransitive(provider.getHeaders());
}
headerProvider = new ProtoCcHeaderProvider(transitiveHeaders.build());
@@ -186,11 +187,24 @@ public class CcProtoAspect extends NativeAspectClass implements ConfiguredAspect
filesBuilder.addAll(outputs);
createProtoCompileAction(supportData, outputs);
- CcLibraryHelper.Info info = helper.build();
- ccLibraryProviders = info.getProviders();
- outputGroups = info.getOutputGroups();
+ Info.CompilationInfo compilationInfo = compilationHelper.compile();
+ Info.LinkingInfo linkingInfo =
+ initializeLinkingHelper(featureConfiguration)
+ .link(
+ compilationInfo.getCcCompilationOutputs(),
+ compilationInfo.getCppCompilationContext());
+
+ ccLibraryProviders =
+ new TransitiveInfoProviderMapBuilder()
+ .addAll(compilationInfo.getProviders())
+ .addAll(linkingInfo.getProviders())
+ .build();
+ outputGroups =
+ ImmutableMap.copyOf(
+ Info.mergeOutputGroups(
+ compilationInfo.getOutputGroups(), linkingInfo.getOutputGroups()));
// On Windows, dynamic library is not built by default, so don't add them to filesToBuild.
- info.addLinkingOutputsTo(
+ linkingInfo.addLinkingOutputsTo(
filesBuilder, !featureConfiguration.isEnabled(CppRuleClasses.TARGETS_WINDOWS));
}
@@ -227,17 +241,29 @@ public class CcProtoAspect extends NativeAspectClass implements ConfiguredAspect
featureConfiguration,
ccToolchain(ruleContext),
CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext));
- helper.enableCcSpecificLinkParamsProvider();
- helper.enableCcNativeLibrariesProvider();
+ TransitiveInfoCollection runtime = getProtoToolchainProvider().runtime();
+ if (runtime != null) {
+ helper.addDeps(ImmutableList.of(runtime));
+ }
+
+ helper.addDeps(ruleContext.getPrerequisites("deps", TARGET));
+ return helper;
+ }
+
+ private CcLibraryHelper initializeCompilationHelper(FeatureConfiguration featureConfiguration) {
+ return initializeCcLibraryHelper(featureConfiguration);
+ }
+
+ private CcLibraryHelper initializeLinkingHelper(FeatureConfiguration featureConfiguration) {
+ CcLibraryHelper helper =
+ initializeCcLibraryHelper(featureConfiguration)
+ .enableCcSpecificLinkParamsProvider()
+ .enableCcNativeLibrariesProvider();
// TODO(dougk): Configure output artifact with action_config
// once proto compile action is configurable from the crosstool.
if (!ccToolchain(ruleContext).supportsDynamicLinker()) {
helper.setCreateDynamicLibrary(false);
}
- TransitiveInfoCollection runtime = getProtoToolchainProvider().runtime();
- if (runtime != null) {
- helper.addDeps(ImmutableList.of(runtime));
- }
return helper;
}