Add jni_libs property to java tests
Add jni_libs property to java tests and treat it as test data that should be copied to the lib or lib64 directory in the test directory. Fixes: 176593487 Test: java_test.go Change-Id: I3a118b933ab30dcd731c6dc2708da9bc63ab5520
This commit is contained in:
parent
2df8177575
commit
246164a055
2 changed files with 60 additions and 0 deletions
34
java/java.go
34
java/java.go
|
@ -29,6 +29,7 @@ import (
|
|||
"github.com/google/blueprint/proptools"
|
||||
|
||||
"android/soong/android"
|
||||
"android/soong/cc"
|
||||
"android/soong/dexpreopt"
|
||||
"android/soong/java/config"
|
||||
"android/soong/tradefed"
|
||||
|
@ -2387,6 +2388,9 @@ type testProperties struct {
|
|||
|
||||
// Test options.
|
||||
Test_options TestOptions
|
||||
|
||||
// Names of modules containing JNI libraries that should be installed alongside the test.
|
||||
Jni_libs []string
|
||||
}
|
||||
|
||||
type hostTestProperties struct {
|
||||
|
@ -2448,6 +2452,13 @@ func (j *TestHost) DepsMutator(ctx android.BottomUpMutatorContext) {
|
|||
}
|
||||
}
|
||||
|
||||
if len(j.testProperties.Jni_libs) > 0 {
|
||||
for _, target := range ctx.MultiTargets() {
|
||||
sharedLibVariations := append(target.Variations(), blueprint.Variation{Mutator: "link", Variation: "shared"})
|
||||
ctx.AddFarVariationDependencies(sharedLibVariations, jniLibTag, j.testProperties.Jni_libs...)
|
||||
}
|
||||
}
|
||||
|
||||
j.deps(ctx)
|
||||
}
|
||||
|
||||
|
@ -2463,6 +2474,29 @@ func (j *Test) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||
j.data = append(j.data, android.OutputFileForModule(ctx, dep, ""))
|
||||
})
|
||||
|
||||
ctx.VisitDirectDepsWithTag(jniLibTag, func(dep android.Module) {
|
||||
sharedLibInfo := ctx.OtherModuleProvider(dep, cc.SharedLibraryInfoProvider).(cc.SharedLibraryInfo)
|
||||
if sharedLibInfo.SharedLibrary != nil {
|
||||
// Copy to an intermediate output directory to append "lib[64]" to the path,
|
||||
// so that it's compatible with the default rpath values.
|
||||
var relPath string
|
||||
if sharedLibInfo.Target.Arch.ArchType.Multilib == "lib64" {
|
||||
relPath = filepath.Join("lib64", sharedLibInfo.SharedLibrary.Base())
|
||||
} else {
|
||||
relPath = filepath.Join("lib", sharedLibInfo.SharedLibrary.Base())
|
||||
}
|
||||
relocatedLib := android.PathForModuleOut(ctx, "relocated").Join(ctx, relPath)
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
Rule: android.Cp,
|
||||
Input: sharedLibInfo.SharedLibrary,
|
||||
Output: relocatedLib,
|
||||
})
|
||||
j.data = append(j.data, relocatedLib)
|
||||
} else {
|
||||
ctx.PropertyErrorf("jni_libs", "%q of type %q is not supported", dep.Name(), ctx.OtherModuleType(dep))
|
||||
}
|
||||
})
|
||||
|
||||
j.Library.GenerateAndroidBuildActions(ctx)
|
||||
}
|
||||
|
||||
|
|
|
@ -499,6 +499,32 @@ func TestBinary(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestTest(t *testing.T) {
|
||||
ctx, _ := testJava(t, `
|
||||
java_test_host {
|
||||
name: "foo",
|
||||
srcs: ["a.java"],
|
||||
jni_libs: ["libjni"],
|
||||
}
|
||||
|
||||
cc_library_shared {
|
||||
name: "libjni",
|
||||
host_supported: true,
|
||||
device_supported: false,
|
||||
stl: "none",
|
||||
}
|
||||
`)
|
||||
|
||||
buildOS := android.BuildOs.String()
|
||||
|
||||
foo := ctx.ModuleForTests("foo", buildOS+"_common").Module().(*TestHost)
|
||||
|
||||
fooTestData := foo.data
|
||||
if len(fooTestData) != 1 || fooTestData[0].Rel() != "lib64/libjni.so" {
|
||||
t.Errorf(`expected foo test data relative path ["lib64/libjni.so"], got %q`, fooTestData.Strings())
|
||||
}
|
||||
}
|
||||
|
||||
func TestHostBinaryNoJavaDebugInfoOverride(t *testing.T) {
|
||||
bp := `
|
||||
java_library {
|
||||
|
|
Loading…
Reference in a new issue