diff options
Diffstat (limited to 'src/main/java/com/google/devtools')
5 files changed, 34 insertions, 15 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java index 7522d099b5..9fafbe9dcc 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java @@ -64,6 +64,8 @@ public final class RuleConfiguredTargetBuilder { /** These are supported by all configured targets and need to be specially handled. */ private NestedSet<Artifact> filesToBuild = NestedSetBuilder.emptySet(Order.STABLE_ORDER); + + private NestedSetBuilder<Artifact> filesToRunBuilder = NestedSetBuilder.stableOrder(); private RunfilesSupport runfilesSupport; private Artifact executable; private ImmutableSet<ActionAnalysisMetadata> actionsWithoutExtraAction = ImmutableSet.of(); @@ -85,8 +87,9 @@ public final class RuleConfiguredTargetBuilder { return null; } - FilesToRunProvider filesToRunProvider = new FilesToRunProvider( - getFilesToRun(runfilesSupport, filesToBuild), runfilesSupport, executable); + FilesToRunProvider filesToRunProvider = + new FilesToRunProvider( + buildFilesToRun(runfilesSupport, filesToBuild), runfilesSupport, executable); addProvider(new FileProvider(filesToBuild)); addProvider(filesToRunProvider); @@ -136,21 +139,18 @@ public final class RuleConfiguredTargetBuilder { return new RuleConfiguredTarget(ruleContext, providers); } - /** - * Like getFilesToBuild(), except that it also includes the runfiles middleman, if any. Middlemen - * are expanded in the SpawnStrategy or by the Distributor. + * Compute the artifacts to put into the {@link FilesToRunProvider} for this target. These are the + * filesToBuild, any artifacts added by the rule with {@link #addFilesToRun}, and the runfiles + * middleman if it exists. */ - private NestedSet<Artifact> getFilesToRun( + private NestedSet<Artifact> buildFilesToRun( RunfilesSupport runfilesSupport, NestedSet<Artifact> filesToBuild) { - if (runfilesSupport == null) { - return filesToBuild; - } else { - NestedSetBuilder<Artifact> allFilesToBuild = NestedSetBuilder.stableOrder(); - allFilesToBuild.addTransitive(filesToBuild); - allFilesToBuild.add(runfilesSupport.getRunfilesMiddleman()); - return allFilesToBuild.build(); + filesToRunBuilder.addTransitive(filesToBuild); + if (runfilesSupport != null) { + filesToRunBuilder.add(runfilesSupport.getRunfilesMiddleman()); } + return filesToRunBuilder.build(); } /** @@ -209,6 +209,15 @@ public final class RuleConfiguredTargetBuilder { return new TestProvider(testParams, testTags); } + /** + * Add files required to run the target. Artifacts from {@link #setFilesToBuild} and the runfiles + * middleman, if any, are added automatically. + */ + public RuleConfiguredTargetBuilder addFilesToRun(NestedSet<Artifact> files) { + filesToRunBuilder.addTransitive(files); + return this; + } + /** Add a specific provider. */ public <T extends TransitiveInfoProvider> RuleConfiguredTargetBuilder addProvider( TransitiveInfoProvider provider) { diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java index 7a36d4db27..8b093d5ef0 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java @@ -932,8 +932,6 @@ public final class Runfiles { if (runfilesSupport == null) { return this; } - // TODO(bazel-team): We may be able to remove this now. - addArtifact(runfilesSupport.getRunfilesMiddleman()); merge(runfilesSupport.getRunfiles()); return this; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDevice.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDevice.java index 344d41b9e8..22952e03b6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDevice.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDevice.java @@ -44,6 +44,7 @@ import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Te import com.google.devtools.build.lib.analysis.test.ExecutionInfo; 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.packages.TargetUtils; import com.google.devtools.build.lib.syntax.Type; import java.util.ArrayList; @@ -117,10 +118,13 @@ public class AndroidDevice implements RuleConfiguredTargetFactory { .build(); RunfilesSupport runfilesSupport = RunfilesSupport.withExecutable(ruleContext, runfiles, executable); + NestedSet<Artifact> extraFilesToRun = + NestedSetBuilder.create(Order.STABLE_ORDER, runfilesSupport.getRunfilesMiddleman()); return new RuleConfiguredTargetBuilder(ruleContext) .setFilesToBuild(filesToBuild) .addProvider(RunfilesProvider.class, RunfilesProvider.simple(runfiles)) .setRunfilesSupport(runfilesSupport, executable) + .addFilesToRun(extraFilesToRun) .addNativeDeclaredProvider(new ExecutionInfo(executionInfo)) .addProvider( DeviceBrokerTypeProvider.class, new DeviceBrokerTypeProvider(DEVICE_BROKER_TYPE)) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java index 9c46ee398e..36de87c8af 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java @@ -37,6 +37,7 @@ import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg; 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.android.AndroidLibraryAarProvider.Aar; import com.google.devtools.build.lib.rules.java.ClasspathConfiguredFragment; import com.google.devtools.build.lib.rules.java.DeployArchiveBuilder; @@ -315,6 +316,9 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor builder.addOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL, oneVersionOutputArtifact); } + NestedSet<Artifact> extraFilesToRun = + NestedSetBuilder.create(Order.STABLE_ORDER, runfilesSupport.getRunfilesMiddleman()); + return builder .setFilesToBuild(filesToBuild) .addSkylarkTransitiveInfo( @@ -327,6 +331,7 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor new Runfiles.Builder(ruleContext.getWorkspaceName()) .merge(runfilesSupport) .build())) + .addFilesToRun(extraFilesToRun) .setRunfilesSupport(runfilesSupport, executable) .addProvider( JavaRuntimeClasspathProvider.class, 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 0672fe4942..b2e5a1deef 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 @@ -322,6 +322,7 @@ public class JavaBinary implements RuleConfiguredTargetFactory { Runfiles defaultRunfiles = runfilesBuilder.build(); RunfilesSupport runfilesSupport = null; + NestedSetBuilder<Artifact> extraFilesToRunBuilder = NestedSetBuilder.stableOrder(); if (createExecutable) { List<String> extraArgs = new ArrayList<>(semantics.getExtraArguments(ruleContext, common.getSrcsArtifacts())); @@ -348,6 +349,7 @@ public class JavaBinary implements RuleConfiguredTargetFactory { runfilesSupport = RunfilesSupport.withExecutable( ruleContext, defaultRunfiles, executableForRunfiles, extraArgs); + extraFilesToRunBuilder.add(runfilesSupport.getRunfilesMiddleman()); } RunfilesProvider runfilesProvider = RunfilesProvider.withData( @@ -422,6 +424,7 @@ public class JavaBinary implements RuleConfiguredTargetFactory { // shell script), on Windows they are different (the executable to run is a batch file, the // executable for runfiles is the shell script). .setRunfilesSupport(runfilesSupport, executableToRun) + .addFilesToRun(extraFilesToRunBuilder.build()) .add( JavaRuntimeClasspathProvider.class, new JavaRuntimeClasspathProvider(common.getRuntimeClasspath())) |