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.java52
1 files changed, 30 insertions, 22 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 a3cc7bfacb..2f4e7807e8 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
@@ -28,7 +28,6 @@ import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory;
import com.google.devtools.build.lib.analysis.OutputGroupInfo;
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;
@@ -41,8 +40,10 @@ 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.AspectLegalCppSemantics;
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.CcCompilationHelper;
+import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.CompilationInfo;
+import com.google.devtools.build.lib.rules.cpp.CcLinkingHelper;
+import com.google.devtools.build.lib.rules.cpp.CcLinkingHelper.LinkingInfo;
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;
@@ -114,9 +115,7 @@ public abstract class CcProtoAspect extends NativeAspectClass implements Configu
.requireProviders(ProtoSupportDataProvider.class)
.add(
attr(PROTO_TOOLCHAIN_ATTR, LABEL)
- .mandatoryNativeProviders(
- ImmutableList.<Class<? extends TransitiveInfoProvider>>of(
- ProtoLangToolchainProvider.class))
+ .mandatoryNativeProviders(ImmutableList.of(ProtoLangToolchainProvider.class))
.value(PROTO_TOOLCHAIN_LABEL))
.add(
attr(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, LABEL)
@@ -149,7 +148,7 @@ public abstract class CcProtoAspect extends NativeAspectClass implements Configu
FeatureConfiguration featureConfiguration = getFeatureConfiguration(supportData);
ProtoConfiguration protoConfiguration = ruleContext.getFragment(ProtoConfiguration.class);
- CcLibraryHelper compilationHelper = initializeCompilationHelper(featureConfiguration);
+ CcCompilationHelper compilationHelper = initializeCompilationHelper(featureConfiguration);
// Compute and register files generated by this proto library.
Collection<Artifact> outputs = new ArrayList<>();
@@ -190,8 +189,8 @@ public abstract class CcProtoAspect extends NativeAspectClass implements Configu
filesBuilder.addAll(outputs);
createProtoCompileAction(supportData, outputs);
- Info.CompilationInfo compilationInfo = compilationHelper.compile();
- Info.LinkingInfo linkingInfo =
+ CompilationInfo compilationInfo = compilationHelper.compile();
+ LinkingInfo linkingInfo =
initializeLinkingHelper(featureConfiguration)
.link(
compilationInfo.getCcCompilationOutputs(),
@@ -204,8 +203,9 @@ public abstract class CcProtoAspect extends NativeAspectClass implements Configu
.build();
outputGroups =
ImmutableMap.copyOf(
- Info.mergeOutputGroups(
- compilationInfo.getOutputGroups(), linkingInfo.getOutputGroups()));
+ CcCommon.mergeOutputGroups(
+ ImmutableList.of(
+ compilationInfo.getOutputGroups(), linkingInfo.getOutputGroups())));
// On Windows, dynamic library is not built by default, so don't add them to filesToBuild.
linkingInfo.addLinkingOutputsTo(
filesBuilder, !featureConfiguration.isEnabled(CppRuleClasses.TARGETS_WINDOWS));
@@ -236,9 +236,10 @@ public abstract class CcProtoAspect extends NativeAspectClass implements Configu
return featureConfiguration;
}
- private CcLibraryHelper initializeCcLibraryHelper(FeatureConfiguration featureConfiguration) {
- CcLibraryHelper helper =
- new CcLibraryHelper(
+ private CcCompilationHelper initializeCompilationHelper(
+ FeatureConfiguration featureConfiguration) {
+ CcCompilationHelper helper =
+ new CcCompilationHelper(
ruleContext,
cppSemantics,
featureConfiguration,
@@ -253,15 +254,22 @@ public abstract class CcProtoAspect extends NativeAspectClass implements Configu
return helper;
}
- private CcLibraryHelper initializeCompilationHelper(FeatureConfiguration featureConfiguration) {
- return initializeCcLibraryHelper(featureConfiguration);
- }
-
- private CcLibraryHelper initializeLinkingHelper(FeatureConfiguration featureConfiguration) {
- CcLibraryHelper helper =
- initializeCcLibraryHelper(featureConfiguration)
+ private CcLinkingHelper initializeLinkingHelper(FeatureConfiguration featureConfiguration) {
+ CcLinkingHelper helper =
+ new CcLinkingHelper(
+ ruleContext,
+ cppSemantics,
+ featureConfiguration,
+ ccToolchain(ruleContext),
+ CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext),
+ ruleContext.getConfiguration())
.enableCcSpecificLinkParamsProvider()
.enableCcNativeLibrariesProvider();
+ TransitiveInfoCollection runtime = getProtoToolchainProvider().runtime();
+ if (runtime != null) {
+ helper.addDeps(ImmutableList.of(runtime));
+ }
+ helper.addDeps(ruleContext.getPrerequisites("deps", TARGET));
// TODO(dougk): Configure output artifact with action_config
// once proto compile action is configurable from the crosstool.
if (!ccToolchain(ruleContext).supportsDynamicLinker()) {
@@ -287,7 +295,7 @@ public abstract class CcProtoAspect extends NativeAspectClass implements Configu
return result.build();
}
- private void registerBlacklistedSrcs(SupportData supportData, CcLibraryHelper helper) {
+ private void registerBlacklistedSrcs(SupportData supportData, CcCompilationHelper helper) {
// Hack: This is a proto_library for descriptor.proto or similar.
//
// The headers of those libraries are precomputed . They are also explicitly part of normal