diff --git a/src/main/java/com/google/devtools/build/lib/actions/MiddlemanFactory.java b/src/main/java/com/google/devtools/build/lib/actions/MiddlemanFactory.java index 7db99aa748ba8e..317430d68c725b 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/MiddlemanFactory.java +++ b/src/main/java/com/google/devtools/build/lib/actions/MiddlemanFactory.java @@ -130,34 +130,6 @@ private Pair createMiddleman( return Pair.of(stampFile, action); } - /** - * Creates a normal middleman. - * - *

If called multiple times, it always returns the same object depending on the {@code - * purpose}. It does not check that the list of inputs is identical. In contrast to other - * middleman methods, this one also returns an object if the list of inputs is empty. - * - *

Note: there's no need to synchronize this method; the only use of a field is via a call to - * another synchronized method (getArtifact()). - */ - public Artifact.DerivedArtifact createMiddlemanAllowMultiple( - ActionRegistry registry, - ActionOwner owner, - PathFragment packageDirectory, - String purpose, - NestedSet inputs, - ArtifactRoot middlemanDir) { - String escapedPackageDirectory = Actions.escapedPath(packageDirectory.getPathString()); - PathFragment stampName = - PathFragment.create("_middlemen/" + (purpose.startsWith(escapedPackageDirectory) - ? purpose : (escapedPackageDirectory + purpose))); - Artifact.DerivedArtifact stampFile = - artifactFactory.getDerivedArtifact(stampName, middlemanDir, actionRegistry.getOwner()); - MiddlemanAction.create( - registry, owner, inputs, stampFile, purpose, MiddlemanType.AGGREGATING_MIDDLEMAN); - return stampFile; - } - private Artifact.DerivedArtifact getStampFileArtifact( String middlemanName, String purpose, ArtifactRoot middlemanDir) { String escapedFilename = Actions.escapedPath(middlemanName); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/BUILD index e382feeeafae8e..a0ee6e9e45a531 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BUILD +++ b/src/main/java/com/google/devtools/build/lib/analysis/BUILD @@ -50,7 +50,6 @@ java_library( ":buildinfo/build_info_collection", ":buildinfo/build_info_key", ":common_prerequisite_validator", - ":compilation_helper", ":config/auto_cpu_converter", ":config/build_configuration", ":config/build_configuration_option_details", @@ -105,7 +104,6 @@ java_library( ":licenses_provider", ":make_environment_event", ":make_variable_supplier", - ":middleman_provider", ":no_build_event", ":no_build_request_finished_event", ":options_diff_predicate", @@ -332,7 +330,6 @@ java_library( ":label_expander", ":licenses_provider", ":make_variable_supplier", - ":middleman_provider", ":options_diff_predicate", ":package_specification_provider", ":platform_options", @@ -644,20 +641,6 @@ java_library( ], ) -java_library( - name = "compilation_helper", - srcs = ["CompilationHelper.java"], - deps = [ - ":analysis_cluster", - ":file_provider", - ":transitive_info_collection", - "//src/main/java/com/google/devtools/build/lib/actions", - "//src/main/java/com/google/devtools/build/lib/actions:artifacts", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset", - "//third_party:guava", - ], -) - java_library( name = "configurations_collector", srcs = [ @@ -896,18 +879,6 @@ java_library( ], ) -java_library( - name = "middleman_provider", - srcs = ["MiddlemanProvider.java"], - deps = [ - ":transitive_info_provider", - "//src/main/java/com/google/devtools/build/lib/actions:artifacts", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset", - "//src/main/java/com/google/devtools/build/lib/concurrent", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", - ], -) - java_library( name = "no_build_event", srcs = ["NoBuildEvent.java"], diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java index d3ff1ce5cec81b..43ffbdf9624982 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/CommandHelper.java @@ -174,10 +174,6 @@ private CommandHelper( for (Iterable tools : toolsList) { for (TransitiveInfoCollection dep : tools) { // (Note: host configuration) - MiddlemanProvider toolMiddleman = dep.getProvider(MiddlemanProvider.class); - if (toolMiddleman != null) { - resolvedToolsBuilder.addTransitive(toolMiddleman.getMiddlemanArtifact()); - } FilesToRunProvider tool = dep.getProvider(FilesToRunProvider.class); if (tool == null) { @@ -185,25 +181,15 @@ private CommandHelper( } NestedSet files = tool.getFilesToRun(); - // It is not obviously correct to skip potentially adding getFilesToRun of the - // FilesToRunProvider. However, for all tools that we know of that provide a middleman, the - // middleman is equivalent to the list of files coming out of getFilesToRun(). Just adding - // all the files creates a substantial performance bottleneck. E.g. a C++ toolchain might - // consist of thousands of files and tracking them one by one for each action that uses them - // is inefficient. - if (toolMiddleman == null) { - resolvedToolsBuilder.addTransitive(files); - } + resolvedToolsBuilder.addTransitive(files); Label label = AliasProvider.getDependencyLabel(dep); Artifact executableArtifact = tool.getExecutable(); // If the label has an executable artifact add that to the multimaps. if (executableArtifact != null) { mapGet(tempLabelMap, label).add(executableArtifact); - if (toolMiddleman == null) { - // Also send the runfiles when running remotely. - toolsRunfilesBuilder.add(tool.getRunfilesSupplier()); - } + // Also send the runfiles when running remotely. + toolsRunfilesBuilder.add(tool.getRunfilesSupplier()); } else { // Map all depArtifacts to the respective label using the multimaps. mapGet(tempLabelMap, label).addAll(files.toList()); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/CompilationHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/CompilationHelper.java deleted file mode 100644 index 8b70fa09bd63c2..00000000000000 --- a/src/main/java/com/google/devtools/build/lib/analysis/CompilationHelper.java +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2014 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.devtools.build.lib.analysis; - -import com.google.common.collect.ImmutableList; -import com.google.devtools.build.lib.actions.ActionOwner; -import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.actions.MiddlemanFactory; -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 java.util.List; - -/** - * A helper class for compilation helpers. - */ -public final class CompilationHelper { - /** - * Returns a middleman for all files to build for the given configured target. - * If multiple calls are made, then it returns the same artifact for - * configurations with the same internal directory. - * - *

The resulting middleman only aggregates the inputs and must be expanded - * before an action using it can be sent to a distributed execution-system. - */ - public static NestedSet getAggregatingMiddleman( - RuleContext ruleContext, String purpose, NestedSet filesToBuild) { - return NestedSetBuilder.wrap(Order.STABLE_ORDER, getMiddlemanInternal( - ruleContext.getAnalysisEnvironment(), ruleContext, ruleContext.getActionOwner(), purpose, - filesToBuild)); - } - - /** - * Internal implementation for getAggregatingMiddleman / getAggregatingMiddlemanWithSolibSymlinks. - */ - private static List getMiddlemanInternal(AnalysisEnvironment env, - RuleContext ruleContext, ActionOwner actionOwner, String purpose, - NestedSet filesToBuild) { - if (filesToBuild == null) { - return ImmutableList.of(); - } - MiddlemanFactory factory = env.getMiddlemanFactory(); - return ImmutableList.of( - factory.createMiddlemanAllowMultiple( - env, - actionOwner, - ruleContext.getPackageDirectory(), - purpose, - filesToBuild, - ruleContext.getMiddlemanDirectory())); - } - - // TODO(bazel-team): remove this duplicated code after the ConfiguredTarget migration - /** - * Returns a middleman for all files to build for the given configured target. - * If multiple calls are made, then it returns the same artifact for - * configurations with the same internal directory. - * - *

The resulting middleman only aggregates the inputs and must be expanded - * before an action using it can be sent to a distributed execution-system. - */ - public static NestedSet getAggregatingMiddleman( - RuleContext ruleContext, String purpose, TransitiveInfoCollection dep) { - return NestedSetBuilder.wrap(Order.STABLE_ORDER, getMiddlemanInternal( - ruleContext.getAnalysisEnvironment(), ruleContext, ruleContext.getActionOwner(), purpose, - dep)); - } - - /** - * Internal implementation for getAggregatingMiddleman / getAggregatingMiddlemanWithSolibSymlinks. - */ - private static List getMiddlemanInternal(AnalysisEnvironment env, - RuleContext ruleContext, ActionOwner actionOwner, String purpose, - TransitiveInfoCollection dep) { - if (dep == null) { - return ImmutableList.of(); - } - MiddlemanFactory factory = env.getMiddlemanFactory(); - NestedSet artifacts = dep.getProvider(FileProvider.class).getFilesToBuild(); - return ImmutableList.of( - factory.createMiddlemanAllowMultiple( - env, - actionOwner, - ruleContext.getPackageDirectory(), - purpose, - artifacts, - ruleContext.getMiddlemanDirectory())); - } -} diff --git a/src/main/java/com/google/devtools/build/lib/analysis/MiddlemanProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/MiddlemanProvider.java deleted file mode 100644 index dd07880ecf5ab9..00000000000000 --- a/src/main/java/com/google/devtools/build/lib/analysis/MiddlemanProvider.java +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2014 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package com.google.devtools.build.lib.analysis; - -import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.collect.nestedset.NestedSet; -import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; - -/** A provider class that supplies an aggregating middleman to the targets that depend on it. */ -@Immutable -@AutoCodec -public final class MiddlemanProvider implements TransitiveInfoProvider { - private final NestedSet middlemanArtifact; - - @AutoCodec.Instantiator - public MiddlemanProvider(NestedSet middlemanArtifact) { - this.middlemanArtifact = middlemanArtifact; - } - - /** - * Returns the middleman for the files produced by the transitive info collection. - */ - public NestedSet getMiddlemanArtifact() { - return middlemanArtifact; - } -} diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java index ca115f62f71f45..29649efe8f54dc 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java @@ -792,10 +792,6 @@ public boolean inprocessSymlinkCreation() { return options.inprocessSymlinkCreation; } - public boolean enableAggregatingMiddleman() { - return options.enableAggregatingMiddleman; - } - public boolean skipRunfilesManifests() { return options.skipRunfilesManifests; } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java index d963c4c1ab8f72..f37d7505f9b70a 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java @@ -81,7 +81,7 @@ public void finalizeCompileActionBuilder( .setShouldScanIncludes(false); } else { actionBuilder - .addTransitiveMandatoryInputs(toolchain.getAllFilesMiddleman()) + .addTransitiveMandatoryInputs(toolchain.getAllFiles()) .setShouldScanIncludes(false); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/BUILD b/src/main/java/com/google/devtools/build/lib/rules/BUILD index 467b4b4849c165..0d47aadb3d9d1d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/BUILD @@ -233,10 +233,8 @@ java_library( "//src/main/java/com/google/devtools/build/lib/actions", "//src/main/java/com/google/devtools/build/lib/actions:artifacts", "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster", - "//src/main/java/com/google/devtools/build/lib/analysis:compilation_helper", "//src/main/java/com/google/devtools/build/lib/analysis:config/build_configuration", "//src/main/java/com/google/devtools/build/lib/analysis:configured_target", - "//src/main/java/com/google/devtools/build/lib/analysis:middleman_provider", "//src/main/java/com/google/devtools/build/lib/analysis:test/instrumented_files_info", "//src/main/java/com/google/devtools/build/lib/analysis:transitive_info_collection", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java index a1ac43297572c7..50856ed0453cd5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java @@ -487,7 +487,7 @@ private static SpawnAction.Builder singleJarSpawnActionBuilder(RuleContext ruleC JavaCommon.getHostJavaExecutable(ruleContext), singleJar, JavaToolchainProvider.from(ruleContext).getJvmOptions()) - .addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputsMiddleman()); + .addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputs()); } else { builder.setExecutable(singleJar); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index 63f9fbf64db7a7..1a8f7fc3ca7e3a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -1774,7 +1774,7 @@ private static SpawnAction.Builder singleJarSpawnActionBuilder(RuleContext ruleC JavaCommon.getHostJavaExecutable(ruleContext), singleJar, JavaToolchainProvider.from(ruleContext).getJvmOptions()) - .addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputsMiddleman()); + .addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputs()); } else { builder.setExecutable(singleJar); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java index 6092864e860859..2abb2072d36949 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java @@ -391,7 +391,7 @@ private static void setSingleJarAsExecutable( JavaCommon.getHostJavaExecutable(ruleContext), singleJar, JavaToolchainProvider.from(ruleContext).getJvmOptions()) - .addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputsMiddleman()); + .addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputs()); } else { builder.setExecutable(singleJar); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD index bf78cb83fd0b4d..98ca3ad148d9a1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD @@ -47,7 +47,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/analysis:blaze_directories", "//src/main/java/com/google/devtools/build/lib/analysis:buildinfo/build_info_collection", "//src/main/java/com/google/devtools/build/lib/analysis:buildinfo/build_info_key", - "//src/main/java/com/google/devtools/build/lib/analysis:compilation_helper", "//src/main/java/com/google/devtools/build/lib/analysis:config/build_configuration", "//src/main/java/com/google/devtools/build/lib/analysis:config/build_options", "//src/main/java/com/google/devtools/build/lib/analysis:config/compilation_mode", @@ -65,7 +64,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/analysis:file_provider", "//src/main/java/com/google/devtools/build/lib/analysis:licenses_provider", "//src/main/java/com/google/devtools/build/lib/analysis:make_variable_supplier", - "//src/main/java/com/google/devtools/build/lib/analysis:middleman_provider", "//src/main/java/com/google/devtools/build/lib/analysis:package_specification_provider", "//src/main/java/com/google/devtools/build/lib/analysis:platform_configuration", "//src/main/java/com/google/devtools/build/lib/analysis:rule_definition_environment", diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcHostToolchainAliasRule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcHostToolchainAliasRule.java index 2ffc367a811eb6..98bcf9b8b8f3a4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcHostToolchainAliasRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcHostToolchainAliasRule.java @@ -20,7 +20,6 @@ import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; import com.google.devtools.build.lib.analysis.BaseRuleClasses; import com.google.devtools.build.lib.analysis.ConfiguredTarget; -import com.google.devtools.build.lib.analysis.MiddlemanProvider; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; @@ -78,7 +77,6 @@ public ConfiguredTarget create(RuleContext ruleContext) .addNativeDeclaredProvider(toolchain) .addNativeDeclaredProvider(templateVariableInfo) .setFilesToBuild(ccToolchainProvider.getAllFiles()) - .addProvider(new MiddlemanProvider(ccToolchainProvider.getAllFilesMiddleman())) .build(); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java index 07967bcf64c99d..7ba76004ff435d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java @@ -719,7 +719,6 @@ private boolean createDynamicLinkAction( try { dynamicLinkActionBuilder.setRuntimeInputs( ArtifactCategory.DYNAMIC_LIBRARY, - ccToolchain.getDynamicRuntimeLinkMiddleman(ruleErrorConsumer, featureConfiguration), ccToolchain.getDynamicRuntimeLinkInputs(featureConfiguration)); } catch (EvalException e) { throw ruleErrorConsumer.throwWithRuleError(e); @@ -728,7 +727,6 @@ private boolean createDynamicLinkAction( try { dynamicLinkActionBuilder.setRuntimeInputs( ArtifactCategory.STATIC_LIBRARY, - ccToolchain.getStaticRuntimeLinkMiddleman(ruleErrorConsumer, featureConfiguration), ccToolchain.getStaticRuntimeLinkInputs(featureConfiguration)); } catch (EvalException e) { throw ruleErrorConsumer.throwWithRuleError(e); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java index 5c096847e97b4b..1561a8f181283e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java @@ -17,7 +17,6 @@ import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.LicensesProvider; -import com.google.devtools.build.lib.analysis.MiddlemanProvider; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; @@ -112,8 +111,7 @@ public ConfiguredTarget create(RuleContext ruleContext) .addNativeDeclaredProvider(ccToolchainProvider) .addNativeDeclaredProvider(toolchain) .addNativeDeclaredProvider(templateVariableInfo) - .setFilesToBuild(ccToolchainProvider.getAllFiles()) - .addProvider(new MiddlemanProvider(ccToolchainProvider.getAllFilesMiddleman())); + .setFilesToBuild(ccToolchainProvider.getAllFiles()); return ruleConfiguredTargetBuilder.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAliasRule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAliasRule.java index 7a25227f899f9a..f97a58f9561351 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAliasRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAliasRule.java @@ -22,7 +22,6 @@ import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; import com.google.devtools.build.lib.analysis.BaseRuleClasses; import com.google.devtools.build.lib.analysis.ConfiguredTarget; -import com.google.devtools.build.lib.analysis.MiddlemanProvider; import com.google.devtools.build.lib.analysis.PlatformConfiguration; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; @@ -94,7 +93,6 @@ public ConfiguredTarget create(RuleContext ruleContext) .addNativeDeclaredProvider(toolchain) .addNativeDeclaredProvider(templateVariableInfo) .setFilesToBuild(ccToolchainProvider.getAllFiles()) - .addProvider(new MiddlemanProvider(ccToolchainProvider.getAllFilesMiddleman())) .build(); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java index 6755048265cbf9..fcfd6226a074b1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java @@ -25,7 +25,6 @@ import com.google.devtools.build.lib.analysis.LicensesProvider; import com.google.devtools.build.lib.analysis.LicensesProvider.TargetLicense; import com.google.devtools.build.lib.analysis.LicensesProviderImpl; -import com.google.devtools.build.lib.analysis.MiddlemanProvider; import com.google.devtools.build.lib.analysis.PackageSpecificationProvider; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; @@ -55,7 +54,6 @@ public class CcToolchainAttributesProvider extends NativeInfo implements HasCcTo private final boolean supportsParamFiles; private final boolean supportsHeaderParsing; private final NestedSet allFiles; - private final NestedSet allFilesMiddleman; private final NestedSet compilerFiles; private final NestedSet compilerFilesWithoutIncludes; private final NestedSet stripFiles; @@ -66,7 +64,6 @@ public class CcToolchainAttributesProvider extends NativeInfo implements HasCcTo private final NestedSet dwpFiles; private final Label libcTopAttribute; private final NestedSet libc; - private final NestedSet libcMiddleman; private final TransitiveInfoCollection libcTop; private final NestedSet targetLibc; private final TransitiveInfoCollection targetLibcTop; @@ -120,20 +117,17 @@ public CcToolchainAttributesProvider( this.compiler = ruleContext.attributes().get("compiler", Type.STRING); this.supportsParamFiles = ruleContext.attributes().get("supports_param_files", BOOLEAN); this.supportsHeaderParsing = ruleContext.attributes().get("supports_header_parsing", BOOLEAN); - this.allFiles = - ruleContext.getPrerequisite("all_files").getProvider(FileProvider.class).getFilesToBuild(); - this.allFilesMiddleman = getMiddlemanOrFiles(ruleContext, "all_files"); - this.compilerFiles = getMiddlemanOrFiles(ruleContext, "compiler_files"); + this.allFiles = getFiles(ruleContext, "all_files"); + this.compilerFiles = getFiles(ruleContext, "compiler_files"); this.compilerFilesWithoutIncludes = - getOptionalMiddlemanOrFiles(ruleContext, "compiler_files_without_includes"); - this.stripFiles = getMiddlemanOrFiles(ruleContext, "strip_files"); - this.objcopyFiles = getMiddlemanOrFiles(ruleContext, "objcopy_files"); - this.asFiles = getOptionalMiddlemanOrFiles(ruleContext, "as_files"); - this.arFiles = getOptionalMiddlemanOrFiles(ruleContext, "ar_files"); - this.linkerFiles = getMiddlemanOrFiles(ruleContext, "linker_files"); - this.dwpFiles = getMiddlemanOrFiles(ruleContext, "dwp_files"); - - this.libcMiddleman = getOptionalMiddlemanOrFiles(ruleContext, CcToolchainRule.LIBC_TOP_ATTR); + getOptionalFiles(ruleContext, "compiler_files_without_includes"); + this.stripFiles = getFiles(ruleContext, "strip_files"); + this.objcopyFiles = getFiles(ruleContext, "objcopy_files"); + this.asFiles = getOptionalFiles(ruleContext, "as_files"); + this.arFiles = getOptionalFiles(ruleContext, "ar_files"); + this.linkerFiles = getFiles(ruleContext, "linker_files"); + this.dwpFiles = getFiles(ruleContext, "dwp_files"); + this.libc = getOptionalFiles(ruleContext, CcToolchainRule.LIBC_TOP_ATTR); this.libcTop = ruleContext.getPrerequisite(CcToolchainRule.LIBC_TOP_ATTR); @@ -144,12 +138,11 @@ public CcToolchainAttributesProvider( this.fullInputsForCrosstool = NestedSetBuilder.stableOrder() - .addTransitive(allFilesMiddleman) - .addTransitive(libcMiddleman) + .addTransitive(allFiles) + .addTransitive(libc) .build(); - this.fullInputsForLink = - fullInputsForLink(ruleContext, linkerFiles, libcMiddleman, isAppleToolchain); - NestedSet coverageFiles = getOptionalMiddlemanOrFiles(ruleContext, "coverage_files"); + this.fullInputsForLink = fullInputsForLink(ruleContext, linkerFiles, libc, isAppleToolchain); + NestedSet coverageFiles = getOptionalFiles(ruleContext, "coverage_files"); if (coverageFiles.isEmpty()) { this.coverage = Preconditions.checkNotNull(this.allFiles); } else { @@ -289,10 +282,6 @@ public NestedSet getAllFiles() { return allFiles; } - public NestedSet getAllFilesMiddleman() { - return allFilesMiddleman; - } - public NestedSet getCompilerFiles() { return compilerFiles; } @@ -422,22 +411,9 @@ public PackageSpecificationProvider getAllowlistForLooseHeaderCheck() { return allowlistForLooseHeaderCheck; } - private static NestedSet getMiddlemanOrFiles(RuleContext context, String attribute) { - TransitiveInfoCollection dep = context.getPrerequisite(attribute); - MiddlemanProvider middlemanProvider = dep.getProvider(MiddlemanProvider.class); - // We use the middleman if we can (if the dep is a filegroup), otherwise, just the regular - // filesToBuild (e.g. if it is a simple input file) - return middlemanProvider != null - ? middlemanProvider.getMiddlemanArtifact() - : dep.getProvider(FileProvider.class).getFilesToBuild(); - } - - private static NestedSet getOptionalMiddlemanOrFiles( - RuleContext context, String attribute) { + private static NestedSet getFiles(RuleContext context, String attribute) { TransitiveInfoCollection dep = context.getPrerequisite(attribute); - return dep != null - ? getMiddlemanOrFiles(context, attribute) - : NestedSetBuilder.emptySet(Order.STABLE_ORDER); + return dep.getProvider(FileProvider.class).getFilesToBuild(); } private static NestedSet getOptionalFiles(RuleContext ruleContext, String attribute) { 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 a01c05185cdd98..3ab062a0b4f2f9 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 @@ -58,7 +58,6 @@ public final class CcToolchainProvider extends NativeInfo @Nullable private final CppConfiguration cppConfiguration; private final PathFragment crosstoolTopPathFragment; private final NestedSet allFiles; - private final NestedSet allFilesMiddleman; private final NestedSet compilerFiles; private final NestedSet compilerFilesWithoutIncludes; private final NestedSet stripFiles; @@ -72,9 +71,7 @@ public final class CcToolchainProvider extends NativeInfo private final NestedSet libcLink; private final NestedSet targetLibcLink; @Nullable private final NestedSet staticRuntimeLinkInputs; - @Nullable private final Artifact staticRuntimeLinkMiddleman; @Nullable private final NestedSet dynamicRuntimeLinkInputs; - @Nullable private final Artifact dynamicRuntimeLinkMiddleman; private final PathFragment dynamicRuntimeSolibDir; private final CcInfo ccInfo; private final boolean supportsParamFiles; @@ -133,7 +130,6 @@ public CcToolchainProvider( CcToolchainFeatures toolchainFeatures, PathFragment crosstoolTopPathFragment, NestedSet allFiles, - NestedSet allFilesMiddleman, NestedSet compilerFiles, NestedSet compilerFilesWithoutIncludes, NestedSet stripFiles, @@ -147,9 +143,7 @@ public CcToolchainProvider( NestedSet libcLink, NestedSet targetLibcLink, NestedSet staticRuntimeLinkInputs, - @Nullable Artifact staticRuntimeLinkMiddleman, NestedSet dynamicRuntimeLinkInputs, - @Nullable Artifact dynamicRuntimeLinkMiddleman, PathFragment dynamicRuntimeSolibDir, CcCompilationContext ccCompilationContext, boolean supportsParamFiles, @@ -196,7 +190,6 @@ public CcToolchainProvider( this.cppConfiguration = cppConfiguration; this.crosstoolTopPathFragment = crosstoolTopPathFragment; this.allFiles = Preconditions.checkNotNull(allFiles); - this.allFilesMiddleman = Preconditions.checkNotNull(allFilesMiddleman); this.compilerFiles = Preconditions.checkNotNull(compilerFiles); this.compilerFilesWithoutIncludes = Preconditions.checkNotNull(compilerFilesWithoutIncludes); this.stripFiles = Preconditions.checkNotNull(stripFiles); @@ -210,9 +203,7 @@ public CcToolchainProvider( this.libcLink = Preconditions.checkNotNull(libcLink); this.targetLibcLink = Preconditions.checkNotNull(targetLibcLink); this.staticRuntimeLinkInputs = staticRuntimeLinkInputs; - this.staticRuntimeLinkMiddleman = staticRuntimeLinkMiddleman; this.dynamicRuntimeLinkInputs = dynamicRuntimeLinkInputs; - this.dynamicRuntimeLinkMiddleman = dynamicRuntimeLinkMiddleman; this.dynamicRuntimeSolibDir = Preconditions.checkNotNull(dynamicRuntimeSolibDir); this.ccInfo = CcInfo.builder() @@ -458,11 +449,6 @@ public NestedSet getAllFiles() { return allFiles; } - /** Returns a middleman for all the files in Crosstool. */ - public NestedSet getAllFilesMiddleman() { - return allFilesMiddleman; - } - /** Returns the files necessary for compilation. */ public NestedSet getCompilerFiles() { return compilerFiles; @@ -588,23 +574,6 @@ public NestedSet getStaticRuntimeLinkInputs(FeatureConfiguration featu } } - /** Returns an aggregating middleman that represents the static runtime libraries. */ - @Nullable - public Artifact getStaticRuntimeLinkMiddleman( - RuleErrorConsumer ruleErrorConsumer, FeatureConfiguration featureConfiguration) - throws RuleErrorException { - if (shouldStaticallyLinkCppRuntimes(featureConfiguration)) { - if (staticRuntimeLinkInputs == null) { - throw ruleErrorConsumer.throwWithRuleError( - "Toolchain supports embedded runtimes, but didn't " - + "provide static_runtime_lib attribute."); - } - return staticRuntimeLinkMiddleman; - } else { - return null; - } - } - /** Returns the dynamic runtime libraries. */ public NestedSet getDynamicRuntimeLinkInputs(FeatureConfiguration featureConfiguration) throws EvalException { @@ -620,23 +589,6 @@ public NestedSet getDynamicRuntimeLinkInputs(FeatureConfiguration feat } } - /** Returns an aggregating middleman that represents the dynamic runtime libraries. */ - @Nullable - public Artifact getDynamicRuntimeLinkMiddleman( - RuleErrorConsumer ruleContext, FeatureConfiguration featureConfiguration) - throws RuleErrorException { - if (shouldStaticallyLinkCppRuntimes(featureConfiguration)) { - if (dynamicRuntimeLinkInputs == null) { - throw ruleContext.throwWithRuleError( - "Toolchain supports embedded runtimes, but didn't " - + "provide dynamic_runtime_lib attribute."); - } - return dynamicRuntimeLinkMiddleman; - } else { - return null; - } - } - /** * Returns the name of the directory where the solib symlinks for the dynamic runtime libraries * live. The directory itself will be under the root of the host configuration in the 'bin' diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java index 856f86adb43399..2fb17068331e55 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java @@ -13,14 +13,12 @@ // limitations under the License. package com.google.devtools.build.lib.rules.cpp; -import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.CompilationHelper; import com.google.devtools.build.lib.analysis.FileProvider; import com.google.devtools.build.lib.analysis.PackageSpecificationProvider; import com.google.devtools.build.lib.analysis.RuleContext; @@ -41,9 +39,7 @@ import com.google.devtools.build.lib.vfs.PathFragment; import java.util.EnumSet; import java.util.HashMap; -import java.util.List; import java.util.Map; -import javax.annotation.Nullable; import net.starlark.java.eval.EvalException; import net.starlark.java.eval.Starlark; @@ -90,7 +86,6 @@ public static CcToolchainProvider getCcToolchainProvider( return null; } - String purposePrefix = attributes.getPurposePrefix(); String runtimeSolibDirBase = attributes.getRuntimeSolibDirBase(); final PathFragment runtimeSolibDir = ruleContext.getBinFragment().getRelative(runtimeSolibDirBase); @@ -104,27 +99,17 @@ public static CcToolchainProvider getCcToolchainProvider( // Static runtime inputs. TransitiveInfoCollection staticRuntimeLib = attributes.getStaticRuntimeLib(); final NestedSet staticRuntimeLinkInputs; - final Artifact staticRuntimeLinkMiddleman; - boolean enableAggregatingMiddleman = configuration.enableAggregatingMiddleman(); if (staticRuntimeLib != null) { staticRuntimeLinkInputs = staticRuntimeLib.getProvider(FileProvider.class).getFilesToBuild(); - staticRuntimeLinkMiddleman = - getStaticRuntimeLinkMiddleman( - ruleContext, purposePrefix, staticRuntimeLib, staticRuntimeLinkInputs); - Preconditions.checkState( - (staticRuntimeLinkMiddleman == null) - == (staticRuntimeLinkInputs.isEmpty() || !enableAggregatingMiddleman)); } else { staticRuntimeLinkInputs = null; - staticRuntimeLinkMiddleman = null; } // Dynamic runtime inputs. TransitiveInfoCollection dynamicRuntimeLib = attributes.getDynamicRuntimeLib(); NestedSet dynamicRuntimeLinkSymlinks; NestedSetBuilder dynamicRuntimeLinkInputs = NestedSetBuilder.stableOrder(); - Artifact dynamicRuntimeLinkMiddleman; if (dynamicRuntimeLib != null) { NestedSetBuilder dynamicRuntimeLinkSymlinksBuilder = NestedSetBuilder.stableOrder(); for (Artifact artifact : @@ -146,20 +131,6 @@ public static CcToolchainProvider getCcToolchainProvider( dynamicRuntimeLinkSymlinks = null; } - dynamicRuntimeLinkMiddleman = - getDynamicRuntimeLinkMiddleman( - ruleContext, - purposePrefix, - runtimeSolibDirBase, - solibDirectory, - dynamicRuntimeLinkInputs); - - Preconditions.checkState( - (dynamicRuntimeLinkMiddleman == null) - == (dynamicRuntimeLinkSymlinks == null - || dynamicRuntimeLinkSymlinks.isEmpty() - || !enableAggregatingMiddleman)); - CcCompilationContext.Builder ccCompilationContextBuilder = CcCompilationContext.builder( ruleContext, ruleContext.getConfiguration(), ruleContext.getLabel()); @@ -193,7 +164,6 @@ public static CcToolchainProvider getCcToolchainProvider( toolchainFeatures, toolsDirectory, attributes.getAllFiles(), - attributes.getFullInputsForCrosstool(), attributes.getCompilerFiles(), attributes.getCompilerFilesWithoutIncludes(), attributes.getStripFiles(), @@ -207,9 +177,7 @@ public static CcToolchainProvider getCcToolchainProvider( attributes.getLibc(), attributes.getTargetLibc(), staticRuntimeLinkInputs, - staticRuntimeLinkMiddleman, dynamicRuntimeLinkSymlinks, - dynamicRuntimeLinkMiddleman, runtimeSolibDir, ccCompilationContext, attributes.isSupportsParamFiles(), @@ -262,55 +230,6 @@ public static CcToolchainProvider getCcToolchainProvider( getStarlarkValueForTool(Tool.GCOV, toolPaths)); } - @Nullable - @VisibleForTesting - static Artifact getDynamicRuntimeLinkMiddleman( - RuleContext ruleContext, - String purposePrefix, - String runtimeSolibDirBase, - String solibDirectory, - NestedSetBuilder dynamicRuntimeLinkInputs) { - BuildConfiguration configuration = Preconditions.checkNotNull(ruleContext.getConfiguration()); - boolean enableAggregatingMiddleman = configuration.enableAggregatingMiddleman(); - - if (dynamicRuntimeLinkInputs.isEmpty() || !enableAggregatingMiddleman) { - return null; - } - List dynamicRuntimeLinkMiddlemanSet = - CppHelper.getAggregatingMiddlemanForCppRuntimes( - ruleContext, - purposePrefix + "dynamic_runtime_link", - dynamicRuntimeLinkInputs.build(), - solibDirectory, - runtimeSolibDirBase, - configuration); - return dynamicRuntimeLinkMiddlemanSet.isEmpty() - ? null - : Iterables.getOnlyElement(dynamicRuntimeLinkMiddlemanSet); - } - - @Nullable - @VisibleForTesting - static Artifact getStaticRuntimeLinkMiddleman( - RuleContext ruleContext, - String purposePrefix, - TransitiveInfoCollection staticRuntimeLib, - NestedSet staticRuntimeLinkInputs) { - boolean enableAggregatingMiddleman = - Preconditions.checkNotNull(ruleContext.getConfiguration()).enableAggregatingMiddleman(); - - if (staticRuntimeLinkInputs.isEmpty() || !enableAggregatingMiddleman) { - return null; - } - - NestedSet staticRuntimeLinkMiddlemanSet = - CompilationHelper.getAggregatingMiddleman( - ruleContext, purposePrefix + "static_runtime_link", staticRuntimeLib); - return staticRuntimeLinkMiddlemanSet.isEmpty() - ? null - : staticRuntimeLinkMiddlemanSet.getSingleton(); - } - /** * Resolve the given include directory. * diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java index 92a373c2f84617..23bd0db1d71252 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java @@ -17,7 +17,6 @@ import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.LicensesProvider; -import com.google.devtools.build.lib.analysis.MiddlemanProvider; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.RuleContext; @@ -94,8 +93,7 @@ public ConfiguredTarget create(RuleContext ruleContext) .addNativeDeclaredProvider(ccToolchainProvider) .addNativeDeclaredProvider(templateVariableInfo) .setFilesToBuild(ccToolchainProvider.getAllFiles()) - .addProvider(RunfilesProvider.simple(Runfiles.EMPTY)) - .addProvider(new MiddlemanProvider(ccToolchainProvider.getAllFilesMiddleman())); + .addProvider(RunfilesProvider.simple(Runfiles.EMPTY)); if (ccToolchainProvider.getLicensesProvider() != null) { builder.add(LicensesProvider.class, ccToolchainProvider.getLicensesProvider()); 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 1bf6dcc5a6d993..c47e60f095f3cc 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 @@ -19,19 +19,16 @@ import static com.google.devtools.build.lib.packages.BuildType.NODEP_LABEL; import static java.nio.charset.StandardCharsets.UTF_8; -import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; -import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact; import com.google.devtools.build.lib.actions.ArtifactRoot; import com.google.devtools.build.lib.actions.FailAction; -import com.google.devtools.build.lib.actions.MiddlemanFactory; import com.google.devtools.build.lib.actions.ParamFileInfo; import com.google.devtools.build.lib.actions.ParameterFile; import com.google.devtools.build.lib.analysis.AliasProvider; @@ -606,85 +603,6 @@ public static CppModuleMap createDefaultCppModuleMap( return new CppModuleMap(mapFile, label.toString()); } - /** - * Returns a middleman for all files to build for the given configured target, substituting shared - * library artifacts with corresponding solib symlinks. If multiple calls are made, then it - * returns the same artifact for configurations with the same internal directory. - * - *

The resulting middleman only aggregates the inputs and must be expanded before populating - * the set of files necessary to execute an action. - */ - static List getAggregatingMiddlemanForCppRuntimes( - RuleContext ruleContext, - String purpose, - NestedSet artifacts, - String solibDir, - String solibDirOverride, - BuildConfiguration configuration) { - return getMiddlemanInternal( - ruleContext, - ruleContext.getActionOwner(), - purpose, - artifacts, - true, - true, - solibDir, - solibDirOverride); - } - - @VisibleForTesting - public static List getAggregatingMiddlemanForTesting( - RuleContext ruleContext, - ActionOwner owner, - String purpose, - NestedSet artifacts, - boolean useSolibSymlinks, - String solibDir, - BuildConfiguration configuration) { - return getMiddlemanInternal( - ruleContext, owner, purpose, artifacts, useSolibSymlinks, false, solibDir, null); - } - - /** Internal implementation for getAggregatingMiddlemanForCppRuntimes. */ - private static List getMiddlemanInternal( - RuleContext ruleContext, - ActionOwner actionOwner, - String purpose, - NestedSet artifacts, - boolean useSolibSymlinks, - boolean isCppRuntime, - String solibDir, - String solibDirOverride) { - MiddlemanFactory factory = ruleContext.getAnalysisEnvironment().getMiddlemanFactory(); - if (useSolibSymlinks) { - NestedSetBuilder symlinkedArtifacts = NestedSetBuilder.stableOrder(); - for (Artifact artifact : artifacts.toList()) { - Preconditions.checkState(Link.SHARED_LIBRARY_FILETYPES.matches(artifact.getFilename())); - symlinkedArtifacts.add( - isCppRuntime - ? SolibSymlinkAction.getCppRuntimeSymlink( - ruleContext, artifact, solibDir, solibDirOverride) - : SolibSymlinkAction.getDynamicLibrarySymlink( - /* actionRegistry= */ ruleContext, - /* actionConstructionContext= */ ruleContext, - solibDir, - artifact, - /* preserveName= */ false, - /* prefixConsumer= */ true)); - } - artifacts = symlinkedArtifacts.build(); - purpose += "_with_solib"; - } - return ImmutableList.of( - factory.createMiddlemanAllowMultiple( - ruleContext.getAnalysisEnvironment(), - actionOwner, - ruleContext.getPackageDirectory(), - purpose, - artifacts, - ruleContext.getMiddlemanDirectory())); - } - /** Returns the FDO build subtype. */ public static String getFdoBuildStamp( CppConfiguration cppConfiguration, diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java index 72b14696b7f197..8e08fc23b4c350 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java @@ -108,7 +108,6 @@ public Artifact create( private final NestedSetBuilder libraries = NestedSetBuilder.linkOrder(); private NestedSet linkerFiles = NestedSetBuilder.emptySet(Order.STABLE_ORDER); - private Artifact runtimeMiddleman; private ArtifactCategory toolchainLibrariesType = null; private NestedSet toolchainLibrariesInputs = NestedSetBuilder.emptySet(Order.STABLE_ORDER); @@ -913,9 +912,6 @@ public CppLinkAction build() throws InterruptedException, RuleErrorException { if (shouldUseLinkDynamicLibraryTool()) { dependencyInputsBuilder.add(toolchain.getLinkDynamicLibraryTool()); } - if (runtimeMiddleman != null) { - dependencyInputsBuilder.add(runtimeMiddleman); - } if (defFile != null) { dependencyInputsBuilder.add(defFile); } @@ -1181,9 +1177,8 @@ public CppLinkActionBuilder setUsePicForLtoBackendActions(boolean usePic) { /** Sets the C++ runtime library inputs for the action. */ public CppLinkActionBuilder setRuntimeInputs( - ArtifactCategory runtimeType, Artifact middleman, NestedSet inputs) { + ArtifactCategory runtimeType, NestedSet inputs) { this.toolchainLibrariesType = runtimeType; - this.runtimeMiddleman = middleman; this.toolchainLibrariesInputs = inputs; return this; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoHelper.java index 6e08ae25403efc..dbeac978d7e65f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoHelper.java @@ -309,7 +309,7 @@ private static Artifact mergeLLVMProfiles( new SpawnAction.Builder() .addInput(profile1) .addInput(profile2) - .addTransitiveInputs(attributes.getAllFilesMiddleman()) + .addTransitiveInputs(attributes.getAllFiles()) .addOutput(profileArtifact) .useDefaultShellEnvironment() .setExecutable( @@ -446,7 +446,7 @@ private static Artifact convertLLVMRawProfileToIndexed( ruleContext.registerAction( new SpawnAction.Builder() .addInput(rawProfileArtifact) - .addTransitiveInputs(attributes.getAllFilesMiddleman()) + .addTransitiveInputs(attributes.getAllFiles()) .addOutput(profileArtifact) .useDefaultShellEnvironment() .setExecutable( diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/ObjcCppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/ObjcCppSemantics.java index 20ada657f2edcd..413d9446dc3720 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/ObjcCppSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/ObjcCppSemantics.java @@ -43,7 +43,7 @@ public void finalizeCompileActionBuilder( // as opposed to just the "compile" filegroup. Even with include scanning, we need the // system framework headers since they are not being scanned right now. // TODO(waltl): do better with include scanning. - .addTransitiveMandatoryInputs(actionBuilder.getToolchain().getAllFilesMiddleman()) + .addTransitiveMandatoryInputs(actionBuilder.getToolchain().getAllFiles()) .setShouldScanIncludes( configuration.getFragment(CppConfiguration.class).objcShouldScanIncludes()); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/filegroup/Filegroup.java b/src/main/java/com/google/devtools/build/lib/rules/filegroup/Filegroup.java index 883e7d92464335..bfd2ce27aecef7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/filegroup/Filegroup.java +++ b/src/main/java/com/google/devtools/build/lib/rules/filegroup/Filegroup.java @@ -17,12 +17,9 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.devtools.build.lib.analysis.OutputGroupInfo.INTERNAL_SUFFIX; -import com.google.devtools.build.lib.actions.Actions; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; -import com.google.devtools.build.lib.analysis.CompilationHelper; import com.google.devtools.build.lib.analysis.ConfiguredTarget; -import com.google.devtools.build.lib.analysis.MiddlemanProvider; import com.google.devtools.build.lib.analysis.OutputGroupInfo; import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; @@ -110,13 +107,6 @@ public ConfiguredTarget create(RuleContext ruleContext) FilegroupPathProvider.class, new FilegroupPathProvider(getFilegroupPath(ruleContext))); - if (configuration.enableAggregatingMiddleman()) { - builder.addProvider( - MiddlemanProvider.class, - new MiddlemanProvider( - CompilationHelper.getAggregatingMiddleman( - ruleContext, Actions.escapeLabel(ruleContext.getLabel()), filesToBuild))); - } return builder.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD index 8a364e3586e5fb..3954a3821eae31 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD @@ -52,7 +52,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/actions:artifacts", "//src/main/java/com/google/devtools/build/lib/analysis:actions/custom_command_line", "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster", - "//src/main/java/com/google/devtools/build/lib/analysis:compilation_helper", "//src/main/java/com/google/devtools/build/lib/analysis:config/build_configuration", "//src/main/java/com/google/devtools/build/lib/analysis:config/compilation_mode", "//src/main/java/com/google/devtools/build/lib/analysis:config/core_option_converters", diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java index 024ba37dc5c3ae..8cc646abc9f94e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java @@ -393,7 +393,7 @@ public void build() throws InterruptedException { new SpawnAction.Builder() .useDefaultShellEnvironment() .addTransitiveInputs(inputs.build()) - .addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputsMiddleman()) + .addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputs()) .addOutput(outputJar) .setResources(DEPLOY_ACTION_RESOURCE_SET) .setJarExecutable(JavaCommon.getHostJavaExecutable(ruleContext), singlejar, jvmArgs) diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java index 9f462fb13cd888..e32067ec61fe1c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java @@ -622,7 +622,7 @@ private static Artifact createSharedArchive( .addOutput(jsa) .addInput(classlist) .addInput(merged) - .addTransitiveInputs(javaRuntime.javaBaseInputsMiddleman()); + .addTransitiveInputs(javaRuntime.javaBaseInputs()); if (configFile != null) { spawnAction.addInput(configFile); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java index 13d38347db5715..5337b065f600aa 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java @@ -548,7 +548,7 @@ public void createGenJarAction( .addInput(manifestProto) .addInput(classJar) .addOutput(genClassJar) - .addTransitiveInputs(hostJavabase.javaBaseInputsMiddleman()) + .addTransitiveInputs(hostJavabase.javaBaseInputs()) .setJarExecutable( JavaCommon.getHostJavaExecutable(hostJavabase), getGenClassJar(ruleContext), diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileActionBuilder.java index 89fad784bc8fd0..11de6810b7c83d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileActionBuilder.java @@ -212,7 +212,7 @@ public JavaCompileAction build() { .addTransitive(extraData) .addAll(sourceJars) .addAll(sourceFiles) - .addTransitive(toolchain.getJavaRuntime().javaBaseInputsMiddleman()) + .addTransitive(toolchain.getJavaRuntime().javaBaseInputs()) .addTransitive(bootClassPath.bootclasspath()) .addAll(sourcePathEntries) .addAll(additionalInputs); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java index b033a16e638137..58301d0b5fd8b9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java @@ -17,10 +17,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.collect.ImmutableMap; -import com.google.devtools.build.lib.actions.Actions; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; -import com.google.devtools.build.lib.analysis.CompilationHelper; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; @@ -89,11 +87,6 @@ public ConfiguredTarget create(RuleContext ruleContext) javaBinaryRunfilesPath.getParentDirectory().getParentDirectory(); NestedSet filesToBuild = filesBuilder.build(); - NestedSet middleman = - configuration.enableAggregatingMiddleman() - ? CompilationHelper.getAggregatingMiddleman( - ruleContext, Actions.escapeLabel(ruleContext.getLabel()), filesToBuild) - : filesToBuild; // TODO(cushon): clean up uses of java_runtime in data deps and remove this Runfiles runfiles = @@ -104,7 +97,6 @@ public ConfiguredTarget create(RuleContext ruleContext) JavaRuntimeInfo javaRuntime = JavaRuntimeInfo.create( filesToBuild, - middleman, javaHome, javaBinaryExecPath, javaHomeRunfilesPath, diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java index 690033b83b51c3..2b63b954432639 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java @@ -43,14 +43,12 @@ public final class JavaRuntimeInfo extends NativeInfo implements JavaRuntimeInfo public static JavaRuntimeInfo create( NestedSet javaBaseInputs, - NestedSet javaBaseInputsMiddleman, PathFragment javaHome, PathFragment javaBinaryExecPath, PathFragment javaHomeRunfilesPath, PathFragment javaBinaryRunfilesPath) { return new JavaRuntimeInfo( javaBaseInputs, - javaBaseInputsMiddleman, javaHome, javaBinaryExecPath, javaHomeRunfilesPath, @@ -99,7 +97,6 @@ public static JavaRuntimeInfo from(RuleContext ruleContext, String attributeName } private final NestedSet javaBaseInputs; - private final NestedSet javaBaseInputsMiddleman; private final PathFragment javaHome; private final PathFragment javaBinaryExecPath; private final PathFragment javaHomeRunfilesPath; @@ -109,13 +106,11 @@ public static JavaRuntimeInfo from(RuleContext ruleContext, String attributeName @VisibleForSerialization JavaRuntimeInfo( NestedSet javaBaseInputs, - NestedSet javaBaseInputsMiddleman, PathFragment javaHome, PathFragment javaBinaryExecPath, PathFragment javaHomeRunfilesPath, PathFragment javaBinaryRunfilesPath) { this.javaBaseInputs = javaBaseInputs; - this.javaBaseInputsMiddleman = javaBaseInputsMiddleman; this.javaHome = javaHome; this.javaBinaryExecPath = javaBinaryExecPath; this.javaHomeRunfilesPath = javaHomeRunfilesPath; @@ -127,11 +122,6 @@ public NestedSet javaBaseInputs() { return javaBaseInputs; } - /** A middleman representing the javabase. */ - public NestedSet javaBaseInputsMiddleman() { - return javaBaseInputsMiddleman; - } - /** The root directory of the Java installation. */ @Override public String javaHome() { diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainTool.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainTool.java index 67f40a9f35d42f..b0928087379e48 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainTool.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainTool.java @@ -107,7 +107,7 @@ void buildCommandLine( command.addExecPath(executable); inputs.addTransitive(tool().getFilesToRun()); } else { - inputs.add(executable).addTransitive(toolchain.getJavaRuntime().javaBaseInputsMiddleman()); + inputs.add(executable).addTransitive(toolchain.getJavaRuntime().javaBaseInputs()); command .addPath(toolchain.getJavaRuntime().javaBinaryExecPathFragment()) .addAll(toolchain.getJvmOptions()) diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java index ff0f34cb9f9511..24d24707bcfa0d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibrary.java @@ -127,7 +127,7 @@ private Artifact validateProguardSpec( JavaCommon.getHostJavaExecutable(ruleContext), proguardAllowlister.getExecutable(), JavaToolchainProvider.from(ruleContext).getJvmOptions()) - .addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputsMiddleman()); + .addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputs()); } else { // TODO(b/170769708): remove this branch and require java_toolchain.proguard_allowlister to // always be a _deploy.jar diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java index 71479575e03c11..87e5c1e08f8562 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java @@ -95,7 +95,7 @@ public void build(JavaSemantics semantics, RuleContext ruleContext) { javaToolchain.getJavaRuntime().javaBinaryExecPathFragment(), singleJar, javaToolchain.getJvmOptions()) - .addTransitiveInputs(javaToolchain.getJavaRuntime().javaBaseInputsMiddleman()); + .addTransitiveInputs(javaToolchain.getJavaRuntime().javaBaseInputs()); } else { builder.setExecutable(singleJar); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java index ebf99daacb0ebd..4913f79ca4c428 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java @@ -57,7 +57,7 @@ private static SpawnAction.Builder singleJarActionBuilder(JavaToolchainProvider // the native singlejar is used on windows) remove support for the Java implementation if (singleJar.getFilename().endsWith(".jar")) { builder - .addTransitiveInputs(provider.getJavaRuntime().javaBaseInputsMiddleman()) + .addTransitiveInputs(provider.getJavaRuntime().javaBaseInputs()) .setJarExecutable( provider.getJavaRuntime().javaBinaryExecPathFragment(), singleJar, diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java index da9c9965e48715..51ed6542c2a4f7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java @@ -571,7 +571,7 @@ private static J2ObjcMappingFileProvider createJ2ObjcTranspilationAction( .addInputs(sources) .addInputs(sourceJars) .addTransitiveInputs(compileTimeJars) - .addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputsMiddleman()) + .addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputs()) .addTransitiveInputs(depsHeaderMappingFiles) .addTransitiveInputs(depsClassMappingFiles) .addCommandLine( diff --git a/src/test/java/com/google/devtools/build/lib/analysis/CompilationHelperTest.java b/src/test/java/com/google/devtools/build/lib/analysis/CompilationHelperTest.java deleted file mode 100644 index a45713345bc639..00000000000000 --- a/src/test/java/com/google/devtools/build/lib/analysis/CompilationHelperTest.java +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright 2015 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.devtools.build.lib.analysis; - -import static com.google.common.truth.Truth.assertThat; -import static org.junit.Assert.assertThrows; - -import com.google.common.collect.Iterables; -import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.actions.util.ActionsTestUtil; -import com.google.devtools.build.lib.actions.util.ActionsTestUtil.UncheckedActionConflictException; -import com.google.devtools.build.lib.analysis.config.BuildConfiguration; -import com.google.devtools.build.lib.analysis.util.AnalysisTestUtil; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; -import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider; -import com.google.devtools.build.lib.rules.cpp.CppHelper; -import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; -import java.io.IOException; -import java.util.List; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -/** Unit tests for the {@link CompilationHelper} class. */ -@RunWith(JUnit4.class) -public class CompilationHelperTest extends BuildViewTestCase { - private AnalysisTestUtil.CollectingAnalysisEnvironment analysisEnvironment; - - @Before - public final void createAnalysisEnvironment() throws Exception { - analysisEnvironment = - new AnalysisTestUtil.CollectingAnalysisEnvironment(getTestAnalysisEnvironment()); - } - - private List getAggregatingMiddleman( - ConfiguredTarget rule, BuildConfiguration configuration, boolean withSolib) throws Exception { - RuleContext ruleContext = getRuleContext(rule, analysisEnvironment); - CcToolchainProvider toolchain = - CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext); - return CppHelper.getAggregatingMiddlemanForTesting( - ruleContext, - ActionsTestUtil.NULL_ACTION_OWNER, - "middleman", - rule.getProvider(FileProvider.class).getFilesToBuild(), - withSolib, - toolchain.getSolibDirectory(), - configuration); - } - - private List getAggregatingMiddleman(ConfiguredTargetAndData rule, boolean withSolib) - throws Exception { - return getAggregatingMiddleman(rule.getConfiguredTarget(), rule.getConfiguration(), withSolib); - } - - /** - * Tests that duplicate calls to - * {@link com.google.devtools.build.lib.analysis.CompilationHelper#getAggregatingMiddleman} - * with identical parameters return the same artifact. - */ - @Test - public void testDuplicateCallsReturnSameObject() throws Exception { - ConfiguredTargetAndData rule = - scratchConfiguredTargetAndData( - "package", "a", "cc_binary(name = 'a'," + " srcs = ['a.cc'])"); - List middleman1 = getAggregatingMiddleman(rule, false); - assertThat(middleman1).hasSize(1); - List middleman2 = getAggregatingMiddleman(rule, false); - assertThat(middleman2).hasSize(1); - assertThat(middleman2.get(0)).isEqualTo(middleman1.get(0)); - } - - /** - * Tests that - * {@link com.google.devtools.build.lib.analysis.CompilationHelper#getAggregatingMiddleman} - * returns distinct artifacts even when called with identical rules, depending on - * whether solib symlink are created. - */ - @Test - public void testMiddlemanAndSolibMiddlemanAreDistinct() throws Exception { - ConfiguredTargetAndData rule = - scratchConfiguredTargetAndData( - "package", "liba.so", "cc_binary(name = 'liba.so', srcs = ['a.cc'], linkshared = 1)"); - - List middleman = getAggregatingMiddleman(rule, false); - assertThat(middleman).hasSize(1); - List middlemanWithSymlinks = getAggregatingMiddleman(rule, true); - assertThat(middlemanWithSymlinks).hasSize(1); - assertThat(middlemanWithSymlinks.get(0)).isNotSameInstanceAs(middleman.get(0)); - } - - /** - * Regression test: tests that Python CPU configurations are taken into account - * when generating a rule's aggregating middleman, so that otherwise equivalent rules can sustain - * distinct middlemen. - */ - @Test - public void testPythonCcConfigurations() throws Exception { - setupJavaPythonCcConfigurationFiles(); - - // Equivalent cc / Python configurations: - - ConfiguredTargetAndData ccRuleA = getConfiguredTargetAndData("//foo:liba.so"); - List middleman1 = getAggregatingMiddleman(ccRuleA, true); - ConfiguredTargetAndData ccRuleB = getConfiguredTargetAndData("//foo:libb.so"); - getAggregatingMiddleman(ccRuleB, true); - assertThrows( - UncheckedActionConflictException.class, - () -> analysisEnvironment.registerWith(getMutableActionGraph())); - - // This should succeed because the py_binary's middleman is under the Python configuration's - // internal directory, while the cc_binary's middleman is under the cc config's directory, - // and both configurations are the same. - ConfiguredTargetAndData pyRuleB = - getConfiguredTargetAndDataDirectPrerequisite( - getConfiguredTargetAndData("//foo:c"), "//foo:libb.so"); - - List middleman2 = getAggregatingMiddleman(pyRuleB, true); - assertThat(Iterables.getOnlyElement(middleman2).getExecPathString()) - .isEqualTo(Iterables.getOnlyElement(middleman1).getExecPathString()); - } - - /** - * Regression test: tests that Java CPU configurations are taken into account when - * generating a rule's aggregating middleman, so that otherwise equivalent rules can sustain - * distinct middlemen. - */ - @Test - public void testJavaCcConfigurations() throws Exception { - setupJavaPythonCcConfigurationFiles(); - - // Equivalent cc / Java configurations: - - ConfiguredTargetAndData ccRuleA = getConfiguredTargetAndData("//foo:liba.so"); - List middleman1 = getAggregatingMiddleman(ccRuleA, true); - ConfiguredTargetAndData ccRuleB = getConfiguredTargetAndData("//foo:libb.so"); - getAggregatingMiddleman(ccRuleB, true); - assertThrows( - UncheckedActionConflictException.class, - () -> analysisEnvironment.registerWith(getMutableActionGraph())); - - // This should succeed because the java_binary's middleman is under the Java configuration's - // internal directory, while the cc_binary's middleman is under the cc config's directory. - ConfiguredTargetAndData javaRuleB = - getConfiguredTargetAndDataDirectPrerequisite( - getConfiguredTargetAndData("//foo:d"), "//foo:libb.so"); - List middleman2 = getAggregatingMiddleman(javaRuleB, false); - assertThat( - Iterables.getOnlyElement(middleman1) - .getExecPathString() - .equals(Iterables.getOnlyElement(middleman2).getExecPathString())) - .isFalse(); - } - - private void setupJavaPythonCcConfigurationFiles() throws IOException { - scratch.file( - "foo/BUILD", - "cc_binary(name = 'liba.so',", - " linkshared = 1,", - " srcs = ['a.cc'])", - "cc_binary(name = 'libb.so',", - " linkshared = 1,", - " srcs = ['b.cc'])", - "py_binary(name = 'c',", - " data = [':libb.so'],", - " srcs = ['c.py'])", - "java_binary(name = 'd',", - " srcs = ['d.java'],", - " data = [':libb.so'],", - " main_class = 'd')"); - } -} diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD index 85518fbc3767a8..e1a57e516b0152 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD @@ -276,20 +276,6 @@ java_test( ], ) -java_test( - name = "CcToolchainProviderHelperTest", - srcs = ["CcToolchainProviderHelperTest.java"], - deps = [ - "//src/main/java/com/google/devtools/build/lib/actions:artifacts", - "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster", - "//src/main/java/com/google/devtools/build/lib/collect/nestedset", - "//src/main/java/com/google/devtools/build/lib/rules/cpp", - "//src/test/java/com/google/devtools/build/lib/analysis/util", - "//third_party:junit4", - "//third_party:truth", - ], -) - java_test( name = "CcToolchainProviderTest", srcs = ["CcToolchainProviderTest.java"], diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelperTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelperTest.java deleted file mode 100644 index 111d0bf38b43f0..00000000000000 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelperTest.java +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2020 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package com.google.devtools.build.lib.rules.cpp; - -import static com.google.common.truth.Truth.assertThat; - -import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.RuleContext; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; -import com.google.devtools.build.lib.collect.nestedset.NestedSet; -import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; -import java.io.IOException; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -/** Unit tests for {@code CcToolchainProviderHelper} */ -@RunWith(JUnit4.class) -public class CcToolchainProviderHelperTest extends BuildViewTestCase { - - @Before - public void createFooFooCcLibraryForRuleContext() throws IOException { - scratch.file("foo/BUILD", "cc_library(name = 'foo')"); - } - - private RuleContext getRuleContext() throws Exception { - return getRuleContext(getConfiguredTarget("//foo:foo")); - } - - @Test - public void getDynamicRuntimeLinkMiddleman_disableMiddlemanArtifacts() throws Exception { - useConfiguration("--noexperimental_enable_aggregating_middleman"); - RuleContext ruleContext = getRuleContext(); - - NestedSetBuilder nonEmptyBuilder = NestedSetBuilder.stableOrder(); - nonEmptyBuilder.add(getSourceArtifact("foo.h")); - Artifact middleman = - CcToolchainProviderHelper.getDynamicRuntimeLinkMiddleman( - ruleContext, "purposePrefix", "runtimeSolibDirBase", "solibDirectory", nonEmptyBuilder); - assertThat(middleman).isNull(); - } - - @Test - public void getStaticRuntimeLinkMiddleman_disableMiddlemanArtifacts() throws Exception { - useConfiguration("--noexperimental_enable_aggregating_middleman"); - RuleContext ruleContext = getRuleContext(); - - NestedSet nonEmptySet = - NestedSetBuilder.stableOrder().add(getSourceArtifact("foo.h")).build(); - Artifact middleman = - CcToolchainProviderHelper.getStaticRuntimeLinkMiddleman( - ruleContext, "purposePrefix", /* staticRuntimeLib= */ null, nonEmptySet); - assertThat(middleman).isNull(); - } -} diff --git a/src/test/java/com/google/devtools/build/lib/rules/filegroup/BUILD b/src/test/java/com/google/devtools/build/lib/rules/filegroup/BUILD index bb2853c9d5d04b..132968932973e8 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/filegroup/BUILD +++ b/src/test/java/com/google/devtools/build/lib/rules/filegroup/BUILD @@ -18,7 +18,6 @@ java_library( deps = [ "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster", "//src/main/java/com/google/devtools/build/lib/analysis:configured_target", - "//src/main/java/com/google/devtools/build/lib/analysis:middleman_provider", "//src/main/java/com/google/devtools/build/lib/rules:filegroup/filegroup", "//src/main/java/com/google/devtools/build/lib/rules/java:java-compilation", "//src/main/java/com/google/devtools/build/lib/util:filetype", diff --git a/src/test/java/com/google/devtools/build/lib/rules/filegroup/FilegroupConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/filegroup/FilegroupConfiguredTargetTest.java index caa48f84248333..37d0ef97281592 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/filegroup/FilegroupConfiguredTargetTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/filegroup/FilegroupConfiguredTargetTest.java @@ -18,7 +18,6 @@ import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.analysis.ConfiguredTarget; -import com.google.devtools.build.lib.analysis.MiddlemanProvider; import com.google.devtools.build.lib.analysis.OutputGroupInfo; import com.google.devtools.build.lib.analysis.configuredtargets.FileConfiguredTarget; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; @@ -203,22 +202,4 @@ public void testErrorForIllegalOutputGroup() throws Exception { .contains( String.format(Filegroup.ILLEGAL_OUTPUT_GROUP_ERROR, OutputGroupInfo.HIDDEN_TOP_LEVEL)); } - - @Test - public void create_disableMiddlemanArtifact() throws Exception { - useConfiguration("--noexperimental_enable_aggregating_middleman"); - scratch.file("foo/BUILD", "filegroup(name = 'foo', srcs = ['foo/spam.txt'])"); - ConfiguredTarget target = getConfiguredTarget("//foo:foo"); - - assertThat(target.getProvider(MiddlemanProvider.class)).isNull(); - } - - @Test - public void create_enableMiddlemanArtifact() throws Exception { - useConfiguration("--experimental_enable_aggregating_middleman"); - scratch.file("foo/BUILD", "filegroup(name = 'foo', srcs = ['foo/spam.txt'])"); - ConfiguredTarget target = getConfiguredTarget("//foo:foo"); - - assertThat(target.getProvider(MiddlemanProvider.class)).isNotNull(); - } } diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfoTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfoTest.java index eecd0669c8a89e..27bc0d327d4c62 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfoTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfoTest.java @@ -29,7 +29,6 @@ public class JavaRuntimeInfoTest { public void equalityIsObjectIdentity() { JavaRuntimeInfo a = JavaRuntimeInfo.create( - NestedSetBuilder.emptySet(Order.STABLE_ORDER), NestedSetBuilder.emptySet(Order.STABLE_ORDER), PathFragment.create(""), PathFragment.create(""), @@ -37,7 +36,6 @@ public void equalityIsObjectIdentity() { PathFragment.create("")); JavaRuntimeInfo b = JavaRuntimeInfo.create( - NestedSetBuilder.emptySet(Order.STABLE_ORDER), NestedSetBuilder.emptySet(Order.STABLE_ORDER), PathFragment.create(""), PathFragment.create(""),