Merge changes from topic "sanitizer-runtime-stubs" am: 973f46703b am: 0730dce1c0 am: 0efc79cdd4
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1437232
Change-Id: Ie2c3fee68f96a97834a5f26a05e8f9e268bc0c6e
diff --git a/cc/androidmk.go b/cc/androidmk.go
index 4f149af..d92fabc 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -33,7 +33,7 @@
)
type AndroidMkContext interface {
- Name() string
+ BaseModuleName() string
Target() android.Target
subAndroidMk(*android.AndroidMkEntries, interface{})
Arch() android.Arch
@@ -278,7 +278,7 @@
})
}
if len(library.Properties.Stubs.Versions) > 0 &&
- android.DirectlyInAnyApex(ctx, ctx.Name()) && !ctx.InRamdisk() && !ctx.InRecovery() && !ctx.UseVndk() &&
+ android.DirectlyInAnyApex(ctx, ctx.BaseModuleName()) && !ctx.InRamdisk() && !ctx.InRecovery() && !ctx.UseVndk() &&
!ctx.static() {
if library.buildStubs() && library.isLatestStubVersion() {
// reference the latest version via its name without suffix when it is provided by apex
diff --git a/cc/cc.go b/cc/cc.go
index a813428..caefea4 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -740,6 +740,9 @@
if library, ok := c.linker.(*libraryDecorator); ok {
return library.Properties.Stubs.Versions
}
+ if library, ok := c.linker.(*prebuiltLibraryLinker); ok {
+ return library.Properties.Stubs.Versions
+ }
}
panic(fmt.Errorf("StubsVersions called on non-library module: %q", c.BaseModuleName()))
}
@@ -749,6 +752,9 @@
if _, ok := c.linker.(*libraryDecorator); ok {
return true
}
+ if _, ok := c.linker.(*prebuiltLibraryLinker); ok {
+ return true
+ }
}
return false
}
@@ -774,6 +780,14 @@
c.Properties.PreventInstall = true
return
}
+ if library, ok := c.linker.(*prebuiltLibraryLinker); ok {
+ library.MutatedProperties.BuildStubs = true
+ c.Properties.HideFromMake = true
+ c.sanitize = nil
+ c.stl = nil
+ c.Properties.PreventInstall = true
+ return
+ }
if _, ok := c.linker.(*llndkStubDecorator); ok {
c.Properties.HideFromMake = true
return
@@ -787,6 +801,9 @@
if library, ok := c.linker.(*libraryDecorator); ok {
return library.buildStubs()
}
+ if library, ok := c.linker.(*prebuiltLibraryLinker); ok {
+ return library.buildStubs()
+ }
}
panic(fmt.Errorf("BuildStubs called on non-library module: %q", c.BaseModuleName()))
}
@@ -796,6 +813,10 @@
library.MutatedProperties.AllStubsVersions = versions
return
}
+ if library, ok := c.linker.(*prebuiltLibraryLinker); ok {
+ library.MutatedProperties.AllStubsVersions = versions
+ return
+ }
if llndk, ok := c.linker.(*llndkStubDecorator); ok {
llndk.libraryDecorator.MutatedProperties.AllStubsVersions = versions
return
@@ -806,6 +827,9 @@
if library, ok := c.linker.(*libraryDecorator); ok {
return library.MutatedProperties.AllStubsVersions
}
+ if library, ok := c.linker.(*prebuiltLibraryLinker); ok {
+ return library.MutatedProperties.AllStubsVersions
+ }
if llndk, ok := c.linker.(*llndkStubDecorator); ok {
return llndk.libraryDecorator.MutatedProperties.AllStubsVersions
}
@@ -818,6 +842,10 @@
library.MutatedProperties.StubsVersion = version
return
}
+ if library, ok := c.linker.(*prebuiltLibraryLinker); ok {
+ library.MutatedProperties.StubsVersion = version
+ return
+ }
if llndk, ok := c.linker.(*llndkStubDecorator); ok {
llndk.libraryDecorator.MutatedProperties.StubsVersion = version
return
@@ -831,6 +859,9 @@
if library, ok := c.linker.(*libraryDecorator); ok {
return library.MutatedProperties.StubsVersion
}
+ if library, ok := c.linker.(*prebuiltLibraryLinker); ok {
+ return library.MutatedProperties.StubsVersion
+ }
if llndk, ok := c.linker.(*llndkStubDecorator); ok {
return llndk.libraryDecorator.MutatedProperties.StubsVersion
}
@@ -1073,6 +1104,8 @@
func (c *Module) IsStubs() bool {
if library, ok := c.linker.(*libraryDecorator); ok {
return library.buildStubs()
+ } else if library, ok := c.linker.(*prebuiltLibraryLinker); ok {
+ return library.buildStubs()
} else if _, ok := c.linker.(*llndkStubDecorator); ok {
return true
}
@@ -1830,6 +1863,42 @@
}
}
+func (c *Module) addSharedLibDependenciesWithVersions(ctx android.BottomUpMutatorContext,
+ variations []blueprint.Variation, depTag libraryDependencyTag, name, version string, far bool) {
+
+ variations = append([]blueprint.Variation(nil), variations...)
+
+ if version != "" && VersionVariantAvailable(c) {
+ // Version is explicitly specified. i.e. libFoo#30
+ variations = append(variations, blueprint.Variation{Mutator: "version", Variation: version})
+ depTag.explicitlyVersioned = true
+ }
+ var deps []blueprint.Module
+ if far {
+ deps = ctx.AddFarVariationDependencies(variations, depTag, name)
+ } else {
+ deps = ctx.AddVariationDependencies(variations, depTag, name)
+ }
+
+ // If the version is not specified, add dependency to all stubs libraries.
+ // The stubs library will be used when the depending module is built for APEX and
+ // the dependent module is not in the same APEX.
+ if version == "" && VersionVariantAvailable(c) {
+ if dep, ok := deps[0].(*Module); ok {
+ for _, ver := range dep.AllStubsVersions() {
+ // Note that depTag.ExplicitlyVersioned is false in this case.
+ versionVariations := append(variations,
+ blueprint.Variation{Mutator: "version", Variation: ver})
+ if far {
+ ctx.AddFarVariationDependencies(versionVariations, depTag, name)
+ } else {
+ ctx.AddVariationDependencies(versionVariations, depTag, name)
+ }
+ }
+ }
+ }
+}
+
func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
if !c.Enabled() {
return
@@ -1930,6 +1999,11 @@
buildStubs = true
}
}
+ if library, ok := c.linker.(*prebuiltLibraryLinker); ok {
+ if library.buildStubs() {
+ buildStubs = true
+ }
+ }
}
rewriteSnapshotLibs := func(lib string, snapshotMap *snapshotMap) string {
@@ -2018,32 +2092,6 @@
}, depTag, rewriteSnapshotLibs(lib, vendorSnapshotStaticLibs))
}
- addSharedLibDependencies := func(depTag libraryDependencyTag, name string, version string) {
- var variations []blueprint.Variation
- variations = append(variations, blueprint.Variation{Mutator: "link", Variation: "shared"})
- if version != "" && VersionVariantAvailable(c) {
- // Version is explicitly specified. i.e. libFoo#30
- variations = append(variations, blueprint.Variation{Mutator: "version", Variation: version})
- depTag.explicitlyVersioned = true
- }
- deps := actx.AddVariationDependencies(variations, depTag, name)
-
- // If the version is not specified, add dependency to all stubs libraries.
- // The stubs library will be used when the depending module is built for APEX and
- // the dependent module is not in the same APEX.
- if version == "" && VersionVariantAvailable(c) {
- if dep, ok := deps[0].(*Module); ok {
- for _, ver := range dep.AllStubsVersions() {
- // Note that depTag.ExplicitlyVersioned is false in this case.
- ctx.AddVariationDependencies([]blueprint.Variation{
- {Mutator: "link", Variation: "shared"},
- {Mutator: "version", Variation: ver},
- }, depTag, name)
- }
- }
- }
- }
-
// shared lib names without the #version suffix
var sharedLibNames []string
@@ -2060,7 +2108,10 @@
name, version := StubsLibNameAndVersion(lib)
sharedLibNames = append(sharedLibNames, name)
- addSharedLibDependencies(depTag, name, version)
+ variations := []blueprint.Variation{
+ {Mutator: "link", Variation: "shared"},
+ }
+ c.addSharedLibDependenciesWithVersions(ctx, variations, depTag, name, version, false)
}
for _, lib := range deps.LateSharedLibs {
@@ -2071,7 +2122,10 @@
continue
}
depTag := libraryDependencyTag{Kind: sharedLibraryDependency, Order: lateLibraryDependency}
- addSharedLibDependencies(depTag, lib, "")
+ variations := []blueprint.Variation{
+ {Mutator: "link", Variation: "shared"},
+ }
+ c.addSharedLibDependenciesWithVersions(ctx, variations, depTag, lib, "", false)
}
actx.AddVariationDependencies([]blueprint.Variation{
diff --git a/cc/sanitize.go b/cc/sanitize.go
index 8c3e97a..43198c1 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -1040,7 +1040,7 @@
if c.Device() {
variations = append(variations, c.ImageVariation())
}
- mctx.AddFarVariationDependencies(variations, depTag, runtimeLibrary)
+ c.addSharedLibDependenciesWithVersions(mctx, variations, depTag, runtimeLibrary, "", true)
}
// static lib does not have dependency to the runtime library. The
// dependency will be added to the executables or shared libs using