diff options
author | 2018-04-18 15:01:33 -0700 | |
---|---|---|
committer | 2018-04-18 15:03:37 -0700 | |
commit | 96fcc45372fc020deef0914ce4041ba54d7e9afb (patch) | |
tree | c7f88ab0f3b39abe4aeead6cb11321ae10db58ae /src/main/java/com/google | |
parent | cc4196166234ecd3ac376a6f9b52b226462f0d0a (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.java | 26 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/NativeLibs.java | 31 |
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()); } /** |