diff options
-rw-r--r-- | cc/cc.go | 7 | ||||
-rw-r--r-- | cc/compiler.go | 8 | ||||
-rw-r--r-- | cc/config/global.go | 11 | ||||
-rw-r--r-- | cc/library.go | 3 | ||||
-rw-r--r-- | cc/makevars.go | 4 | ||||
-rw-r--r-- | cc/sabi.go | 2 | ||||
-rw-r--r-- | cc/util.go | 7 | ||||
-rw-r--r-- | cc/vndk.go | 38 |
8 files changed, 63 insertions, 17 deletions
@@ -35,6 +35,7 @@ func init() { android.PreDepsMutators(func(ctx android.RegisterMutatorsContext) { ctx.BottomUp("link", linkageMutator).Parallel() + ctx.BottomUp("vndk", vndkMutator).Parallel() ctx.BottomUp("image", vendorMutator).Parallel() ctx.BottomUp("ndk_api", ndkApiMutator).Parallel() ctx.BottomUp("test_per_src", testPerSrcMutator).Parallel() @@ -457,7 +458,7 @@ func (ctx *moduleContextImpl) isVndkSp() bool { // Create source abi dumps if the module belongs to the list of VndkLibraries. func (ctx *moduleContextImpl) createVndkSourceAbiDump() bool { - return ctx.ctx.Device() && (ctx.mod.isVndk() || inList(ctx.baseModuleName(), config.LLndkLibraries())) + return ctx.ctx.Device() && (ctx.mod.isVndk() || inList(ctx.baseModuleName(), llndkLibraries)) } func (ctx *moduleContextImpl) selectedStl() string { @@ -745,7 +746,7 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { } else { variantLibs = append(variantLibs, entry+ndkLibrarySuffix) } - } else if ctx.vndk() && inList(entry, config.LLndkLibraries()) { + } else if ctx.vndk() && inList(entry, llndkLibraries) { nonvariantLibs = append(nonvariantLibs, entry+llndkLibrarySuffix) } else { nonvariantLibs = append(nonvariantLibs, entry) @@ -1109,7 +1110,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { case sharedDepTag, sharedExportDepTag, lateSharedDepTag: libName := strings.TrimSuffix(name, llndkLibrarySuffix) libName = strings.TrimPrefix(libName, "prebuilt_") - isLLndk := inList(libName, config.LLndkLibraries()) + isLLndk := inList(libName, llndkLibraries) if c.vndk() && (Bool(cc.Properties.Vendor_available) || isLLndk) { libName += vendorSuffix } diff --git a/cc/compiler.go b/cc/compiler.go index cec527bf..c7fcca79 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -134,6 +134,10 @@ type BaseCompilerProperties struct { // list of source files that should not be used to // build the vendor variant of the C/C++ module. Exclude_srcs []string + + // List of additional cflags that should be used to build the vendor + // variant of the C/C++ module. + Cflags []string } } @@ -392,6 +396,10 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag flags.CppFlags = append([]string{"-std=" + cppStd}, flags.CppFlags...) } + if ctx.vndk() { + flags.CFlags = append(flags.CFlags, esc(compiler.Properties.Target.Vendor.Cflags)...) + } + // We can enforce some rules more strictly in the code we own. strict // indicates if this is code that we can be stricter with. If we have // rules that we want to apply to *our* code (but maybe can't for diff --git a/cc/config/global.go b/cc/config/global.go index 65a211c6..56de3513 100644 --- a/cc/config/global.go +++ b/cc/config/global.go @@ -185,17 +185,6 @@ func bionicHeaders(bionicArch, kernelArch string) string { }, " ") } -func VndkLibraries() []string { - return []string{} -} - -// This needs to be kept up to date with the list in system/core/rootdir/etc/ld.config.txt: -// [vendor] -// namespace.default.link.system.shared_libs -func LLndkLibraries() []string { - return []string{"libc", "libm", "libdl", "liblog", "libandroid_net", "ld-android", "libvndksupport", "libnativewindow"} -} - func replaceFirst(slice []string, from, to string) { if slice[0] != from { panic(fmt.Errorf("Expected %q, found %q", from, to)) diff --git a/cc/library.go b/cc/library.go index 4e3e2b39..4a173a5d 100644 --- a/cc/library.go +++ b/cc/library.go @@ -21,7 +21,6 @@ import ( "github.com/google/blueprint/pathtools" "android/soong/android" - "android/soong/cc/config" ) type LibraryProperties struct { @@ -621,7 +620,7 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objec } func vndkVsNdk(ctx ModuleContext) bool { - if inList(ctx.baseModuleName(), config.LLndkLibraries()) { + if inList(ctx.baseModuleName(), llndkLibraries) { return false } return true diff --git a/cc/makevars.go b/cc/makevars.go index 294f3e65..8bdcf9fb 100644 --- a/cc/makevars.go +++ b/cc/makevars.go @@ -59,6 +59,10 @@ func makeVarsProvider(ctx android.MakeVarsContext) { ctx.Strict("BOARD_VNDK_VERSION", "") } + ctx.Strict("VNDK_CORE_LIBRARIES", strings.Join(vndkCoreLibraries, " ")) + ctx.Strict("VNDK_SAMEPROCESS_LIBRARIES", strings.Join(vndkSpLibraries, " ")) + ctx.Strict("LLNDK_LIBRARIES", strings.Join(llndkLibraries, " ")) + ctx.Strict("ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS", strings.Join(asanCflags, " ")) ctx.Strict("ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS", strings.Join(asanLdflags, " ")) ctx.Strict("ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES", strings.Join(asanLibs, " ")) @@ -72,7 +72,7 @@ func (sabimod *sabi) flags(ctx ModuleContext, flags Flags) Flags { func sabiDepsMutator(mctx android.TopDownMutatorContext) { if c, ok := mctx.Module().(*Module); ok && - (c.isVndk() || inList(c.Name(), config.LLndkLibraries()) || + (c.isVndk() || inList(c.Name(), llndkLibraries) || (c.sabi != nil && c.sabi.Properties.CreateSAbiDumps)) { mctx.VisitDirectDeps(func(m blueprint.Module) { tag := mctx.OtherModuleDependencyTag(m) @@ -131,3 +131,10 @@ func addPrefix(list []string, prefix string) []string { } return list } + +func addSuffix(list []string, suffix string) []string { + for i := range list { + list[i] = list[i] + suffix + } + return list +} @@ -15,6 +15,9 @@ package cc import ( + "strings" + "sync" + "android/soong/android" ) @@ -96,3 +99,38 @@ func (vndk *vndkdep) vndkCheckLinkType(ctx android.ModuleContext, to *Module) { return } } + +var ( + vndkCoreLibraries []string + vndkSpLibraries []string + llndkLibraries []string + vndkLibrariesLock sync.Mutex +) + +// gather list of vndk-core, vndk-sp, and ll-ndk libs +func vndkMutator(mctx android.BottomUpMutatorContext) { + if m, ok := mctx.Module().(*Module); ok { + if _, ok := m.linker.(*llndkStubDecorator); ok { + vndkLibrariesLock.Lock() + defer vndkLibrariesLock.Unlock() + name := strings.TrimSuffix(m.Name(), llndkLibrarySuffix) + if !inList(name, llndkLibraries) { + llndkLibraries = append(llndkLibraries, name) + } + } else if lib, ok := m.linker.(*libraryDecorator); ok && lib.shared() { + if m.vndkdep.isVndk() { + vndkLibrariesLock.Lock() + defer vndkLibrariesLock.Unlock() + if m.vndkdep.isVndkSp() { + if !inList(m.Name(), vndkSpLibraries) { + vndkSpLibraries = append(vndkSpLibraries, m.Name()) + } + } else { + if !inList(m.Name(), vndkCoreLibraries) { + vndkCoreLibraries = append(vndkCoreLibraries, m.Name()) + } + } + } + } + } +} |