From c179ea68129972f6c5789c5fc8344d06caebcc8b Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 9 Oct 2020 10:54:15 -0700 Subject: Make java_binary common variant a dependency ctx.PrimaryModule() is wrong in the case of a java_binary that supports both host and device, use an explicit dependency instead. Once the dependency exists there is no need to manually request the jar be installed, it will automatically be installed by the host installation rules for dependencies. Test: TestBinary Change-Id: Iddeea2d08bc574c79d42139020558cd70d718ca1 --- java/java_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'java/java_test.go') diff --git a/java/java_test.go b/java/java_test.go index a43e2a8c9..a727812b5 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -467,9 +467,8 @@ func TestBinary(t *testing.T) { barWrapperDeps := barWrapper.Output("bar").Implicits.Strings() // Test that the install binary wrapper depends on the installed jar file - if len(barWrapperDeps) != 1 || barWrapperDeps[0] != barJar { - t.Errorf("expected binary wrapper implicits [%q], got %v", - barJar, barWrapperDeps) + if g, w := barWrapperDeps, barJar; !android.InList(w, g) { + t.Errorf("expected binary wrapper implicits to contain %q, got %q", w, g) } } -- cgit v1.2.3-59-g8ed1b From 89226d9ef94040215ff9d97212d997a656f5d508 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 9 Oct 2020 19:00:54 -0700 Subject: Add jni_libs to host java binaries Add a property to support dependencies on JNI libraries for host java binaries. Fixes: 170389375 Test: TestBinary Change-Id: Ieeca3c3997615f0b17ae1f058b94e6c9ba929cab --- java/java.go | 12 ++++++++++-- java/java_test.go | 16 ++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) (limited to 'java/java_test.go') diff --git a/java/java.go b/java/java.go index 615cbadfb..3ce188586 100644 --- a/java/java.go +++ b/java/java.go @@ -2432,6 +2432,10 @@ type binaryProperties struct { // Name of the class containing main to be inserted into the manifest as Main-Class. Main_class *string + + // Names of modules containing JNI libraries that should be installed alongside the host + // variant of the binary. + Jni_libs []string } type Binary struct { @@ -2473,8 +2477,8 @@ func (j *Binary) GenerateAndroidBuildActions(ctx android.ModuleContext) { } // The host installation rules make the installed wrapper depend on all the dependencies - // of the wrapper variant, which will include the common variant's jar file. This is - // verified by TestBinary. + // of the wrapper variant, which will include the common variant's jar file and any JNI + // libraries. This is verified by TestBinary. j.binaryFile = ctx.InstallExecutable(android.PathForModuleInstall(ctx, "bin"), ctx.ModuleName(), j.wrapperFile) } @@ -2483,6 +2487,10 @@ func (j *Binary) GenerateAndroidBuildActions(ctx android.ModuleContext) { func (j *Binary) DepsMutator(ctx android.BottomUpMutatorContext) { if ctx.Arch().ArchType == android.Common { j.deps(ctx) + } else { + // This dependency ensures the host installation rules will install the jni libraries + // when the wrapper is installed. + ctx.AddVariationDependencies(nil, jniLibTag, j.binaryProperties.Jni_libs...) } } diff --git a/java/java_test.go b/java/java_test.go index a727812b5..2fd4121aa 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -456,6 +456,14 @@ func TestBinary(t *testing.T) { name: "bar", srcs: ["b.java"], static_libs: ["foo"], + jni_libs: ["libjni"], + } + + cc_library_shared { + name: "libjni", + host_supported: true, + device_supported: false, + stl: "none", } `) @@ -466,10 +474,18 @@ func TestBinary(t *testing.T) { barWrapper := ctx.ModuleForTests("bar", buildOS+"_x86_64") barWrapperDeps := barWrapper.Output("bar").Implicits.Strings() + libjni := ctx.ModuleForTests("libjni", buildOS+"_x86_64_shared") + libjniSO := libjni.Rule("Cp").Output.String() + // Test that the install binary wrapper depends on the installed jar file if g, w := barWrapperDeps, barJar; !android.InList(w, g) { t.Errorf("expected binary wrapper implicits to contain %q, got %q", w, g) } + + // Test that the install binary wrapper depends on the installed JNI libraries + if g, w := barWrapperDeps, libjniSO; !android.InList(w, g) { + t.Errorf("expected binary wrapper implicits to contain %q, got %q", w, g) + } } func TestHostBinaryNoJavaDebugInfoOverride(t *testing.T) { -- cgit v1.2.3-59-g8ed1b