Remove obsolete llndk_library
Remove llndk_library in favor of cc_library with llndk.symbol_file. Bug: 170784825 Test: m checkbuild Test: TestLlndkLibrary Change-Id: I43580976589a7a2a176d7442be53fa043c0c8324
This commit is contained in:
parent
627280f091
commit
203b421043
|
@ -1355,12 +1355,9 @@ func TestApexDependsOnLLNDKTransitively(t *testing.T) {
|
|||
system_shared_libs: [],
|
||||
stl: "none",
|
||||
stubs: { versions: ["29","30"] },
|
||||
llndk_stubs: "libbar.llndk",
|
||||
llndk: {
|
||||
symbol_file: "libbar.map.txt",
|
||||
}
|
||||
|
||||
llndk_library {
|
||||
name: "libbar.llndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
`,
|
||||
setUseVendorAllowListForTest([]string{"myapex"}),
|
||||
|
|
|
@ -485,12 +485,6 @@ func (c *stubDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *android.
|
|||
})
|
||||
}
|
||||
|
||||
func (c *llndkStubDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
|
||||
// Don't write anything for an llndk_library module, the vendor variant of the cc_library
|
||||
// module will write the Android.mk entries.
|
||||
entries.Disabled = true
|
||||
}
|
||||
|
||||
func (c *vndkPrebuiltLibraryDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
|
||||
entries.Class = "SHARED_LIBRARIES"
|
||||
|
||||
|
|
7
cc/cc.go
7
cc/cc.go
|
@ -1121,13 +1121,6 @@ func (c *Module) IsLlndkPublic() bool {
|
|||
return c.VendorProperties.IsLLNDK && !c.VendorProperties.IsVNDKPrivate
|
||||
}
|
||||
|
||||
func (c *Module) IsLlndkLibrary() bool {
|
||||
if _, ok := c.linker.(*llndkStubDecorator); ok {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (m *Module) NeedsLlndkVariants() bool {
|
||||
lib := moduleLibraryInterface(m)
|
||||
return lib != nil && (lib.hasLLNDKStubs() || lib.hasLLNDKHeaders())
|
||||
|
|
153
cc/cc_test.go
153
cc/cc_test.go
|
@ -548,14 +548,11 @@ func TestVndk(t *testing.T) {
|
|||
|
||||
cc_library {
|
||||
name: "libllndk",
|
||||
llndk_stubs: "libllndk.llndk",
|
||||
}
|
||||
|
||||
llndk_library {
|
||||
name: "libllndk.llndk",
|
||||
symbol_file: "",
|
||||
llndk: {
|
||||
symbol_file: "libllndk.map.txt",
|
||||
export_llndk_headers: ["libllndk_headers"],
|
||||
}
|
||||
}
|
||||
|
||||
cc_library_headers {
|
||||
name: "libllndk_headers",
|
||||
|
@ -897,14 +894,11 @@ func TestVndkWhenVndkVersionIsNotSet(t *testing.T) {
|
|||
|
||||
cc_library {
|
||||
name: "libllndk",
|
||||
llndk_stubs: "libllndk.llndk",
|
||||
}
|
||||
|
||||
llndk_library {
|
||||
name: "libllndk.llndk",
|
||||
symbol_file: "",
|
||||
llndk: {
|
||||
symbol_file: "libllndk.map.txt",
|
||||
export_llndk_headers: ["libllndk_headers"],
|
||||
}
|
||||
}
|
||||
|
||||
cc_library_headers {
|
||||
name: "libllndk_headers",
|
||||
|
@ -1170,12 +1164,9 @@ func TestDoubleLoadbleDep(t *testing.T) {
|
|||
cc_library {
|
||||
name: "libllndk",
|
||||
shared_libs: ["libdoubleloadable"],
|
||||
llndk_stubs: "libllndk.llndk",
|
||||
llndk: {
|
||||
symbol_file: "libllndk.map.txt",
|
||||
}
|
||||
|
||||
llndk_library {
|
||||
name: "libllndk.llndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
|
@ -1193,12 +1184,9 @@ func TestDoubleLoadbleDep(t *testing.T) {
|
|||
cc_library {
|
||||
name: "libllndk",
|
||||
shared_libs: ["libvndksp"],
|
||||
llndk_stubs: "libllndk.llndk",
|
||||
llndk: {
|
||||
symbol_file: "libllndk.map.txt",
|
||||
}
|
||||
|
||||
llndk_library {
|
||||
name: "libllndk.llndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
|
@ -1255,12 +1243,9 @@ func TestDoubleLoadbleDep(t *testing.T) {
|
|||
cc_library {
|
||||
name: "libllndk",
|
||||
shared_libs: ["libcoreonly"],
|
||||
llndk_stubs: "libllndk.llndk",
|
||||
llndk: {
|
||||
symbol_file: "libllndk.map.txt",
|
||||
}
|
||||
|
||||
llndk_library {
|
||||
name: "libllndk.llndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
|
@ -1283,12 +1268,9 @@ func TestDoubleLoadableDepError(t *testing.T) {
|
|||
cc_library {
|
||||
name: "libllndk",
|
||||
shared_libs: ["libnondoubleloadable"],
|
||||
llndk_stubs: "libllndk.llndk",
|
||||
llndk: {
|
||||
symbol_file: "libllndk.map.txt",
|
||||
}
|
||||
|
||||
llndk_library {
|
||||
name: "libllndk.llndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
|
@ -1307,12 +1289,9 @@ func TestDoubleLoadableDepError(t *testing.T) {
|
|||
name: "libllndk",
|
||||
no_libcrt: true,
|
||||
shared_libs: ["libnondoubleloadable"],
|
||||
llndk_stubs: "libllndk.llndk",
|
||||
llndk: {
|
||||
symbol_file: "libllndk.map.txt",
|
||||
}
|
||||
|
||||
llndk_library {
|
||||
name: "libllndk.llndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
|
@ -1326,12 +1305,9 @@ func TestDoubleLoadableDepError(t *testing.T) {
|
|||
cc_library {
|
||||
name: "libllndk",
|
||||
shared_libs: ["libcoreonly"],
|
||||
llndk_stubs: "libllndk.llndk",
|
||||
llndk: {
|
||||
symbol_file: "libllndk.map.txt",
|
||||
}
|
||||
|
||||
llndk_library {
|
||||
name: "libllndk.llndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
|
@ -1357,11 +1333,9 @@ func TestDoubleLoadableDepError(t *testing.T) {
|
|||
cc_library {
|
||||
name: "libllndk",
|
||||
shared_libs: ["libnondoubleloadable"],
|
||||
llndk_stubs: "libllndk.llndk",
|
||||
llndk: {
|
||||
symbol_file: "libllndk.map.txt",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libllndk.llndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
cc_library {
|
||||
name: "libnondoubleloadable",
|
||||
|
@ -1388,11 +1362,6 @@ func TestCheckVndkMembershipBeforeDoubleLoadable(t *testing.T) {
|
|||
shared_libs: ["libanothervndksp"],
|
||||
}
|
||||
|
||||
llndk_library {
|
||||
name: "libllndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "libanothervndksp",
|
||||
vendor_available: true,
|
||||
|
@ -2158,11 +2127,9 @@ func TestEnforceProductVndkVersion(t *testing.T) {
|
|||
bp := `
|
||||
cc_library {
|
||||
name: "libllndk",
|
||||
llndk_stubs: "libllndk.llndk",
|
||||
llndk: {
|
||||
symbol_file: "libllndk.map.txt",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libllndk.llndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
cc_library {
|
||||
name: "libvndk",
|
||||
|
@ -2436,20 +2403,16 @@ func TestMakeLinkType(t *testing.T) {
|
|||
}
|
||||
cc_library {
|
||||
name: "libllndk",
|
||||
llndk_stubs: "libllndk.llndk",
|
||||
llndk: {
|
||||
symbol_file: "libllndk.map.txt",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libllndk.llndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
cc_library {
|
||||
name: "libllndkprivate",
|
||||
llndk_stubs: "libllndkprivate.llndk",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libllndkprivate.llndk",
|
||||
llndk: {
|
||||
symbol_file: "libllndkprivate.map.txt",
|
||||
private: true,
|
||||
symbol_file: "",
|
||||
}
|
||||
}
|
||||
|
||||
llndk_libraries_txt {
|
||||
|
@ -2769,68 +2732,6 @@ func checkEquals(t *testing.T, message string, expected, actual interface{}) {
|
|||
}
|
||||
|
||||
func TestLlndkLibrary(t *testing.T) {
|
||||
ctx := testCc(t, `
|
||||
cc_library {
|
||||
name: "libllndk",
|
||||
stubs: { versions: ["1", "2"] },
|
||||
llndk_stubs: "libllndk.llndk",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libllndk.llndk",
|
||||
}
|
||||
|
||||
cc_prebuilt_library_shared {
|
||||
name: "libllndkprebuilt",
|
||||
stubs: { versions: ["1", "2"] },
|
||||
llndk_stubs: "libllndkprebuilt.llndk",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libllndkprebuilt.llndk",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "libllndk_with_external_headers",
|
||||
stubs: { versions: ["1", "2"] },
|
||||
llndk_stubs: "libllndk_with_external_headers.llndk",
|
||||
header_libs: ["libexternal_headers"],
|
||||
export_header_lib_headers: ["libexternal_headers"],
|
||||
}
|
||||
llndk_library {
|
||||
name: "libllndk_with_external_headers.llndk",
|
||||
}
|
||||
cc_library_headers {
|
||||
name: "libexternal_headers",
|
||||
export_include_dirs: ["include"],
|
||||
vendor_available: true,
|
||||
}
|
||||
`)
|
||||
actual := ctx.ModuleVariantsForTests("libllndk")
|
||||
for i := 0; i < len(actual); i++ {
|
||||
if !strings.HasPrefix(actual[i], "android_vendor.29_") {
|
||||
actual = append(actual[:i], actual[i+1:]...)
|
||||
i--
|
||||
}
|
||||
}
|
||||
expected := []string{
|
||||
"android_vendor.29_arm64_armv8-a_shared_1",
|
||||
"android_vendor.29_arm64_armv8-a_shared_2",
|
||||
"android_vendor.29_arm64_armv8-a_shared_current",
|
||||
"android_vendor.29_arm64_armv8-a_shared",
|
||||
"android_vendor.29_arm_armv7-a-neon_shared_1",
|
||||
"android_vendor.29_arm_armv7-a-neon_shared_2",
|
||||
"android_vendor.29_arm_armv7-a-neon_shared_current",
|
||||
"android_vendor.29_arm_armv7-a-neon_shared",
|
||||
}
|
||||
checkEquals(t, "variants for llndk stubs", expected, actual)
|
||||
|
||||
params := ctx.ModuleForTests("libllndk", "android_vendor.29_arm_armv7-a-neon_shared").Description("generate stub")
|
||||
checkEquals(t, "use VNDK version for default stubs", "current", params.Args["apiLevel"])
|
||||
|
||||
params = ctx.ModuleForTests("libllndk", "android_vendor.29_arm_armv7-a-neon_shared_1").Description("generate stub")
|
||||
checkEquals(t, "override apiLevel for versioned stubs", "1", params.Args["apiLevel"])
|
||||
}
|
||||
|
||||
func TestEmbeddedLlndkLibrary(t *testing.T) {
|
||||
result := prepareForCcTest.RunTestWithBp(t, `
|
||||
cc_library {
|
||||
name: "libllndk",
|
||||
|
|
|
@ -437,15 +437,11 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) {
|
|||
productVndkVersion = platformVndkVersion
|
||||
}
|
||||
|
||||
if m.IsLlndkLibrary() || m.NeedsLlndkVariants() {
|
||||
if m.NeedsLlndkVariants() {
|
||||
// This is an LLNDK library. The implementation of the library will be on /system,
|
||||
// and vendor and product variants will be created with LLNDK stubs.
|
||||
// The LLNDK libraries need vendor variants even if there is no VNDK.
|
||||
// The obsolete llndk_library and llndk_headers modules also need the vendor variants
|
||||
// so the cc_library LLNDK stubs can depend on them.
|
||||
if m.NeedsLlndkVariants() {
|
||||
coreVariantNeeded = true
|
||||
}
|
||||
if platformVndkVersion != "" {
|
||||
vendorVariants = append(vendorVariants, platformVndkVersion)
|
||||
productVariants = append(productVariants, platformVndkVersion)
|
||||
|
|
|
@ -117,9 +117,6 @@ type LibraryProperties struct {
|
|||
// Inject boringssl hash into the shared library. This is only intended for use by external/boringssl.
|
||||
Inject_bssl_hash *bool `android:"arch_variant"`
|
||||
|
||||
// If this is an LLNDK library, the name of the equivalent llndk_library module.
|
||||
Llndk_stubs *string
|
||||
|
||||
// If this is an LLNDK library, properties to describe the LLNDK stubs. Will be copied from
|
||||
// the module pointed to by llndk_stubs if it is set.
|
||||
Llndk llndkLibraryProperties
|
||||
|
@ -1674,18 +1671,10 @@ func (library *libraryDecorator) HeaderOnly() {
|
|||
|
||||
// hasLLNDKStubs returns true if this cc_library module has a variant that will build LLNDK stubs.
|
||||
func (library *libraryDecorator) hasLLNDKStubs() bool {
|
||||
return library.hasVestigialLLNDKLibrary() || String(library.Properties.Llndk.Symbol_file) != ""
|
||||
return String(library.Properties.Llndk.Symbol_file) != ""
|
||||
}
|
||||
|
||||
// hasVestigialLLNDKLibrary returns true if this cc_library module has a corresponding llndk_library
|
||||
// module containing properties describing the LLNDK variant.
|
||||
// TODO(b/170784825): remove this once there are no more llndk_library modules.
|
||||
func (library *libraryDecorator) hasVestigialLLNDKLibrary() bool {
|
||||
return String(library.Properties.Llndk_stubs) != ""
|
||||
}
|
||||
|
||||
// hasLLNDKHeaders returns true if this cc_library module has a variant that provides headers
|
||||
// to a module that sets llndk.symbol_file.
|
||||
// hasLLNDKStubs returns true if this cc_library module has a variant that will build LLNDK stubs.
|
||||
func (library *libraryDecorator) hasLLNDKHeaders() bool {
|
||||
return Bool(library.Properties.Llndk.Llndk_headers)
|
||||
}
|
||||
|
@ -1926,9 +1915,7 @@ func LinkageMutator(mctx android.BottomUpMutatorContext) {
|
|||
|
||||
isLLNDK := false
|
||||
if m, ok := mctx.Module().(*Module); ok {
|
||||
// Don't count the vestigial llndk_library module as isLLNDK, it needs a static
|
||||
// variant so that a cc_library_prebuilt can depend on it.
|
||||
isLLNDK = m.IsLlndk() && !isVestigialLLNDKModule(m)
|
||||
isLLNDK = m.IsLlndk()
|
||||
}
|
||||
buildStatic := library.BuildStaticVariant() && !isLLNDK
|
||||
buildShared := library.BuildSharedVariant()
|
||||
|
|
|
@ -106,9 +106,6 @@ type LinkableInterface interface {
|
|||
// IsLlndkPublic returns true only for LLNDK (public) libs.
|
||||
IsLlndkPublic() bool
|
||||
|
||||
// IsLlndkLibrary returns true if this module is an LLNDK library module.
|
||||
IsLlndkLibrary() bool
|
||||
|
||||
// NeedsLlndkVariants returns true if this module has LLNDK stubs or provides LLNDK headers.
|
||||
NeedsLlndkVariants() bool
|
||||
|
||||
|
|
|
@ -14,31 +14,12 @@
|
|||
|
||||
package cc
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"android/soong/android"
|
||||
)
|
||||
|
||||
var (
|
||||
llndkLibrarySuffix = ".llndk"
|
||||
llndkHeadersSuffix = ".llndk"
|
||||
)
|
||||
|
||||
// Holds properties to describe a stub shared library based on the provided version file.
|
||||
// The stub library will actually be built by the cc_library module that points to this
|
||||
// module with the llndk_stubs property.
|
||||
// TODO(ccross): move the properties from llndk_library modules directly into the cc_library
|
||||
// modules and remove the llndk_library modules.
|
||||
//
|
||||
// Example:
|
||||
//
|
||||
// llndk_library {
|
||||
// name: "libfoo",
|
||||
// symbol_file: "libfoo.map.txt",
|
||||
// export_include_dirs: ["include_vndk"],
|
||||
// }
|
||||
//
|
||||
type llndkLibraryProperties struct {
|
||||
// Relative path to the symbol map.
|
||||
// An example file can be seen here: TODO(danalbert): Make an example.
|
||||
|
@ -74,98 +55,3 @@ type llndkLibraryProperties struct {
|
|||
// llndk.symbol_file.
|
||||
Llndk_headers *bool
|
||||
}
|
||||
|
||||
type llndkStubDecorator struct {
|
||||
*libraryDecorator
|
||||
|
||||
Properties llndkLibraryProperties
|
||||
}
|
||||
|
||||
var _ versionedInterface = (*llndkStubDecorator)(nil)
|
||||
|
||||
func (stub *llndkStubDecorator) compilerFlags(ctx ModuleContext, flags Flags, deps PathDeps) Flags {
|
||||
return flags
|
||||
}
|
||||
|
||||
func (stub *llndkStubDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) Objects {
|
||||
return Objects{}
|
||||
}
|
||||
|
||||
func (stub *llndkStubDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
|
||||
return deps
|
||||
}
|
||||
|
||||
func (stub *llndkStubDecorator) Name(name string) string {
|
||||
if strings.HasSuffix(name, llndkLibrarySuffix) {
|
||||
return name
|
||||
}
|
||||
return name + llndkLibrarySuffix
|
||||
}
|
||||
|
||||
func (stub *llndkStubDecorator) linkerProps() []interface{} {
|
||||
props := stub.libraryDecorator.linkerProps()
|
||||
return append(props, &stub.Properties)
|
||||
}
|
||||
|
||||
func (stub *llndkStubDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
|
||||
stub.libraryDecorator.libName = stub.implementationModuleName(ctx.ModuleName())
|
||||
return stub.libraryDecorator.linkerFlags(ctx, flags)
|
||||
}
|
||||
|
||||
func (stub *llndkStubDecorator) link(ctx ModuleContext, flags Flags, deps PathDeps,
|
||||
objs Objects) android.Path {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (stub *llndkStubDecorator) nativeCoverage() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (stub *llndkStubDecorator) implementationModuleName(name string) string {
|
||||
return strings.TrimSuffix(name, llndkLibrarySuffix)
|
||||
}
|
||||
|
||||
func (stub *llndkStubDecorator) buildStubs() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func NewLLndkStubLibrary() *Module {
|
||||
module, library := NewLibrary(android.DeviceSupported)
|
||||
module.stl = nil
|
||||
module.sanitize = nil
|
||||
library.disableStripping()
|
||||
|
||||
stub := &llndkStubDecorator{
|
||||
libraryDecorator: library,
|
||||
}
|
||||
module.compiler = stub
|
||||
module.linker = stub
|
||||
module.installer = nil
|
||||
module.library = stub
|
||||
|
||||
return module
|
||||
}
|
||||
|
||||
// llndk_library creates a stub llndk shared library based on the provided
|
||||
// version file. Example:
|
||||
//
|
||||
// llndk_library {
|
||||
// name: "libfoo",
|
||||
// symbol_file: "libfoo.map.txt",
|
||||
// export_include_dirs: ["include_vndk"],
|
||||
// }
|
||||
func LlndkLibraryFactory() android.Module {
|
||||
module := NewLLndkStubLibrary()
|
||||
return module.Init()
|
||||
}
|
||||
|
||||
// isVestigialLLNDKModule returns true if m is a vestigial llndk_library module used to provide
|
||||
// properties to the LLNDK variant of a cc_library.
|
||||
func isVestigialLLNDKModule(m *Module) bool {
|
||||
_, ok := m.linker.(*llndkStubDecorator)
|
||||
return ok
|
||||
}
|
||||
|
||||
func init() {
|
||||
android.RegisterModuleType("llndk_library", LlndkLibraryFactory)
|
||||
}
|
||||
|
|
|
@ -31,20 +31,7 @@ type stubLibraries struct {
|
|||
|
||||
// Check if the module defines stub, or itself is stub
|
||||
func IsStubTarget(m *Module) bool {
|
||||
if m.IsStubs() || m.HasStubsVariants() {
|
||||
return true
|
||||
}
|
||||
|
||||
// Library which defines LLNDK Stub is also Stub target.
|
||||
// Pure LLNDK Stub target would not contain any packaging
|
||||
// with target file path.
|
||||
if library, ok := m.linker.(*libraryDecorator); ok {
|
||||
if library.Properties.Llndk_stubs != nil {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
return m.IsStubs() || m.HasStubsVariants()
|
||||
}
|
||||
|
||||
// Get target file name to be installed from this module
|
||||
|
|
|
@ -27,7 +27,6 @@ func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) {
|
|||
RegisterLibraryHeadersBuildComponents(ctx)
|
||||
|
||||
ctx.RegisterModuleType("toolchain_library", ToolchainLibraryFactory)
|
||||
ctx.RegisterModuleType("llndk_library", LlndkLibraryFactory)
|
||||
ctx.RegisterModuleType("cc_benchmark", BenchmarkFactory)
|
||||
ctx.RegisterModuleType("cc_object", ObjectFactory)
|
||||
ctx.RegisterModuleType("cc_genrule", genRuleFactory)
|
||||
|
@ -200,12 +199,9 @@ func commonDefaultModules() string {
|
|||
stubs: {
|
||||
versions: ["27", "28", "29"],
|
||||
},
|
||||
llndk_stubs: "libc.llndk",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libc.llndk",
|
||||
symbol_file: "",
|
||||
sdk_version: "current",
|
||||
llndk: {
|
||||
symbol_file: "libc.map.txt",
|
||||
},
|
||||
}
|
||||
cc_library {
|
||||
name: "libm",
|
||||
|
@ -222,12 +218,9 @@ func commonDefaultModules() string {
|
|||
"//apex_available:platform",
|
||||
"myapex"
|
||||
],
|
||||
llndk_stubs: "libm.llndk",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libm.llndk",
|
||||
symbol_file: "",
|
||||
sdk_version: "current",
|
||||
llndk: {
|
||||
symbol_file: "libm.map.txt",
|
||||
},
|
||||
}
|
||||
|
||||
// Coverage libraries
|
||||
|
@ -289,12 +282,9 @@ func commonDefaultModules() string {
|
|||
"//apex_available:platform",
|
||||
"myapex"
|
||||
],
|
||||
llndk_stubs: "libdl.llndk",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libdl.llndk",
|
||||
symbol_file: "",
|
||||
sdk_version: "current",
|
||||
llndk: {
|
||||
symbol_file: "libdl.map.txt",
|
||||
},
|
||||
}
|
||||
cc_library {
|
||||
name: "libft2",
|
||||
|
@ -302,13 +292,10 @@ func commonDefaultModules() string {
|
|||
nocrt: true,
|
||||
system_shared_libs: [],
|
||||
recovery_available: true,
|
||||
llndk_stubs: "libft2.llndk",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libft2.llndk",
|
||||
symbol_file: "",
|
||||
llndk: {
|
||||
symbol_file: "libft2.map.txt",
|
||||
private: true,
|
||||
sdk_version: "current",
|
||||
}
|
||||
}
|
||||
cc_library {
|
||||
name: "libc++_static",
|
||||
|
|
|
@ -184,9 +184,6 @@ func isSnapshotAware(cfg android.DeviceConfig, m *Module, inProprietaryPath bool
|
|||
if m.IsLlndk() {
|
||||
return false
|
||||
}
|
||||
if _, ok := m.linker.(*llndkStubDecorator); ok {
|
||||
return false
|
||||
}
|
||||
|
||||
// Libraries
|
||||
if l, ok := m.linker.(snapshotLibraryInterface); ok {
|
||||
|
|
|
@ -78,14 +78,12 @@ func TestVendorSnapshotCapture(t *testing.T) {
|
|||
|
||||
cc_library {
|
||||
name: "libllndk",
|
||||
llndk_stubs: "libllndk.llndk",
|
||||
}
|
||||
|
||||
llndk_library {
|
||||
name: "libllndk.llndk",
|
||||
symbol_file: "",
|
||||
llndk: {
|
||||
symbol_file: "libllndk.map.txt",
|
||||
},
|
||||
}
|
||||
`
|
||||
|
||||
config := TestConfig(t.TempDir(), android.Android, nil, bp, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("29")
|
||||
|
|
47
cc/vndk.go
47
cc/vndk.go
|
@ -233,11 +233,11 @@ func vndkIsVndkDepAllowed(from *vndkdep, to *vndkdep) error {
|
|||
type moduleListerFunc func(ctx android.SingletonContext) (moduleNames, fileNames []string)
|
||||
|
||||
var (
|
||||
llndkLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsLLNDK && !isVestigialLLNDKModule(m) && !m.Header() })
|
||||
llndkLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsLLNDK && !m.Header() })
|
||||
llndkLibrariesWithoutHWASAN = vndkModuleListRemover(llndkLibraries, "libclang_rt.hwasan-")
|
||||
vndkSPLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsVNDKSP })
|
||||
vndkCoreLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsVNDKCore })
|
||||
vndkPrivateLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsVNDKPrivate && !isVestigialLLNDKModule(m) })
|
||||
vndkPrivateLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsVNDKPrivate })
|
||||
vndkProductLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsVNDKProduct })
|
||||
vndkUsingCoreVariantLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsVNDKUsingCoreVariant })
|
||||
)
|
||||
|
@ -298,15 +298,6 @@ func setVndkMustUseVendorVariantListForTest(config android.Config, mustUseVendor
|
|||
})
|
||||
}
|
||||
|
||||
func processLlndkLibrary(mctx android.BottomUpMutatorContext, m *Module) {
|
||||
lib := m.linker.(*llndkStubDecorator)
|
||||
|
||||
m.VendorProperties.IsLLNDK = true
|
||||
if Bool(lib.Properties.Private) {
|
||||
m.VendorProperties.IsVNDKPrivate = true
|
||||
}
|
||||
}
|
||||
|
||||
func processVndkLibrary(mctx android.BottomUpMutatorContext, m *Module) {
|
||||
if m.InProduct() {
|
||||
// We may skip the steps for the product variants because they
|
||||
|
@ -402,41 +393,14 @@ func VndkMutator(mctx android.BottomUpMutatorContext) {
|
|||
return
|
||||
}
|
||||
|
||||
if _, ok := m.linker.(*llndkStubDecorator); ok {
|
||||
processLlndkLibrary(mctx, m)
|
||||
return
|
||||
}
|
||||
|
||||
// This is a temporary measure to copy the properties from an llndk_library into the cc_library
|
||||
// that will actually build the stubs. It will be removed once the properties are moved into
|
||||
// the cc_library in the Android.bp files.
|
||||
mergeLLNDKToLib := func(llndk *Module, llndkProperties *llndkLibraryProperties, flagExporter *flagExporter) {
|
||||
if llndkLib := moduleLibraryInterface(llndk); llndkLib != nil {
|
||||
*llndkProperties = llndkLib.(*llndkStubDecorator).Properties
|
||||
flagExporter.Properties = llndkLib.(*llndkStubDecorator).flagExporter.Properties
|
||||
|
||||
m.VendorProperties.IsLLNDK = llndk.VendorProperties.IsLLNDK
|
||||
m.VendorProperties.IsVNDKPrivate = llndk.VendorProperties.IsVNDKPrivate
|
||||
}
|
||||
}
|
||||
|
||||
lib, isLib := m.linker.(*libraryDecorator)
|
||||
prebuiltLib, isPrebuiltLib := m.linker.(*prebuiltLibraryLinker)
|
||||
|
||||
if m.UseVndk() && isLib && lib.hasVestigialLLNDKLibrary() {
|
||||
llndk := mctx.AddVariationDependencies(nil, llndkStubDepTag, String(lib.Properties.Llndk_stubs))
|
||||
mergeLLNDKToLib(llndk[0].(*Module), &lib.Properties.Llndk, &lib.flagExporter)
|
||||
}
|
||||
if m.UseVndk() && isPrebuiltLib && prebuiltLib.hasVestigialLLNDKLibrary() {
|
||||
llndk := mctx.AddVariationDependencies(nil, llndkStubDepTag, String(prebuiltLib.Properties.Llndk_stubs))
|
||||
mergeLLNDKToLib(llndk[0].(*Module), &prebuiltLib.Properties.Llndk, &prebuiltLib.flagExporter)
|
||||
}
|
||||
|
||||
if m.UseVndk() && isLib && lib.hasLLNDKStubs() && !lib.hasVestigialLLNDKLibrary() {
|
||||
if m.UseVndk() && isLib && lib.hasLLNDKStubs() {
|
||||
m.VendorProperties.IsLLNDK = true
|
||||
m.VendorProperties.IsVNDKPrivate = Bool(lib.Properties.Llndk.Private)
|
||||
}
|
||||
if m.UseVndk() && isPrebuiltLib && prebuiltLib.hasLLNDKStubs() && !prebuiltLib.hasVestigialLLNDKLibrary() {
|
||||
if m.UseVndk() && isPrebuiltLib && prebuiltLib.hasLLNDKStubs() {
|
||||
m.VendorProperties.IsLLNDK = true
|
||||
m.VendorProperties.IsVNDKPrivate = Bool(prebuiltLib.Properties.Llndk.Private)
|
||||
}
|
||||
|
@ -874,9 +838,6 @@ func getVndkFileName(m *Module) (string, error) {
|
|||
if prebuilt, ok := m.linker.(*prebuiltLibraryLinker); ok {
|
||||
return prebuilt.libraryDecorator.getLibNameHelper(m.BaseModuleName(), true, false) + ".so", nil
|
||||
}
|
||||
if library, ok := m.linker.(*llndkStubDecorator); ok {
|
||||
return library.getLibNameHelper(m.BaseModuleName(), true, false) + ".so", nil
|
||||
}
|
||||
return "", fmt.Errorf("VNDK library should have libraryDecorator or prebuiltLibraryLinker as linker: %T", m.linker)
|
||||
}
|
||||
|
||||
|
|
|
@ -262,10 +262,6 @@ func (c *Module) IsLlndkPublic() bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func (m *Module) IsLlndkLibrary() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (mod *Module) KernelHeadersDecorator() bool {
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -52,12 +52,9 @@ func test(t *testing.T, bp string) *android.TestResult {
|
|||
system_shared_libs: [],
|
||||
recovery_available: true,
|
||||
host_supported: true,
|
||||
llndk_stubs: "liblog.llndk",
|
||||
llndk: {
|
||||
symbol_file: "liblog.map.txt",
|
||||
}
|
||||
|
||||
llndk_library {
|
||||
name: "liblog.llndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
|
||||
java_library {
|
||||
|
|
Loading…
Reference in New Issue