aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Gaston <jeffrygaston@google.com>2017-09-27 17:01:44 -0700
committerColin Cross <ccross@android.com>2017-10-18 18:06:02 +0000
commitaf3cc2d23c4473828c9e4596bce36c2ba762e992 (patch)
tree7db84020037e4f83ff17fae7e033dfb85c46987e
parent16b9ce4dff7d522aca993b38e4e44be309ba658b (diff)
downloadbuild_soong-af3cc2d23c4473828c9e4596bce36c2ba762e992.tar.gz
build_soong-af3cc2d23c4473828c9e4596bce36c2ba762e992.tar.bz2
build_soong-af3cc2d23c4473828c9e4596bce36c2ba762e992.zip
Some clarifications in preparation to automatically order linker dependencies
Test: Browse the code and determine whether it's easier to understand Bug: 66260943 Change-Id: I88c24a8a31ef68f428919087d206433659265684
-rw-r--r--android/module.go8
-rw-r--r--android/mutator.go13
-rw-r--r--android/paths.go2
-rw-r--r--cc/androidmk.go10
-rw-r--r--cc/binary.go2
-rw-r--r--cc/builder.go8
-rw-r--r--cc/cc.go331
-rw-r--r--cc/compiler.go12
-rw-r--r--cc/installer.go2
-rw-r--r--cc/library.go6
-rw-r--r--cc/linker.go6
-rw-r--r--cc/object.go2
-rw-r--r--cc/proto.go4
-rw-r--r--cc/relocation_packer.go2
-rw-r--r--cc/rs.go2
-rw-r--r--cc/sabi.go2
-rw-r--r--cc/sanitize.go4
-rw-r--r--cc/stl.go2
-rw-r--r--cc/test.go2
19 files changed, 214 insertions, 206 deletions
diff --git a/android/module.go b/android/module.go
index 9d7f9420..9afc8a7c 100644
--- a/android/module.go
+++ b/android/module.go
@@ -61,7 +61,7 @@ type androidBaseContext interface {
Windows() bool
Debug() bool
PrimaryArch() bool
- Vendor() bool
+ InstallOnVendorPartition() bool
AConfig() Config
DeviceConfig() DeviceConfig
}
@@ -99,7 +99,11 @@ type ModuleContext interface {
type Module interface {
blueprint.Module
+ // GenerateAndroidBuildActions is analogous to Blueprints' GenerateBuildActions,
+ // but GenerateAndroidBuildActions also has access to Android-specific information.
+ // For more information, see Module.GenerateBuildActions within Blueprint's module_ctx.go
GenerateAndroidBuildActions(ModuleContext)
+
DepsMutator(BottomUpMutatorContext)
base() *ModuleBase
@@ -690,7 +694,7 @@ func (a *androidBaseContextImpl) DeviceConfig() DeviceConfig {
return DeviceConfig{a.config.deviceConfig}
}
-func (a *androidBaseContextImpl) Vendor() bool {
+func (a *androidBaseContextImpl) InstallOnVendorPartition() bool {
return a.vendor
}
diff --git a/android/mutator.go b/android/mutator.go
index 04407eb3..66a1bad1 100644
--- a/android/mutator.go
+++ b/android/mutator.go
@@ -18,12 +18,13 @@ import (
"github.com/google/blueprint"
)
-// Mutator phases:
-// Pre-arch
-// Arch
-// Pre-deps
-// Deps
-// PostDeps
+// Phases:
+// run Pre-arch mutators
+// run archMutator
+// run Pre-deps mutators
+// run depsMutator
+// run PostDeps mutators
+// continue on to GenerateAndroidBuildActions
func registerMutatorsToContext(ctx *blueprint.Context, mutators []*mutator) {
for _, t := range mutators {
diff --git a/android/paths.go b/android/paths.go
index 09f760a5..f88d650f 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -739,7 +739,7 @@ func PathForModuleInstall(ctx ModuleInstallPathContext, pathComponents ...string
var partition string
if ctx.InstallInData() {
partition = "data"
- } else if ctx.Vendor() {
+ } else if ctx.InstallOnVendorPartition() {
partition = ctx.DeviceConfig().VendorPath()
} else {
partition = "system"
diff --git a/cc/androidmk.go b/cc/androidmk.go
index 2114031f..194faaba 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -30,7 +30,7 @@ var (
type AndroidMkContext interface {
Target() android.Target
subAndroidMk(*android.AndroidMkData, interface{})
- vndk() bool
+ useVndk() bool
}
type subAndroidMkProvider interface {
@@ -64,14 +64,14 @@ func (c *Module) AndroidMk() android.AndroidMkData {
if len(c.Properties.AndroidMkSharedLibs) > 0 {
fmt.Fprintln(w, "LOCAL_SHARED_LIBRARIES := "+strings.Join(c.Properties.AndroidMkSharedLibs, " "))
}
- if c.Target().Os == android.Android && c.Properties.Sdk_version != "" && !c.vndk() {
+ if c.Target().Os == android.Android && c.Properties.Sdk_version != "" && !c.useVndk() {
fmt.Fprintln(w, "LOCAL_SDK_VERSION := "+c.Properties.Sdk_version)
fmt.Fprintln(w, "LOCAL_NDK_STL_VARIANT := none")
} else {
// These are already included in LOCAL_SHARED_LIBRARIES
fmt.Fprintln(w, "LOCAL_CXX_STL := none")
}
- if c.vndk() {
+ if c.useVndk() {
fmt.Fprintln(w, "LOCAL_USE_VNDK := true")
}
},
@@ -89,7 +89,7 @@ func (c *Module) AndroidMk() android.AndroidMkData {
}
c.subAndroidMk(&ret, c.installer)
- if c.vndk() && c.hasVendorVariant() {
+ if c.useVndk() && c.hasVendorVariant() {
// .vendor suffix is added only when we will have two variants: core and vendor.
// The suffix is not added for vendor-only module.
ret.SubName += vendorSuffix
@@ -161,7 +161,7 @@ func (library *libraryDecorator) AndroidMk(ctx AndroidMkContext, ret *android.An
}
fmt.Fprintln(w, "LOCAL_MODULE_HOST_OS :=", makeOs)
fmt.Fprintln(w, "LOCAL_IS_HOST_MODULE := true")
- } else if ctx.vndk() {
+ } else if ctx.useVndk() {
fmt.Fprintln(w, "LOCAL_USE_VNDK := true")
}
diff --git a/cc/binary.go b/cc/binary.go
index b2405b6f..30e017f4 100644
--- a/cc/binary.go
+++ b/cc/binary.go
@@ -108,7 +108,7 @@ func (binary *binaryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
deps = binary.baseLinker.linkerDeps(ctx, deps)
if ctx.toolchain().Bionic() {
if !Bool(binary.baseLinker.Properties.Nocrt) {
- if !ctx.sdk() {
+ if !ctx.useSdk() {
if binary.static() {
deps.CrtBegin = "crtbegin_static"
} else {
diff --git a/cc/builder.go b/cc/builder.go
index b5bdc3d3..742f7fbf 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -219,7 +219,7 @@ type builderFlags struct {
arFlags string
asFlags string
cFlags string
- toolingCFlags string // Seperate set of Cflags for clang LibTooling tools
+ toolingCFlags string // A separate set of Cflags for clang LibTooling tools
conlyFlags string
cppFlags string
ldFlags string
@@ -584,7 +584,7 @@ func transformDarwinObjToStaticLib(ctx android.ModuleContext, objFiles android.P
}
// Generate a rule for compiling multiple .o files, plus static libraries, whole static libraries,
-// and shared libraires, to a shared library (.so) or dynamic executable
+// and shared libraries, to a shared library (.so) or dynamic executable
func TransformObjToDynamicBinary(ctx android.ModuleContext,
objFiles, sharedLibs, staticLibs, lateStaticLibs, wholeStaticLibs, deps android.Paths,
crtBegin, crtEnd android.OptionalPath, groupLate bool, flags builderFlags, outputFile android.WritablePath) {
@@ -714,8 +714,8 @@ func SourceAbiDiff(ctx android.ModuleContext, inputDump android.Path, referenceD
return android.OptionalPathForPath(outputFile)
}
-// Generate a rule for extract a table of contents from a shared library (.so)
-func TransformSharedObjectToToc(ctx android.ModuleContext, inputFile android.WritablePath,
+// Generate a rule for extracting a table of contents from a shared library (.so)
+func TransformSharedObjectToToc(ctx android.ModuleContext, inputFile android.Path,
outputFile android.WritablePath, flags builderFlags) {
crossCompile := gccCmd(flags.toolchain, "")
diff --git a/cc/cc.go b/cc/cc.go
index 4c02e9e2..2fafaa29 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -197,9 +197,9 @@ type ModuleContextIntf interface {
clang() bool
toolchain() config.Toolchain
noDefaultCompilerFlags() bool
- sdk() bool
+ useSdk() bool
sdkVersion() string
- vndk() bool
+ useVndk() bool
isVndk() bool
isVndkSp() bool
createVndkSourceAbiDump() bool
@@ -382,7 +382,7 @@ func (c *Module) isDependencyRoot() bool {
return false
}
-func (c *Module) vndk() bool {
+func (c *Module) useVndk() bool {
return c.Properties.UseVndk
}
@@ -414,10 +414,8 @@ type moduleContext struct {
moduleContextImpl
}
-// Vendor returns true for vendor modules excluding VNDK libraries so that
-// they get installed onto the correct partition
-func (ctx *moduleContext) Vendor() bool {
- return ctx.ModuleContext.Vendor() || (ctx.mod.vndk() && !ctx.mod.isVndk())
+func (ctx *moduleContext) InstallOnVendorPartition() bool {
+ return ctx.ModuleContext.InstallOnVendorPartition() || (ctx.mod.useVndk() && !ctx.mod.isVndk())
}
type moduleContextImpl struct {
@@ -455,8 +453,8 @@ func (ctx *moduleContextImpl) noDefaultCompilerFlags() bool {
return Bool(ctx.mod.Properties.No_default_compiler_flags)
}
-func (ctx *moduleContextImpl) sdk() bool {
- if ctx.ctx.Device() && !ctx.vndk() {
+func (ctx *moduleContextImpl) useSdk() bool {
+ if ctx.ctx.Device() && !ctx.useVndk() {
return ctx.mod.Properties.Sdk_version != ""
}
return false
@@ -464,7 +462,7 @@ func (ctx *moduleContextImpl) sdk() bool {
func (ctx *moduleContextImpl) sdkVersion() string {
if ctx.ctx.Device() {
- if ctx.vndk() {
+ if ctx.useVndk() {
return "current"
} else {
return ctx.mod.Properties.Sdk_version
@@ -473,13 +471,12 @@ func (ctx *moduleContextImpl) sdkVersion() string {
return ""
}
-func (ctx *moduleContextImpl) vndk() bool {
- return ctx.mod.vndk()
-}
-
func (ctx *moduleContextImpl) isVndk() bool {
return ctx.mod.isVndk()
}
+func (ctx *moduleContextImpl) useVndk() bool {
+ return ctx.mod.useVndk()
+}
func (ctx *moduleContextImpl) isVndkSp() bool {
if vndk := ctx.mod.vndkdep; vndk != nil {
@@ -490,7 +487,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.vndk() && ctx.isVndk()) || inList(ctx.baseModuleName(), llndkLibraries))
+ return ctx.ctx.Device() && ((ctx.useVndk() && ctx.isVndk()) || inList(ctx.baseModuleName(), llndkLibraries))
}
func (ctx *moduleContextImpl) selectedStl() string {
@@ -544,6 +541,7 @@ func (c *Module) Name() string {
}
func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
+
ctx := &moduleContext{
ModuleContext: actx,
moduleContextImpl: moduleContextImpl{
@@ -669,7 +667,7 @@ func (c *Module) begin(ctx BaseModuleContext) {
for _, feature := range c.features {
feature.begin(ctx)
}
- if ctx.sdk() {
+ if ctx.useSdk() {
version, err := normalizeNdkApiLevel(ctx, ctx.sdkVersion(), ctx.Arch())
if err != nil {
ctx.PropertyErrorf("sdk_version", err.Error())
@@ -781,27 +779,31 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
if ctx.Os() == android.Android {
version := ctx.sdkVersion()
- // Rewrites the names of shared libraries into the names of the NDK
- // libraries where appropriate. This returns two slices.
+ // rewriteNdkLibs takes a list of names of shared libraries and scans it for three types
+ // of names:
//
- // The first is a list of non-variant shared libraries (either rewritten
- // NDK libraries to the modules in prebuilts/ndk, or not rewritten
- // because they are not NDK libraries).
+ // 1. Name of an NDK library that refers to a prebuilt module.
+ // For each of these, it adds the name of the prebuilt module (which will be in
+ // prebuilts/ndk) to the list of nonvariant libs.
+ // 2. Name of an NDK library that refers to an ndk_library module.
+ // For each of these, it adds the name of the ndk_library module to the list of
+ // variant libs.
+ // 3. Anything else (so anything that isn't an NDK library).
+ // It adds these to the nonvariantLibs list.
//
- // The second is a list of ndk_library modules. These need to be
- // separated because they are a variation dependency and must be added
- // in a different manner.
- rewriteNdkLibs := func(list []string) ([]string, []string) {
- variantLibs := []string{}
- nonvariantLibs := []string{}
+ // The caller can then know to add the variantLibs dependencies differently from the
+ // nonvariantLibs
+ rewriteNdkLibs := func(list []string) (nonvariantLibs []string, variantLibs []string) {
+ variantLibs = []string{}
+ nonvariantLibs = []string{}
for _, entry := range list {
- if ctx.sdk() && inList(entry, ndkPrebuiltSharedLibraries) {
+ if ctx.useSdk() && inList(entry, ndkPrebuiltSharedLibraries) {
if !inList(entry, ndkMigratedLibs) {
nonvariantLibs = append(nonvariantLibs, entry+".ndk."+version)
} else {
variantLibs = append(variantLibs, entry+ndkLibrarySuffix)
}
- } else if ctx.vndk() && inList(entry, llndkLibraries) {
+ } else if ctx.useVndk() && inList(entry, llndkLibraries) {
nonvariantLibs = append(nonvariantLibs, entry+llndkLibrarySuffix)
} else {
nonvariantLibs = append(nonvariantLibs, entry)
@@ -903,117 +905,118 @@ func (c *Module) clang(ctx BaseModuleContext) bool {
return clang
}
-// Convert dependencies to paths. Returns a PathDeps containing paths
-func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
- var depPaths PathDeps
-
- // Whether a module can link to another module, taking into
- // account NDK linking.
- checkLinkType := func(from, to *Module) {
- if from.Target().Os != android.Android {
- // Host code is not restricted
- return
- }
- if from.Properties.UseVndk {
- // Though vendor code is limited by the vendor mutator,
- // each vendor-available module needs to check
- // link-type for VNDK.
- if from.vndkdep != nil {
- from.vndkdep.vndkCheckLinkType(ctx, to)
- }
- return
- }
- if from.Properties.Sdk_version == "" {
- // Platform code can link to anything
- return
- }
- if _, ok := to.linker.(*toolchainLibraryDecorator); ok {
- // These are always allowed
- return
- }
- if _, ok := to.linker.(*ndkPrebuiltLibraryLinker); ok {
- // These are allowed, but don't set sdk_version
- return
- }
- if _, ok := to.linker.(*ndkPrebuiltStlLinker); ok {
- // These are allowed, but don't set sdk_version
- return
- }
- if _, ok := to.linker.(*stubDecorator); ok {
- // These aren't real libraries, but are the stub shared libraries that are included in
- // the NDK.
- return
- }
- if to.Properties.Sdk_version == "" {
- // NDK code linking to platform code is never okay.
- ctx.ModuleErrorf("depends on non-NDK-built library %q",
- ctx.OtherModuleName(to))
+// Whether a module can link to another module, taking into
+// account NDK linking.
+func checkLinkType(ctx android.ModuleContext, from *Module, to *Module) {
+ if from.Target().Os != android.Android {
+ // Host code is not restricted
+ return
+ }
+ if from.Properties.UseVndk {
+ // Though vendor code is limited by the vendor mutator,
+ // each vendor-available module needs to check
+ // link-type for VNDK.
+ if from.vndkdep != nil {
+ from.vndkdep.vndkCheckLinkType(ctx, to)
}
+ return
+ }
+ if from.Properties.Sdk_version == "" {
+ // Platform code can link to anything
+ return
+ }
+ if _, ok := to.linker.(*toolchainLibraryDecorator); ok {
+ // These are always allowed
+ return
+ }
+ if _, ok := to.linker.(*ndkPrebuiltLibraryLinker); ok {
+ // These are allowed, but they don't set sdk_version
+ return
+ }
+ if _, ok := to.linker.(*ndkPrebuiltStlLinker); ok {
+ // These are allowed, but they don't set sdk_version
+ return
+ }
+ if _, ok := to.linker.(*stubDecorator); ok {
+ // These aren't real libraries, but are the stub shared libraries that are included in
+ // the NDK.
+ return
+ }
+ if to.Properties.Sdk_version == "" {
+ // NDK code linking to platform code is never okay.
+ ctx.ModuleErrorf("depends on non-NDK-built library %q",
+ ctx.OtherModuleName(to))
+ }
- // All this point we know we have two NDK libraries, but we need to
- // check that we're not linking against anything built against a higher
- // API level, as it is only valid to link against older or equivalent
- // APIs.
+ // At this point we know we have two NDK libraries, but we need to
+ // check that we're not linking against anything built against a higher
+ // API level, as it is only valid to link against older or equivalent
+ // APIs.
- if from.Properties.Sdk_version == "current" {
- // Current can link against anything.
- return
- } else if to.Properties.Sdk_version == "current" {
- // Current can't be linked against by anything else.
- ctx.ModuleErrorf("links %q built against newer API version %q",
- ctx.OtherModuleName(to), "current")
- }
+ if from.Properties.Sdk_version == "current" {
+ // Current can link against anything.
+ return
+ } else if to.Properties.Sdk_version == "current" {
+ // Current can't be linked against by anything else.
+ ctx.ModuleErrorf("links %q built against newer API version %q",
+ ctx.OtherModuleName(to), "current")
+ }
- fromApi, err := strconv.Atoi(from.Properties.Sdk_version)
- if err != nil {
- ctx.PropertyErrorf("sdk_version",
- "Invalid sdk_version value (must be int): %q",
- from.Properties.Sdk_version)
- }
- toApi, err := strconv.Atoi(to.Properties.Sdk_version)
- if err != nil {
- ctx.PropertyErrorf("sdk_version",
- "Invalid sdk_version value (must be int): %q",
- to.Properties.Sdk_version)
- }
+ fromApi, err := strconv.Atoi(from.Properties.Sdk_version)
+ if err != nil {
+ ctx.PropertyErrorf("sdk_version",
+ "Invalid sdk_version value (must be int): %q",
+ from.Properties.Sdk_version)
+ }
+ toApi, err := strconv.Atoi(to.Properties.Sdk_version)
+ if err != nil {
+ ctx.PropertyErrorf("sdk_version",
+ "Invalid sdk_version value (must be int): %q",
+ to.Properties.Sdk_version)
+ }
- if toApi > fromApi {
- ctx.ModuleErrorf("links %q built against newer API version %q",
- ctx.OtherModuleName(to), to.Properties.Sdk_version)
- }
+ if toApi > fromApi {
+ ctx.ModuleErrorf("links %q built against newer API version %q",
+ ctx.OtherModuleName(to), to.Properties.Sdk_version)
}
+}
- ctx.VisitDirectDeps(func(m blueprint.Module) {
- name := ctx.OtherModuleName(m)
- tag := ctx.OtherModuleDependencyTag(m)
+// Convert dependencies to paths. Returns a PathDeps containing paths
+func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
+ var depPaths PathDeps
- a, _ := m.(android.Module)
- if a == nil {
- ctx.ModuleErrorf("module %q not an android module", name)
+ ctx.VisitDirectDeps(func(dep blueprint.Module) {
+ depName := ctx.OtherModuleName(dep)
+ depTag := ctx.OtherModuleDependencyTag(dep)
+
+ aDep, _ := dep.(android.Module)
+ if aDep == nil {
+ ctx.ModuleErrorf("module %q not an android module", depName)
return
}
- cc, _ := m.(*Module)
- if cc == nil {
- switch tag {
+ ccDep, _ := dep.(*Module)
+ if ccDep == nil {
+ // handling for a few module types that aren't cc Module but that are also supported
+ switch depTag {
case android.DefaultsDepTag, android.SourceDepTag:
// Nothing to do
case genSourceDepTag:
- if genRule, ok := m.(genrule.SourceFileGenerator); ok {
+ if genRule, ok := dep.(genrule.SourceFileGenerator); ok {
depPaths.GeneratedSources = append(depPaths.GeneratedSources,
genRule.GeneratedSourceFiles()...)
} else {
- ctx.ModuleErrorf("module %q is not a gensrcs or genrule", name)
+ ctx.ModuleErrorf("module %q is not a gensrcs or genrule", depName)
}
// Support exported headers from a generated_sources dependency
fallthrough
case genHeaderDepTag, genHeaderExportDepTag:
- if genRule, ok := m.(genrule.SourceFileGenerator); ok {
+ if genRule, ok := dep.(genrule.SourceFileGenerator); ok {
depPaths.GeneratedHeaders = append(depPaths.GeneratedHeaders,
genRule.GeneratedSourceFiles()...)
flags := includeDirsToFlags(genRule.GeneratedHeaderDirs())
depPaths.Flags = append(depPaths.Flags, flags)
- if tag == genHeaderExportDepTag {
+ if depTag == genHeaderExportDepTag {
depPaths.ReexportedFlags = append(depPaths.ReexportedFlags, flags)
depPaths.ReexportedFlagsDeps = append(depPaths.ReexportedFlagsDeps,
genRule.GeneratedSourceFiles()...)
@@ -1022,46 +1025,46 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
}
} else {
- ctx.ModuleErrorf("module %q is not a genrule", name)
+ ctx.ModuleErrorf("module %q is not a genrule", depName)
}
case linkerScriptDepTag:
- if genRule, ok := m.(genrule.SourceFileGenerator); ok {
+ if genRule, ok := dep.(genrule.SourceFileGenerator); ok {
files := genRule.GeneratedSourceFiles()
if len(files) == 1 {
depPaths.LinkerScript = android.OptionalPathForPath(files[0])
} else if len(files) > 1 {
- ctx.ModuleErrorf("module %q can only generate a single file if used for a linker script", name)
+ ctx.ModuleErrorf("module %q can only generate a single file if used for a linker script", depName)
}
} else {
- ctx.ModuleErrorf("module %q is not a genrule", name)
+ ctx.ModuleErrorf("module %q is not a genrule", depName)
}
default:
- ctx.ModuleErrorf("depends on non-cc module %q", name)
+ ctx.ModuleErrorf("depends on non-cc module %q", depName)
}
return
}
- if !a.Enabled() {
+ // some validation
+ if !aDep.Enabled() {
if ctx.AConfig().AllowMissingDependencies() {
- ctx.AddMissingDependencies([]string{name})
+ ctx.AddMissingDependencies([]string{depName})
} else {
- ctx.ModuleErrorf("depends on disabled module %q", name)
+ ctx.ModuleErrorf("depends on disabled module %q", depName)
}
return
}
-
- if a.Target().Os != ctx.Os() {
- ctx.ModuleErrorf("OS mismatch between %q and %q", ctx.ModuleName(), name)
+ if aDep.Target().Os != ctx.Os() {
+ ctx.ModuleErrorf("OS mismatch between %q and %q", ctx.ModuleName(), depName)
return
}
-
- if a.Target().Arch.ArchType != ctx.Arch().ArchType {
- ctx.ModuleErrorf("Arch mismatch between %q and %q", ctx.ModuleName(), name)
+ if aDep.Target().Arch.ArchType != ctx.Arch().ArchType {
+ ctx.ModuleErrorf("Arch mismatch between %q and %q", ctx.ModuleName(), depName)
return
}
- if tag == reuseObjTag {
- if l, ok := cc.compiler.(libraryInterface); ok {
+ // re-exporting flags
+ if depTag == reuseObjTag {
+ if l, ok := ccDep.compiler.(libraryInterface); ok {
objs, flags, deps := l.reuseObjs()
depPaths.Objs = depPaths.Objs.Append(objs)
depPaths.ReexportedFlags = append(depPaths.ReexportedFlags, flags...)
@@ -1069,9 +1072,8 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
return
}
}
-
- if t, ok := tag.(dependencyTag); ok && t.library {
- if i, ok := cc.linker.(exportedFlagsProducer); ok {
+ if t, ok := depTag.(dependencyTag); ok && t.library {
+ if i, ok := ccDep.linker.(exportedFlagsProducer); ok {
flags := i.exportedFlags()
deps := i.exportedFlagsDeps()
depPaths.Flags = append(depPaths.Flags, flags...)
@@ -1087,38 +1089,38 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
}
}
- checkLinkType(c, cc)
+ checkLinkType(ctx, c, ccDep)
}
var ptr *android.Paths
var depPtr *android.Paths
- linkFile := cc.outputFile
+ linkFile := ccDep.outputFile
depFile := android.OptionalPath{}
- switch tag {
+ switch depTag {
case ndkStubDepTag, sharedDepTag, sharedExportDepTag:
ptr = &depPaths.SharedLibs
depPtr = &depPaths.SharedLibsDeps
- depFile = cc.linker.(libraryInterface).toc()
+ depFile = ccDep.linker.(libraryInterface).toc()
case lateSharedDepTag, ndkLateStubDepTag:
ptr = &depPaths.LateSharedLibs
depPtr = &depPaths.LateSharedLibsDeps
- depFile = cc.linker.(libraryInterface).toc()
+ depFile = ccDep.linker.(libraryInterface).toc()
case staticDepTag, staticExportDepTag:
ptr = &depPaths.StaticLibs
case lateStaticDepTag:
ptr = &depPaths.LateStaticLibs
case wholeStaticDepTag:
ptr = &depPaths.WholeStaticLibs
- staticLib, ok := cc.linker.(libraryInterface)
+ staticLib, ok := ccDep.linker.(libraryInterface)
if !ok || !staticLib.static() {
- ctx.ModuleErrorf("module %q not a static library", name)
+ ctx.ModuleErrorf("module %q not a static library", depName)
return
}
if missingDeps := staticLib.getWholeStaticMissingDeps(); missingDeps != nil {
- postfix := " (required by " + ctx.OtherModuleName(m) + ")"
+ postfix := " (required by " + ctx.OtherModuleName(dep) + ")"
for i := range missingDeps {
missingDeps[i] += postfix
}
@@ -1135,11 +1137,11 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
depPaths.CrtEnd = linkFile
}
- switch tag {
+ switch depTag {
case staticDepTag, staticExportDepTag, lateStaticDepTag:
- staticLib, ok := cc.linker.(libraryInterface)
+ staticLib, ok := ccDep.linker.(libraryInterface)
if !ok || !staticLib.static() {
- ctx.ModuleErrorf("module %q not a static library", name)
+ ctx.ModuleErrorf("module %q not a static library", depName)
return
}
@@ -1150,11 +1152,12 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
staticLib.objs().coverageFiles...)
depPaths.StaticLibObjs.sAbiDumpFiles = append(depPaths.StaticLibObjs.sAbiDumpFiles,
staticLib.objs().sAbiDumpFiles...)
+
}
if ptr != nil {
if !linkFile.Valid() {
- ctx.ModuleErrorf("module %q missing output file", name)
+ ctx.ModuleErrorf("module %q missing output file", depName)
return
}
*ptr = append(*ptr, linkFile.Path())
@@ -1168,24 +1171,24 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
*depPtr = append(*depPtr, dep.Path())
}
- // Export the shared libs to the make world. In doing so, .vendor suffix
- // is added if the lib has both core and vendor variants and this module
- // is building against vndk. This is because the vendor variant will
- // have .vendor suffix in its name in the make world. However, if the
- // lib is a vendor-only lib or this lib is not building against vndk,
- // then the suffix is not added.
- switch tag {
+ // Export the shared libs to Make.
+ switch depTag {
case sharedDepTag, sharedExportDepTag, lateSharedDepTag:
- libName := strings.TrimSuffix(name, llndkLibrarySuffix)
+ libName := strings.TrimSuffix(depName, llndkLibrarySuffix)
libName = strings.TrimPrefix(libName, "prebuilt_")
isLLndk := inList(libName, llndkLibraries)
- if c.vndk() && (cc.hasVendorVariant() || isLLndk) {
- libName += vendorSuffix
+ var makeLibName string
+ bothVendorAndCoreVariantsExist := ccDep.hasVendorVariant() || isLLndk
+ if c.useVndk() && bothVendorAndCoreVariantsExist {
+ // The vendor module in Make will have been renamed to not conflict with the core
+ // module, so update the dependency name here accordingly.
+ makeLibName = libName + vendorSuffix
+ } else {
+ makeLibName = libName
}
// Note: the order of libs in this list is not important because
- // they merely serve as dependencies in the make world and do not
- // affect this lib itself.
- c.Properties.AndroidMkSharedLibs = append(c.Properties.AndroidMkSharedLibs, libName)
+ // they merely serve as Make dependencies and do not affect this lib itself.
+ c.Properties.AndroidMkSharedLibs = append(c.Properties.AndroidMkSharedLibs, makeLibName)
}
})
@@ -1318,7 +1321,7 @@ func vendorMutator(mctx android.BottomUpMutatorContext) {
mctx.CreateVariations(coreMode)
} else if Bool(props.Vendor_available) {
mctx.CreateVariations(coreMode, vendorMode)
- } else if mctx.Vendor() {
+ } else if mctx.InstallOnVendorPartition() {
mctx.CreateVariations(vendorMode)
} else {
mctx.CreateVariations(coreMode)
@@ -1332,7 +1335,7 @@ func vendorMutator(mctx android.BottomUpMutatorContext) {
}
// Sanity check
- if m.VendorProperties.Vendor_available != nil && mctx.Vendor() {
+ if m.VendorProperties.Vendor_available != nil && mctx.InstallOnVendorPartition() {
mctx.PropertyErrorf("vendor_available",
"doesn't make sense at the same time as `vendor: true` or `proprietary: true`")
return
@@ -1365,7 +1368,7 @@ func vendorMutator(mctx android.BottomUpMutatorContext) {
vendor := mod[1].(*Module)
vendor.Properties.UseVndk = true
squashVendorSrcs(vendor)
- } else if mctx.Vendor() && m.Properties.Sdk_version == "" {
+ } else if mctx.InstallOnVendorPartition() && m.Properties.Sdk_version == "" {
// This will be available in /vendor only
mod := mctx.CreateVariations(vendorMode)
vendor := mod[0].(*Module)
@@ -1396,8 +1399,8 @@ outer:
return list[:k]
}
-// lastUniqueElements returns all unique elements of a slice, keeping the last copy of each
-// modifies the slice contents in place, and returns a subslice of the original slice
+// lastUniqueElements returns all unique elements of a slice, keeping the last copy of each.
+// It modifies the slice contents in place, and returns a subslice of the original slice
func lastUniqueElements(list []string) []string {
totalSkip := 0
for i := len(list) - 1; i >= totalSkip; i-- {
diff --git a/cc/compiler.go b/cc/compiler.go
index 3b3bbbb1..102bc7a4 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -236,7 +236,7 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag
flags.GlobalFlags = append(flags.GlobalFlags, "-I"+android.PathForModuleSrc(ctx).String())
flags.YasmFlags = append(flags.YasmFlags, "-I"+android.PathForModuleSrc(ctx).String())
- if !(ctx.sdk() || ctx.vndk()) || ctx.Host() {
+ if !(ctx.useSdk() || ctx.useVndk()) || ctx.Host() {
flags.SystemIncludeFlags = append(flags.SystemIncludeFlags,
"${config.CommonGlobalIncludes}",
tc.IncludeFlags(),
@@ -244,7 +244,7 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag
}
}
- if ctx.sdk() {
+ if ctx.useSdk() {
// The NDK headers are installed to a common sysroot. While a more
// typical Soong approach would be to only make the headers for the
// library you're using available, we're trying to emulate the NDK
@@ -272,7 +272,7 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag
flags.SystemIncludeFlags = append(flags.SystemIncludeFlags, "-isystem "+legacyIncludes)
}
- if ctx.vndk() {
+ if ctx.useVndk() {
flags.GlobalFlags = append(flags.GlobalFlags,
"-D__ANDROID_API__=__ANDROID_API_FUTURE__", "-D__ANDROID_VNDK__")
}
@@ -366,7 +366,7 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag
flags.GlobalFlags = append(flags.GlobalFlags, tc.ToolchainCflags())
}
- if !ctx.sdk() {
+ if !ctx.useSdk() {
cStd := config.CStdVersion
if compiler.Properties.C_std == "experimental" {
cStd = config.ExperimentalCStdVersion
@@ -405,7 +405,7 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag
flags.CppFlags = append([]string{"-std=" + cppStd}, flags.CppFlags...)
}
- if ctx.vndk() {
+ if ctx.useVndk() {
flags.CFlags = append(flags.CFlags, esc(compiler.Properties.Target.Vendor.Cflags)...)
}
@@ -478,7 +478,7 @@ func (compiler *baseCompiler) hasSrcExt(ext string) bool {
var gnuToCReplacer = strings.NewReplacer("gnu", "c")
func ndkPathDeps(ctx ModuleContext) android.Paths {
- if ctx.sdk() {
+ if ctx.useSdk() {
// The NDK sysroot timestamp file depends on all the NDK sysroot files
// (headers and libraries).
return android.Paths{getNdkSysrootTimestampFile(ctx)}
diff --git a/cc/installer.go b/cc/installer.go
index 027d191b..92076e50 100644
--- a/cc/installer.go
+++ b/cc/installer.go
@@ -69,7 +69,7 @@ func (installer *baseInstaller) installDir(ctx ModuleContext) android.OutputPath
if !ctx.Host() && !ctx.Arch().Native {
dir = filepath.Join(dir, ctx.Arch().ArchType.String())
}
- if installer.location == InstallInData && ctx.vndk() {
+ if installer.location == InstallInData && ctx.useVndk() {
dir = filepath.Join(dir, "vendor")
}
return android.PathForModuleInstall(ctx, dir, installer.subDir, installer.Properties.Relative_install_path, installer.relative)
diff --git a/cc/library.go b/cc/library.go
index 151b63d2..e963ecba 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -156,7 +156,7 @@ type flagExporter struct {
}
func (f *flagExporter) exportedIncludes(ctx ModuleContext) android.Paths {
- if ctx.vndk() && f.Properties.Target.Vendor.Export_include_dirs != nil {
+ if ctx.useVndk() && f.Properties.Target.Vendor.Export_include_dirs != nil {
return android.PathsForModuleSrc(ctx, f.Properties.Target.Vendor.Export_include_dirs)
} else {
return android.PathsForModuleSrc(ctx, f.Properties.Export_include_dirs)
@@ -435,7 +435,7 @@ func (library *libraryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
deps.SharedLibs = append(deps.SharedLibs, library.Properties.Static.Shared_libs...)
} else if library.shared() {
if ctx.toolchain().Bionic() && !Bool(library.baseLinker.Properties.Nocrt) {
- if !ctx.sdk() {
+ if !ctx.useSdk() {
deps.CrtBegin = "crtbegin_so"
deps.CrtEnd = "crtend_so"
} else {
@@ -698,7 +698,7 @@ func (library *libraryDecorator) toc() android.OptionalPath {
func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) {
if library.shared() {
if ctx.Device() {
- if ctx.vndk() {
+ if ctx.useVndk() {
if ctx.isVndkSp() {
library.baseInstaller.subDir = "vndk-sp"
} else if ctx.isVndk() {
diff --git a/cc/linker.go b/cc/linker.go
index 02d3ba5b..6ec56307 100644
--- a/cc/linker.go
+++ b/cc/linker.go
@@ -132,7 +132,7 @@ func (linker *baseLinker) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
deps.ReexportSharedLibHeaders = append(deps.ReexportSharedLibHeaders, linker.Properties.Export_shared_lib_headers...)
deps.ReexportGeneratedHeaders = append(deps.ReexportGeneratedHeaders, linker.Properties.Export_generated_headers...)
- if ctx.vndk() {
+ if ctx.useVndk() {
deps.SharedLibs = removeListFromList(deps.SharedLibs, linker.Properties.Target.Vendor.Exclude_shared_libs)
deps.ReexportSharedLibHeaders = removeListFromList(deps.ReexportSharedLibHeaders, linker.Properties.Target.Vendor.Exclude_shared_libs)
}
@@ -174,7 +174,7 @@ func (linker *baseLinker) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
}
deps.LateSharedLibs = append(deps.LateSharedLibs, systemSharedLibs...)
- } else if ctx.sdk() || ctx.vndk() {
+ } else if ctx.useSdk() || ctx.useVndk() {
deps.LateSharedLibs = append(deps.LateSharedLibs, "libc", "libm", "libdl")
}
}
@@ -242,7 +242,7 @@ func (linker *baseLinker) linkerFlags(ctx ModuleContext, flags Flags) Flags {
}
}
- if ctx.sdk() && (ctx.Arch().ArchType != android.Mips && ctx.Arch().ArchType != android.Mips64) {
+ if ctx.useSdk() && (ctx.Arch().ArchType != android.Mips && ctx.Arch().ArchType != android.Mips64) {
// The bionic linker now has support gnu style hashes (which are much faster!), but shipping
// to older devices requires the old style hash. Fortunately, we can build with both and
// it'll work anywhere.
diff --git a/cc/object.go b/cc/object.go
index 59d523dd..402b1050 100644
--- a/cc/object.go
+++ b/cc/object.go
@@ -43,7 +43,7 @@ func objectFactory() android.Module {
}
func (object *objectLinker) appendLdflags(flags []string) {
- panic(fmt.Errorf("appendLdflags on object Linker not supported"))
+ panic(fmt.Errorf("appendLdflags on objectLinker not supported"))
}
func (object *objectLinker) linkerProps() []interface{} {
diff --git a/cc/proto.go b/cc/proto.go
index a01951fe..6e3cce74 100644
--- a/cc/proto.go
+++ b/cc/proto.go
@@ -60,14 +60,14 @@ func protoDeps(ctx BaseModuleContext, deps Deps, p *android.ProtoProperties, sta
switch proptools.String(p.Proto.Type) {
case "full":
- if ctx.sdk() {
+ if ctx.useSdk() {
lib = "libprotobuf-cpp-full-ndk"
static = true
} else {
lib = "libprotobuf-cpp-full"
}
case "lite", "":
- if ctx.sdk() {
+ if ctx.useSdk() {
lib = "libprotobuf-cpp-lite-ndk"
static = true
} else {
diff --git a/cc/relocation_packer.go b/cc/relocation_packer.go
index c9f82ba8..d9b367c7 100644
--- a/cc/relocation_packer.go
+++ b/cc/relocation_packer.go
@@ -56,7 +56,7 @@ func (p *relocationPacker) packingInit(ctx BaseModuleContext) {
if ctx.AConfig().Getenv("DISABLE_RELOCATION_PACKER") == "true" {
enabled = false
}
- if ctx.sdk() {
+ if ctx.useSdk() {
enabled = false
}
if p.Properties.Pack_relocations != nil &&
diff --git a/cc/rs.go b/cc/rs.go
index 976107ea..e7eb3bb5 100644
--- a/cc/rs.go
+++ b/cc/rs.go
@@ -82,7 +82,7 @@ func rsGenerateCpp(ctx android.ModuleContext, rsFiles android.Paths, rsFlags str
func rsFlags(ctx ModuleContext, flags Flags, properties *BaseCompilerProperties) Flags {
targetApi := proptools.String(properties.Renderscript.Target_api)
- if targetApi == "" && ctx.sdk() {
+ if targetApi == "" && ctx.useSdk() {
switch ctx.sdkVersion() {
case "current", "system_current", "test_current":
// Nothing
diff --git a/cc/sabi.go b/cc/sabi.go
index e45b0406..8086f5b6 100644
--- a/cc/sabi.go
+++ b/cc/sabi.go
@@ -79,7 +79,7 @@ func (sabimod *sabi) flags(ctx ModuleContext, flags Flags) Flags {
func sabiDepsMutator(mctx android.TopDownMutatorContext) {
if c, ok := mctx.Module().(*Module); ok &&
- ((c.isVndk() && c.vndk()) || inList(c.Name(), llndkLibraries) ||
+ ((c.isVndk() && c.useVndk()) || inList(c.Name(), llndkLibraries) ||
(c.sabi != nil && c.sabi.Properties.CreateSAbiDumps)) {
mctx.VisitDirectDeps(func(m blueprint.Module) {
tag := mctx.OtherModuleDependencyTag(m)
diff --git a/cc/sanitize.go b/cc/sanitize.go
index 090d4906..b8b5ffa5 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -128,7 +128,7 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) {
s := &sanitize.Properties.Sanitize
// Don't apply sanitizers to NDK code.
- if ctx.sdk() {
+ if ctx.useSdk() {
s.Never = true
}
@@ -421,7 +421,7 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags {
// When linking against VNDK, use the vendor variant of the runtime lib
sanitize.androidMkRuntimeLibrary = sanitize.runtimeLibrary
- if ctx.vndk() {
+ if ctx.useVndk() {
sanitize.androidMkRuntimeLibrary = sanitize.runtimeLibrary + vendorSuffix
}
}
diff --git a/cc/stl.go b/cc/stl.go
index 17cde596..347db991 100644
--- a/cc/stl.go
+++ b/cc/stl.go
@@ -42,7 +42,7 @@ func (stl *stl) begin(ctx BaseModuleContext) {
if stl.Properties.Stl != nil {
s = *stl.Properties.Stl
}
- if ctx.sdk() && ctx.Device() {
+ if ctx.useSdk() && ctx.Device() {
switch s {
case "":
return "ndk_system"
diff --git a/cc/test.go b/cc/test.go
index 12cc2adb..fa75f483 100644
--- a/cc/test.go
+++ b/cc/test.go
@@ -157,7 +157,7 @@ func (test *testDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
func (test *testDecorator) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
if test.gtest() {
- if ctx.sdk() && ctx.Device() {
+ if ctx.useSdk() && ctx.Device() {
switch ctx.selectedStl() {
case "ndk_libc++_shared", "ndk_libc++_static":
deps.StaticLibs = append(deps.StaticLibs, "libgtest_main_ndk_libcxx", "libgtest_ndk_libcxx")