diff options
4 files changed, 53 insertions, 52 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java index 3f587337a1..a2269fbecb 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java @@ -27,7 +27,6 @@ import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.RunfilesSupport; import com.google.devtools.build.lib.analysis.ShToolchain; -import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; import com.google.devtools.build.lib.analysis.actions.LauncherFileWriteAction; import com.google.devtools.build.lib.analysis.actions.LauncherFileWriteAction.LaunchInfo; @@ -41,9 +40,6 @@ 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; import com.google.devtools.build.lib.rules.cpp.AbstractCcLinkParamsStore; -import com.google.devtools.build.lib.rules.cpp.CcLinkParams; -import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore; -import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo; import com.google.devtools.build.lib.rules.python.PyCommon; import com.google.devtools.build.lib.rules.python.PythonConfiguration; import com.google.devtools.build.lib.rules.python.PythonSemantics; @@ -74,10 +70,7 @@ public class BazelPythonSemantics implements PythonSemantics { @Override public void collectRunfilesForBinary( - RuleContext ruleContext, - Runfiles.Builder builder, - PyCommon common, - CcLinkingInfo ccLinkingInfo) { + RuleContext ruleContext, Runfiles.Builder builder, PyCommon common) { addRuntime(ruleContext, builder); } @@ -135,7 +128,7 @@ public class BazelPythonSemantics implements PythonSemantics { public Artifact createExecutable( RuleContext ruleContext, PyCommon common, - CcLinkingInfo ccLinkingInfo, + AbstractCcLinkParamsStore ccLinkParamsStore, NestedSet<PathFragment> imports) throws InterruptedException { String main = common.determineMainExecutableSource(/*withWorkspaceName=*/ true); @@ -361,20 +354,4 @@ public class BazelPythonSemantics implements PythonSemantics { return pythonBinary; } - @Override - public CcLinkingInfo buildCcLinkingInfoProvider( - Iterable<? extends TransitiveInfoCollection> deps) { - CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create(); - AbstractCcLinkParamsStore ccLinkParamsStore = - new AbstractCcLinkParamsStore() { - @Override - protected void collect( - CcLinkParams.Builder builder, boolean linkingStatically, boolean linkShared) { - builder.addTransitiveTargets(deps, CcLinkParamsStore.TO_LINK_PARAMS); - } - }; - // TODO(plf): return empty CcLinkingInfo. - ccLinkingInfoBuilder.setCcLinkParamsStore(new CcLinkParamsStore(ccLinkParamsStore)); - return ccLinkingInfoBuilder.build(); - } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java index b8c449529f..07a1213bca 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java @@ -24,7 +24,10 @@ import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.RunfilesSupport; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.rules.cpp.AbstractCcLinkParamsStore; import com.google.devtools.build.lib.rules.cpp.CcCommon.CcFlagsSupplier; +import com.google.devtools.build.lib.rules.cpp.CcLinkParams; +import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore; import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.vfs.PathFragment; @@ -57,6 +60,7 @@ public abstract class PyBinary implements RuleConfiguredTargetFactory { static RuleConfiguredTargetBuilder init(RuleContext ruleContext, PythonSemantics semantics, PyCommon common) throws InterruptedException { ruleContext.initConfigurationMakeVariableContext(new CcFlagsSupplier(ruleContext)); + AbstractCcLinkParamsStore ccLinkParamsStore = initializeCcLinkParamStore(ruleContext); List<Artifact> srcs = common.validateSrcs(); List<Artifact> allOutputs = @@ -76,10 +80,9 @@ public abstract class PyBinary implements RuleConfiguredTargetFactory { return null; } - CcLinkingInfo ccLinkingInfo = - semantics.buildCcLinkingInfoProvider(ruleContext.getPrerequisites("deps", Mode.TARGET)); - - Runfiles commonRunfiles = collectCommonRunfiles(ruleContext, common, semantics, ccLinkingInfo); + Artifact realExecutable = + semantics.createExecutable(ruleContext, common, ccLinkParamsStore, imports); + Runfiles commonRunfiles = collectCommonRunfiles(ruleContext, common, semantics); Runfiles.Builder defaultRunfilesBuilder = new Runfiles.Builder( ruleContext.getWorkspaceName(), ruleContext.getConfiguration().legacyExternalRunfiles()) @@ -121,22 +124,19 @@ public abstract class PyBinary implements RuleConfiguredTargetFactory { semantics.postInitBinary(ruleContext, runfilesSupport, common); - Artifact realExecutable = - semantics.createExecutable(ruleContext, common, ccLinkingInfo, imports); + CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create(); + ccLinkingInfoBuilder.setCcLinkParamsStore(new CcLinkParamsStore(ccLinkParamsStore)); return builder .setFilesToBuild(common.getFilesToBuild()) .add(RunfilesProvider.class, runfilesProvider) .setRunfilesSupport(runfilesSupport, realExecutable) + .addNativeDeclaredProvider(ccLinkingInfoBuilder.build()) .add(PythonImportsProvider.class, new PythonImportsProvider(imports)); } - private static Runfiles collectCommonRunfiles( - RuleContext ruleContext, - PyCommon common, - PythonSemantics semantics, - CcLinkingInfo ccLinkingInfo) - throws InterruptedException { + private static Runfiles collectCommonRunfiles(RuleContext ruleContext, PyCommon common, + PythonSemantics semantics) { Runfiles.Builder builder = new Runfiles.Builder( ruleContext.getWorkspaceName(), ruleContext.getConfiguration().legacyExternalRunfiles()); builder.addArtifact(common.getExecutable()); @@ -152,7 +152,20 @@ public abstract class PyBinary implements RuleConfiguredTargetFactory { || ruleContext.attributes().get("legacy_create_init", Type.BOOLEAN)) { builder.setEmptyFilesSupplier(PythonUtils.GET_INIT_PY_FILES); } - semantics.collectRunfilesForBinary(ruleContext, builder, common, ccLinkingInfo); + semantics.collectRunfilesForBinary(ruleContext, builder, common); return builder.build(); } + + private static AbstractCcLinkParamsStore initializeCcLinkParamStore( + final RuleContext ruleContext) { + return new AbstractCcLinkParamsStore() { + @Override + protected void collect( + CcLinkParams.Builder builder, boolean linkingStatically, boolean linkShared) { + builder.addTransitiveTargets( + ruleContext.getPrerequisites("deps", Mode.TARGET), + CcLinkParamsStore.TO_LINK_PARAMS); + } + }; + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyLibrary.java index 1d8c7ec6d7..97060f345c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PyLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyLibrary.java @@ -25,6 +25,10 @@ import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTa import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; +import com.google.devtools.build.lib.rules.cpp.AbstractCcLinkParamsStore; +import com.google.devtools.build.lib.rules.cpp.CcLinkParams; +import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore; +import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.ArrayList; import java.util.List; @@ -60,6 +64,17 @@ public abstract class PyLibrary implements RuleConfiguredTargetFactory { NestedSetBuilder.wrap(Order.STABLE_ORDER, allOutputs); common.addPyExtraActionPseudoAction(); + AbstractCcLinkParamsStore ccLinkParamsStore = + new AbstractCcLinkParamsStore() { + @Override + protected void collect( + CcLinkParams.Builder builder, boolean linkingStatically, boolean linkShared) { + builder.addTransitiveTargets( + ruleContext.getPrerequisites("deps", Mode.TARGET), + CcLinkParamsStore.TO_LINK_PARAMS); + } + }; + NestedSet<PathFragment> imports = common.collectImports(ruleContext, semantics); if (ruleContext.hasErrors()) { return null; @@ -78,11 +93,13 @@ public abstract class PyLibrary implements RuleConfiguredTargetFactory { RuleConfiguredTargetBuilder builder = new RuleConfiguredTargetBuilder(ruleContext); common.addCommonTransitiveInfoProviders(builder, semantics, filesToBuild); + CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create(); + ccLinkingInfoBuilder.setCcLinkParamsStore(new CcLinkParamsStore(ccLinkParamsStore)); + return builder .setFilesToBuild(filesToBuild) - .addNativeDeclaredProvider( - semantics.buildCcLinkingInfoProvider(ruleContext.getPrerequisites("deps", Mode.TARGET))) .add(RunfilesProvider.class, RunfilesProvider.simple(runfilesBuilder.build())) + .addNativeDeclaredProvider(ccLinkingInfoBuilder.build()) .add(PythonImportsProvider.class, new PythonImportsProvider(imports)) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PythonSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/python/PythonSemantics.java index 2ca0bc2c53..ee282cbe00 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PythonSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PythonSemantics.java @@ -17,10 +17,9 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.RunfilesSupport; -import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.test.InstrumentedFilesCollector.InstrumentationSpec; import com.google.devtools.build.lib.collect.nestedset.NestedSet; -import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo; +import com.google.devtools.build.lib.rules.cpp.AbstractCcLinkParamsStore; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.Collection; import java.util.List; @@ -37,13 +36,10 @@ public interface PythonSemantics { */ void validate(RuleContext ruleContext, PyCommon common); - /** Extends for the default and data runfiles of {@code py_binary} rules with custom elements. */ - void collectRunfilesForBinary( - RuleContext ruleContext, - Runfiles.Builder builder, - PyCommon common, - CcLinkingInfo ccLinkingInfo) - throws InterruptedException; + /** + * Extends for the default and data runfiles of {@code py_binary} rules with custom elements. + */ + void collectRunfilesForBinary(RuleContext ruleContext, Runfiles.Builder builder, PyCommon common); /** Extends the default runfiles of {@code py_binary} rules with custom elements. */ void collectDefaultRunfilesForBinary(RuleContext ruleContext, Runfiles.Builder builder) @@ -76,7 +72,7 @@ public interface PythonSemantics { Artifact createExecutable( RuleContext ruleContext, PyCommon common, - CcLinkingInfo ccLinkingInfo, + AbstractCcLinkParamsStore ccLinkParamsStore, NestedSet<PathFragment> imports) throws InterruptedException; @@ -86,6 +82,4 @@ public interface PythonSemantics { */ void postInitBinary(RuleContext ruleContext, RunfilesSupport runfilesSupport, PyCommon common) throws InterruptedException; - - CcLinkingInfo buildCcLinkingInfoProvider(Iterable<? extends TransitiveInfoCollection> deps); } |