Introduce cc_api_library
Introduce cc_api_library, which reflects imported API from other inner-tree. This cc_api_library module type will later refer from the other ninja module which generates stub library from the interface description. Tested environment : * original libc definition has been removed temporarily, to ensure that imported api stub library is being used from build * Added new definition of libc as below cc_api_library { name: "libc", arch: { x86: { src: "libs/x86/libc.so", }, x86_64: { src: "libs/x86_64/libc.so", }, }, header_libs: [ "libc_headers", ], export_header_lib_headers: ["libc_headers"], min_sdk_version: "9", vendor_available: true, } Bug: 236087698 Test: `ALLOW_MISSING_DEPENDENCIES=true m vendorimage` succeeded Change-Id: I67070b0f3561aa2afd73b6c1c0fdf4255218baac
This commit is contained in:
@@ -22,6 +22,8 @@ import (
|
||||
|
||||
"android/soong/android"
|
||||
"android/soong/multitree"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
)
|
||||
|
||||
func TestCcApiStubLibraryOutputFiles(t *testing.T) {
|
||||
@@ -106,3 +108,111 @@ func TestApiSurfaceOutputs(t *testing.T) {
|
||||
android.AssertStringEquals(t, "name", "foo.mysdk", api_surface_gen_rule_args["name"])
|
||||
android.AssertStringEquals(t, "symbol_file", "foo.map.txt", api_surface_gen_rule_args["symbol_file"])*/
|
||||
}
|
||||
|
||||
func hasDirectDependency(t *testing.T, ctx *android.TestResult, from android.Module, to android.Module) bool {
|
||||
t.Helper()
|
||||
var found bool
|
||||
ctx.VisitDirectDeps(from, func(dep blueprint.Module) {
|
||||
if dep == to {
|
||||
found = true
|
||||
}
|
||||
})
|
||||
return found
|
||||
}
|
||||
|
||||
func TestApiLibraryReplacesExistingModule(t *testing.T) {
|
||||
bp := `
|
||||
cc_library {
|
||||
name: "libfoo",
|
||||
shared_libs: ["libbar"],
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "libbar",
|
||||
}
|
||||
|
||||
cc_api_library {
|
||||
name: "libbar",
|
||||
src: "libbar.so",
|
||||
}
|
||||
|
||||
api_imports {
|
||||
name: "api_imports",
|
||||
shared_libs: [
|
||||
"libbar",
|
||||
],
|
||||
header_libs: [],
|
||||
}
|
||||
`
|
||||
|
||||
ctx := prepareForCcTest.RunTestWithBp(t, bp)
|
||||
|
||||
libfoo := ctx.ModuleForTests("libfoo", "android_arm64_armv8-a_shared").Module()
|
||||
libbar := ctx.ModuleForTests("libbar", "android_arm64_armv8-a_shared").Module()
|
||||
libbarApiImport := ctx.ModuleForTests("libbar.apiimport", "android_arm64_armv8-a_shared").Module()
|
||||
|
||||
android.AssertBoolEquals(t, "original library should not be linked", false, hasDirectDependency(t, ctx, libfoo, libbar))
|
||||
android.AssertBoolEquals(t, "Stub library from API surface should be linked", true, hasDirectDependency(t, ctx, libfoo, libbarApiImport))
|
||||
}
|
||||
|
||||
func TestApiLibraryDoNotRequireOriginalModule(t *testing.T) {
|
||||
bp := `
|
||||
cc_library {
|
||||
name: "libfoo",
|
||||
shared_libs: ["libbar"],
|
||||
}
|
||||
|
||||
cc_api_library {
|
||||
name: "libbar",
|
||||
src: "libbar.so",
|
||||
}
|
||||
|
||||
api_imports {
|
||||
name: "api_imports",
|
||||
shared_libs: [
|
||||
"libbar",
|
||||
],
|
||||
header_libs: [],
|
||||
}
|
||||
`
|
||||
|
||||
ctx := prepareForCcTest.RunTestWithBp(t, bp)
|
||||
|
||||
libfoo := ctx.ModuleForTests("libfoo", "android_arm64_armv8-a_shared").Module()
|
||||
libbarApiImport := ctx.ModuleForTests("libbar.apiimport", "android_arm64_armv8-a_shared").Module()
|
||||
|
||||
android.AssertBoolEquals(t, "Stub library from API surface should be linked", true, hasDirectDependency(t, ctx, libfoo, libbarApiImport))
|
||||
}
|
||||
|
||||
func TestApiLibraryShouldNotReplaceWithoutApiImport(t *testing.T) {
|
||||
bp := `
|
||||
cc_library {
|
||||
name: "libfoo",
|
||||
shared_libs: ["libbar"],
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "libbar",
|
||||
}
|
||||
|
||||
cc_api_library {
|
||||
name: "libbar",
|
||||
src: "libbar.so",
|
||||
}
|
||||
|
||||
api_imports {
|
||||
name: "api_imports",
|
||||
shared_libs: [],
|
||||
header_libs: [],
|
||||
}
|
||||
`
|
||||
|
||||
ctx := prepareForCcTest.RunTestWithBp(t, bp)
|
||||
|
||||
libfoo := ctx.ModuleForTests("libfoo", "android_arm64_armv8-a_shared").Module()
|
||||
libbar := ctx.ModuleForTests("libbar", "android_arm64_armv8-a_shared").Module()
|
||||
libbarApiImport := ctx.ModuleForTests("libbar.apiimport", "android_arm64_armv8-a_shared").Module()
|
||||
|
||||
android.AssertBoolEquals(t, "original library should be linked", true, hasDirectDependency(t, ctx, libfoo, libbar))
|
||||
android.AssertBoolEquals(t, "Stub library from API surface should not be linked", false, hasDirectDependency(t, ctx, libfoo, libbarApiImport))
|
||||
}
|
||||
|
Reference in New Issue
Block a user