aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar shahan <shahan@google.com>2018-04-18 15:01:33 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-18 15:03:37 -0700
commit96fcc45372fc020deef0914ce4041ba54d7e9afb (patch)
treec7f88ab0f3b39abe4aeead6cb11321ae10db58ae /src/main/java/com/google
parentcc4196166234ecd3ac376a6f9b52b226462f0d0a (diff)
Makes ApkActionsBuilder honor --nobuild_runfile_manifests.
PiperOrigin-RevId: 193422658
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java31
2 files changed, 40 insertions, 17 deletions
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 d8bcf18f0d..03722798cb 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
@@ -18,7 +18,6 @@ import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.analysis.Runfiles;
import com.google.devtools.build.lib.analysis.RunfilesSupplierImpl;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
@@ -27,7 +26,6 @@ import com.google.devtools.build.lib.rules.java.JavaCommon;
import com.google.devtools.build.lib.rules.java.JavaRuntimeInfo;
import com.google.devtools.build.lib.rules.java.JavaToolchainProvider;
import com.google.devtools.build.lib.syntax.Type;
-import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.List;
@@ -192,18 +190,30 @@ public class ApkActionsBuilder {
commandLine.add("-rj").addExecPath(javaResourceZip);
}
- Pair<Artifact, Runfiles> nativeSymlinksManifestAndRunfiles =
+ NativeLibs.ManifestAndRunfiles nativeSymlinksManifestAndRunfiles =
nativeLibs.createApkBuilderSymlinks(ruleContext);
if (nativeSymlinksManifestAndRunfiles != null) {
- Artifact nativeSymlinksManifest = nativeSymlinksManifestAndRunfiles.first;
- Runfiles nativeSymlinksRunfiles = nativeSymlinksManifestAndRunfiles.second;
- PathFragment nativeSymlinksDir = nativeSymlinksManifest.getExecPath().getParentDirectory();
+ // This following is equal to AndroidBinary.getDxArtifact(
+ // ruleContext, "native_symlinks/MANIFEST").getExecPath().getParentDirectory();
+ // However, that causes an artifact to be registered without a generating action under
+ // --nobuild_runfile_manifests, so instead, the following directly synthesizes the required
+ // path fragment.
+ PathFragment nativeSymlinksDir =
+ ruleContext
+ .getBinOrGenfilesDirectory()
+ .getExecPath()
+ .getRelative(ruleContext.getUniqueDirectory("_dx").getRelative("native_symlinks"));
+
actionBuilder
.addRunfilesSupplier(
new RunfilesSupplierImpl(
- nativeSymlinksDir, nativeSymlinksRunfiles, nativeSymlinksManifest))
- .addInput(nativeSymlinksManifest)
+ nativeSymlinksDir,
+ nativeSymlinksManifestAndRunfiles.runfiles,
+ nativeSymlinksManifestAndRunfiles.manifest))
.addInputs(nativeLibs.getAllNativeLibs());
+ if (nativeSymlinksManifestAndRunfiles.manifest != null) {
+ actionBuilder.addInput(nativeSymlinksManifestAndRunfiles.manifest);
+ }
commandLine
.add("-nf")
// If the native libs are "foo/bar/x86/foo.so", we need to pass "foo/bar" here
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
index ed885134ee..3dac0dd48d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java
@@ -40,7 +40,6 @@ import com.google.devtools.build.lib.rules.cpp.CppSemantics;
import com.google.devtools.build.lib.rules.cpp.LinkerInput;
import com.google.devtools.build.lib.rules.nativedeps.NativeDepsHelper;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
-import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.Collection;
import java.util.HashMap;
@@ -141,7 +140,17 @@ public final class NativeLibs {
return result.build();
}
- Pair<Artifact, Runfiles> createApkBuilderSymlinks(RuleContext ruleContext) {
+ static class ManifestAndRunfiles {
+ @Nullable public final Artifact manifest;
+ public final Runfiles runfiles;
+
+ private ManifestAndRunfiles(@Nullable Artifact manifest, Runfiles runfiles) {
+ this.manifest = manifest;
+ this.runfiles = runfiles;
+ }
+ }
+
+ ManifestAndRunfiles createApkBuilderSymlinks(RuleContext ruleContext) {
Map<PathFragment, Artifact> symlinks = new LinkedHashMap<>();
for (Map.Entry<String, NestedSet<Artifact>> entry : nativeLibs.entrySet()) {
String arch = entry.getKey();
@@ -154,15 +163,19 @@ public final class NativeLibs {
return null;
}
+ Runfiles.Builder runfiles =
+ new Runfiles.Builder(
+ ruleContext.getWorkspaceName(),
+ ruleContext.getConfiguration().legacyExternalRunfiles());
+ runfiles.addRootSymlinks(symlinks);
+ if (!ruleContext.getConfiguration().buildRunfilesManifests()) {
+ return new ManifestAndRunfiles(/*manifest=*/ null, runfiles.build());
+ }
+
Artifact inputManifest = AndroidBinary.getDxArtifact(ruleContext, "native_symlinks.manifest");
SourceManifestAction sourceManifestAction =
new SourceManifestAction.Builder(
- ruleContext.getWorkspaceName(),
- ManifestType.SOURCE_SYMLINKS,
- ruleContext.getActionOwner(),
- inputManifest,
- ruleContext.getConfiguration().legacyExternalRunfiles())
- .addRootSymlinks(symlinks)
+ ManifestType.SOURCE_SYMLINKS, ruleContext.getActionOwner(), inputManifest, runfiles)
.build();
ruleContext.registerAction(sourceManifestAction);
Artifact outputManifest = AndroidBinary.getDxArtifact(ruleContext, "native_symlinks/MANIFEST");
@@ -175,7 +188,7 @@ public final class NativeLibs {
false,
ruleContext.getConfiguration().getLocalShellEnvironment(),
ruleContext.getConfiguration().runfilesEnabled()));
- return Pair.of(outputManifest, sourceManifestAction.getGeneratedRunfiles());
+ return new ManifestAndRunfiles(outputManifest, sourceManifestAction.getGeneratedRunfiles());
}
/**