|
@@ -31,6 +31,7 @@ import (
|
|
|
"android/soong/cc/config"
|
|
|
"android/soong/fuzz"
|
|
|
"android/soong/genrule"
|
|
|
+ "android/soong/multitree"
|
|
|
"android/soong/snapshot"
|
|
|
)
|
|
|
|
|
@@ -2184,6 +2185,24 @@ func AddSharedLibDependenciesWithVersions(ctx android.BottomUpMutatorContext, mo
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func GetApiImports(c LinkableInterface, actx android.BottomUpMutatorContext) multitree.ApiImportInfo {
|
|
|
+ apiImportInfo := multitree.ApiImportInfo{}
|
|
|
+
|
|
|
+ if c.Device() {
|
|
|
+ var apiImportModule []blueprint.Module
|
|
|
+ if actx.OtherModuleExists("api_imports") {
|
|
|
+ apiImportModule = actx.AddDependency(c, nil, "api_imports")
|
|
|
+ if len(apiImportModule) > 0 && apiImportModule[0] != nil {
|
|
|
+ apiInfo := actx.OtherModuleProvider(apiImportModule[0], multitree.ApiImportsProvider).(multitree.ApiImportInfo)
|
|
|
+ apiImportInfo = apiInfo
|
|
|
+ actx.SetProvider(multitree.ApiImportsProvider, apiInfo)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return apiImportInfo
|
|
|
+}
|
|
|
+
|
|
|
func GetSnapshot(c LinkableInterface, snapshotInfo **SnapshotInfo, actx android.BottomUpMutatorContext) SnapshotInfo {
|
|
|
// Only device modules with BOARD_VNDK_VERSION uses snapshot. Others use the zero value of
|
|
|
// SnapshotInfo, which provides no mappings.
|
|
@@ -2209,8 +2228,8 @@ func GetSnapshot(c LinkableInterface, snapshotInfo **SnapshotInfo, actx android.
|
|
|
return **snapshotInfo
|
|
|
}
|
|
|
|
|
|
-func RewriteSnapshotLib(lib string, snapshotMap map[string]string) string {
|
|
|
- if snapshot, ok := snapshotMap[lib]; ok {
|
|
|
+func GetReplaceModuleName(lib string, replaceMap map[string]string) string {
|
|
|
+ if snapshot, ok := replaceMap[lib]; ok {
|
|
|
return snapshot
|
|
|
}
|
|
|
|
|
@@ -2221,13 +2240,18 @@ func RewriteSnapshotLib(lib string, snapshotMap map[string]string) string {
|
|
|
// of names:
|
|
|
//
|
|
|
// 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.
|
|
|
+//
|
|
|
+// 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.
|
|
|
+//
|
|
|
+// 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.
|
|
|
+//
|
|
|
+// It adds these to the nonvariantLibs list.
|
|
|
//
|
|
|
// The caller can then know to add the variantLibs dependencies differently from the
|
|
|
// nonvariantLibs
|
|
@@ -2239,11 +2263,11 @@ func RewriteLibs(c LinkableInterface, snapshotInfo **SnapshotInfo, actx android.
|
|
|
// strip #version suffix out
|
|
|
name, _ := StubsLibNameAndVersion(entry)
|
|
|
if c.InRecovery() {
|
|
|
- nonvariantLibs = append(nonvariantLibs, RewriteSnapshotLib(entry, GetSnapshot(c, snapshotInfo, actx).SharedLibs))
|
|
|
+ nonvariantLibs = append(nonvariantLibs, GetReplaceModuleName(entry, GetSnapshot(c, snapshotInfo, actx).SharedLibs))
|
|
|
} else if c.UseSdk() && inList(name, *getNDKKnownLibs(config)) {
|
|
|
variantLibs = append(variantLibs, name+ndkLibrarySuffix)
|
|
|
} else if c.UseVndk() {
|
|
|
- nonvariantLibs = append(nonvariantLibs, RewriteSnapshotLib(entry, GetSnapshot(c, snapshotInfo, actx).SharedLibs))
|
|
|
+ nonvariantLibs = append(nonvariantLibs, GetReplaceModuleName(entry, GetSnapshot(c, snapshotInfo, actx).SharedLibs))
|
|
|
} else {
|
|
|
// put name#version back
|
|
|
nonvariantLibs = append(nonvariantLibs, entry)
|
|
@@ -2252,6 +2276,25 @@ func RewriteLibs(c LinkableInterface, snapshotInfo **SnapshotInfo, actx android.
|
|
|
return nonvariantLibs, variantLibs
|
|
|
}
|
|
|
|
|
|
+func updateDepsWithApiImports(deps Deps, apiImports multitree.ApiImportInfo) Deps {
|
|
|
+ for idx, lib := range deps.SharedLibs {
|
|
|
+ deps.SharedLibs[idx] = GetReplaceModuleName(lib, apiImports.SharedLibs)
|
|
|
+ }
|
|
|
+
|
|
|
+ for idx, lib := range deps.LateSharedLibs {
|
|
|
+ deps.LateSharedLibs[idx] = GetReplaceModuleName(lib, apiImports.SharedLibs)
|
|
|
+ }
|
|
|
+
|
|
|
+ for idx, lib := range deps.RuntimeLibs {
|
|
|
+ deps.RuntimeLibs[idx] = GetReplaceModuleName(lib, apiImports.SharedLibs)
|
|
|
+ }
|
|
|
+
|
|
|
+ for idx, lib := range deps.HeaderLibs {
|
|
|
+ deps.HeaderLibs[idx] = GetReplaceModuleName(lib, apiImports.HeaderLibs)
|
|
|
+ }
|
|
|
+ return deps
|
|
|
+}
|
|
|
+
|
|
|
func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|
|
if !c.Enabled() {
|
|
|
return
|
|
@@ -2267,6 +2310,9 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|
|
|
|
|
deps := c.deps(ctx)
|
|
|
|
|
|
+ apiImportInfo := GetApiImports(c, actx)
|
|
|
+ deps = updateDepsWithApiImports(deps, apiImportInfo)
|
|
|
+
|
|
|
c.Properties.AndroidMkSystemSharedLibs = deps.SystemSharedLibs
|
|
|
|
|
|
var snapshotInfo *SnapshotInfo
|
|
@@ -2279,7 +2325,7 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|
|
deps.ReexportSharedLibHeaders, _ = RewriteLibs(c, &snapshotInfo, actx, ctx.Config(), deps.ReexportSharedLibHeaders)
|
|
|
|
|
|
for idx, lib := range deps.RuntimeLibs {
|
|
|
- deps.RuntimeLibs[idx] = RewriteSnapshotLib(lib, GetSnapshot(c, &snapshotInfo, actx).SharedLibs)
|
|
|
+ deps.RuntimeLibs[idx] = GetReplaceModuleName(lib, GetSnapshot(c, &snapshotInfo, actx).SharedLibs)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2289,7 +2335,7 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|
|
depTag.reexportFlags = true
|
|
|
}
|
|
|
|
|
|
- lib = RewriteSnapshotLib(lib, GetSnapshot(c, &snapshotInfo, actx).HeaderLibs)
|
|
|
+ lib = GetReplaceModuleName(lib, GetSnapshot(c, &snapshotInfo, actx).HeaderLibs)
|
|
|
|
|
|
if c.IsStubs() {
|
|
|
actx.AddFarVariationDependencies(append(ctx.Target().Variations(), c.ImageVariation()),
|
|
@@ -2302,10 +2348,20 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|
|
if c.isNDKStubLibrary() {
|
|
|
// NDK stubs depend on their implementation because the ABI dumps are
|
|
|
// generated from the implementation library.
|
|
|
- actx.AddFarVariationDependencies(append(ctx.Target().Variations(),
|
|
|
- c.ImageVariation(),
|
|
|
- blueprint.Variation{Mutator: "link", Variation: "shared"},
|
|
|
- ), stubImplementation, c.BaseModuleName())
|
|
|
+ apiImportName := c.BaseModuleName() + multitree.GetApiImportSuffix()
|
|
|
+
|
|
|
+ // If original library exists as imported API, set dependency on the imported library
|
|
|
+ if actx.OtherModuleExists(apiImportName) {
|
|
|
+ actx.AddFarVariationDependencies(append(ctx.Target().Variations(),
|
|
|
+ c.ImageVariation(),
|
|
|
+ blueprint.Variation{Mutator: "link", Variation: "shared"},
|
|
|
+ ), stubImplementation, apiImportName)
|
|
|
+ } else {
|
|
|
+ actx.AddFarVariationDependencies(append(ctx.Target().Variations(),
|
|
|
+ c.ImageVariation(),
|
|
|
+ blueprint.Variation{Mutator: "link", Variation: "shared"},
|
|
|
+ ), stubImplementation, c.BaseModuleName())
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// sysprop_library has to support both C++ and Java. So sysprop_library internally creates one
|
|
@@ -2321,7 +2377,7 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|
|
lib = impl
|
|
|
}
|
|
|
|
|
|
- lib = RewriteSnapshotLib(lib, GetSnapshot(c, &snapshotInfo, actx).StaticLibs)
|
|
|
+ lib = GetReplaceModuleName(lib, GetSnapshot(c, &snapshotInfo, actx).StaticLibs)
|
|
|
|
|
|
actx.AddVariationDependencies([]blueprint.Variation{
|
|
|
{Mutator: "link", Variation: "static"},
|
|
@@ -2341,7 +2397,7 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|
|
lib = impl
|
|
|
}
|
|
|
|
|
|
- lib = RewriteSnapshotLib(lib, GetSnapshot(c, &snapshotInfo, actx).StaticLibs)
|
|
|
+ lib = GetReplaceModuleName(lib, GetSnapshot(c, &snapshotInfo, actx).StaticLibs)
|
|
|
|
|
|
actx.AddVariationDependencies([]blueprint.Variation{
|
|
|
{Mutator: "link", Variation: "static"},
|
|
@@ -2355,7 +2411,7 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|
|
depTag := libraryDependencyTag{Kind: staticLibraryDependency, staticUnwinder: true}
|
|
|
actx.AddVariationDependencies([]blueprint.Variation{
|
|
|
{Mutator: "link", Variation: "static"},
|
|
|
- }, depTag, RewriteSnapshotLib(staticUnwinder(actx), GetSnapshot(c, &snapshotInfo, actx).StaticLibs))
|
|
|
+ }, depTag, GetReplaceModuleName(staticUnwinder(actx), GetSnapshot(c, &snapshotInfo, actx).StaticLibs))
|
|
|
}
|
|
|
|
|
|
// shared lib names without the #version suffix
|
|
@@ -2387,14 +2443,14 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|
|
depTag := libraryDependencyTag{Kind: staticLibraryDependency, Order: lateLibraryDependency}
|
|
|
actx.AddVariationDependencies([]blueprint.Variation{
|
|
|
{Mutator: "link", Variation: "static"},
|
|
|
- }, depTag, RewriteSnapshotLib(lib, GetSnapshot(c, &snapshotInfo, actx).StaticLibs))
|
|
|
+ }, depTag, GetReplaceModuleName(lib, GetSnapshot(c, &snapshotInfo, actx).StaticLibs))
|
|
|
}
|
|
|
|
|
|
for _, lib := range deps.UnexportedStaticLibs {
|
|
|
depTag := libraryDependencyTag{Kind: staticLibraryDependency, Order: lateLibraryDependency, unexportedSymbols: true}
|
|
|
actx.AddVariationDependencies([]blueprint.Variation{
|
|
|
{Mutator: "link", Variation: "static"},
|
|
|
- }, depTag, RewriteSnapshotLib(lib, GetSnapshot(c, &snapshotInfo, actx).StaticLibs))
|
|
|
+ }, depTag, GetReplaceModuleName(lib, GetSnapshot(c, &snapshotInfo, actx).StaticLibs))
|
|
|
}
|
|
|
|
|
|
for _, lib := range deps.LateSharedLibs {
|
|
@@ -2435,11 +2491,11 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|
|
actx.AddVariationDependencies(crtVariations, objDepTag, deps.ObjFiles...)
|
|
|
for _, crt := range deps.CrtBegin {
|
|
|
actx.AddVariationDependencies(crtVariations, CrtBeginDepTag,
|
|
|
- RewriteSnapshotLib(crt, GetSnapshot(c, &snapshotInfo, actx).Objects))
|
|
|
+ GetReplaceModuleName(crt, GetSnapshot(c, &snapshotInfo, actx).Objects))
|
|
|
}
|
|
|
for _, crt := range deps.CrtEnd {
|
|
|
actx.AddVariationDependencies(crtVariations, CrtEndDepTag,
|
|
|
- RewriteSnapshotLib(crt, GetSnapshot(c, &snapshotInfo, actx).Objects))
|
|
|
+ GetReplaceModuleName(crt, GetSnapshot(c, &snapshotInfo, actx).Objects))
|
|
|
}
|
|
|
if deps.DynamicLinker != "" {
|
|
|
actx.AddDependency(c, dynamicLinkerDepTag, deps.DynamicLinker)
|
|
@@ -2464,7 +2520,7 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|
|
actx.AddVariationDependencies([]blueprint.Variation{
|
|
|
c.ImageVariation(),
|
|
|
{Mutator: "link", Variation: "shared"},
|
|
|
- }, vndkExtDepTag, RewriteSnapshotLib(vndkdep.getVndkExtendsModuleName(), GetSnapshot(c, &snapshotInfo, actx).SharedLibs))
|
|
|
+ }, vndkExtDepTag, GetReplaceModuleName(vndkdep.getVndkExtendsModuleName(), GetSnapshot(c, &snapshotInfo, actx).SharedLibs))
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -3186,6 +3242,11 @@ func MakeLibName(ctx android.ModuleContext, c LinkableInterface, ccDep LinkableI
|
|
|
|
|
|
return baseName + snapshotPrebuilt.SnapshotAndroidMkSuffix()
|
|
|
}
|
|
|
+
|
|
|
+ // Remove API import suffix if exists
|
|
|
+ if _, ok := ccDepModule.linker.(*apiLibraryDecorator); ok {
|
|
|
+ libName = strings.TrimSuffix(libName, multitree.GetApiImportSuffix())
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if ctx.DeviceConfig().VndkUseCoreVariant() && ccDep.IsVndk() && !ccDep.MustUseVendorVariant() &&
|
|
@@ -3521,6 +3582,10 @@ func (c *Module) ShouldSupportSdkVersion(ctx android.BaseModuleContext,
|
|
|
if _, ok := c.linker.(prebuiltLinkerInterface); ok {
|
|
|
return nil
|
|
|
}
|
|
|
+ if _, ok := c.linker.(*apiLibraryDecorator); ok {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+
|
|
|
minSdkVersion := c.MinSdkVersion()
|
|
|
if minSdkVersion == "apex_inherit" {
|
|
|
return nil
|
|
@@ -3638,9 +3703,7 @@ func (c *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//
|
|
|
// Defaults
|
|
|
-//
|
|
|
type Defaults struct {
|
|
|
android.ModuleBase
|
|
|
android.DefaultsModuleBase
|