diff options
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.java | 52 |
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 |