Merge changes from topics "libz-no-stubs-for-vendor", "vendor-etc-linker-config" into main
* changes: Generate vendor specific STUB_LIBRARIES Add cc_library.target.vendor.no_stubs
This commit is contained in:
@@ -4710,6 +4710,72 @@ func TestTestApex(t *testing.T) {
|
|||||||
ensureListContains(t, ctx.ModuleVariantsForTests("mylib_common_test"), "android_arm64_armv8-a_shared")
|
ensureListContains(t, ctx.ModuleVariantsForTests("mylib_common_test"), "android_arm64_armv8-a_shared")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestLibzVendorIsntStable(t *testing.T) {
|
||||||
|
ctx := testApex(t, `
|
||||||
|
apex {
|
||||||
|
name: "myapex",
|
||||||
|
key: "myapex.key",
|
||||||
|
updatable: false,
|
||||||
|
binaries: ["mybin"],
|
||||||
|
}
|
||||||
|
apex {
|
||||||
|
name: "myvendorapex",
|
||||||
|
key: "myapex.key",
|
||||||
|
file_contexts: "myvendorapex_file_contexts",
|
||||||
|
vendor: true,
|
||||||
|
updatable: false,
|
||||||
|
binaries: ["mybin"],
|
||||||
|
}
|
||||||
|
apex_key {
|
||||||
|
name: "myapex.key",
|
||||||
|
public_key: "testkey.avbpubkey",
|
||||||
|
private_key: "testkey.pem",
|
||||||
|
}
|
||||||
|
cc_binary {
|
||||||
|
name: "mybin",
|
||||||
|
vendor_available: true,
|
||||||
|
system_shared_libs: [],
|
||||||
|
stl: "none",
|
||||||
|
shared_libs: ["libz"],
|
||||||
|
apex_available: ["//apex_available:anyapex"],
|
||||||
|
}
|
||||||
|
cc_library {
|
||||||
|
name: "libz",
|
||||||
|
vendor_available: true,
|
||||||
|
system_shared_libs: [],
|
||||||
|
stl: "none",
|
||||||
|
stubs: {
|
||||||
|
versions: ["28", "30"],
|
||||||
|
},
|
||||||
|
target: {
|
||||||
|
vendor: {
|
||||||
|
no_stubs: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`, withFiles(map[string][]byte{
|
||||||
|
"myvendorapex_file_contexts": nil,
|
||||||
|
}))
|
||||||
|
|
||||||
|
// libz provides stubs for core variant.
|
||||||
|
{
|
||||||
|
ensureExactContents(t, ctx, "myapex", "android_common_myapex", []string{
|
||||||
|
"bin/mybin",
|
||||||
|
})
|
||||||
|
apexManifestRule := ctx.ModuleForTests("myapex", "android_common_myapex").Rule("apexManifestRule")
|
||||||
|
android.AssertStringEquals(t, "should require libz", apexManifestRule.Args["requireNativeLibs"], "libz.so")
|
||||||
|
}
|
||||||
|
// libz doesn't provide stubs for vendor variant.
|
||||||
|
{
|
||||||
|
ensureExactContents(t, ctx, "myvendorapex", "android_common_myvendorapex", []string{
|
||||||
|
"bin/mybin",
|
||||||
|
"lib64/libz.so",
|
||||||
|
})
|
||||||
|
apexManifestRule := ctx.ModuleForTests("myvendorapex", "android_common_myvendorapex").Rule("apexManifestRule")
|
||||||
|
android.AssertStringEquals(t, "should not require libz", apexManifestRule.Args["requireNativeLibs"], "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestApexWithTarget(t *testing.T) {
|
func TestApexWithTarget(t *testing.T) {
|
||||||
ctx := testApex(t, `
|
ctx := testApex(t, `
|
||||||
apex {
|
apex {
|
||||||
|
10
cc/image.go
10
cc/image.go
@@ -23,6 +23,8 @@ import (
|
|||||||
|
|
||||||
"android/soong/android"
|
"android/soong/android"
|
||||||
"android/soong/snapshot"
|
"android/soong/snapshot"
|
||||||
|
|
||||||
|
"github.com/google/blueprint/proptools"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ android.ImageInterface = (*Module)(nil)
|
var _ android.ImageInterface = (*Module)(nil)
|
||||||
@@ -622,6 +624,10 @@ func squashVendorSrcs(m *Module) {
|
|||||||
|
|
||||||
lib.baseCompiler.Properties.Exclude_generated_sources = append(lib.baseCompiler.Properties.Exclude_generated_sources,
|
lib.baseCompiler.Properties.Exclude_generated_sources = append(lib.baseCompiler.Properties.Exclude_generated_sources,
|
||||||
lib.baseCompiler.Properties.Target.Vendor.Exclude_generated_sources...)
|
lib.baseCompiler.Properties.Target.Vendor.Exclude_generated_sources...)
|
||||||
|
|
||||||
|
if lib.Properties.Target.Vendor.No_stubs {
|
||||||
|
proptools.Clear(&lib.Properties.Stubs)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -635,6 +641,10 @@ func squashProductSrcs(m *Module) {
|
|||||||
|
|
||||||
lib.baseCompiler.Properties.Exclude_generated_sources = append(lib.baseCompiler.Properties.Exclude_generated_sources,
|
lib.baseCompiler.Properties.Exclude_generated_sources = append(lib.baseCompiler.Properties.Exclude_generated_sources,
|
||||||
lib.baseCompiler.Properties.Target.Product.Exclude_generated_sources...)
|
lib.baseCompiler.Properties.Target.Product.Exclude_generated_sources...)
|
||||||
|
|
||||||
|
if lib.Properties.Target.Product.No_stubs {
|
||||||
|
proptools.Clear(&lib.Properties.Stubs)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -107,6 +107,13 @@ type LibraryProperties struct {
|
|||||||
Suffix *string `android:"arch_variant"`
|
Suffix *string `android:"arch_variant"`
|
||||||
|
|
||||||
Header_abi_checker headerAbiCheckerProperties
|
Header_abi_checker headerAbiCheckerProperties
|
||||||
|
|
||||||
|
// Disable stubs for vendor/product variants
|
||||||
|
// This is a workaround to keep `stubs` only for "core" variant (not product/vendor).
|
||||||
|
// It would be nice if we could put `stubs` into a `target: { core: {} }`
|
||||||
|
// block but it's not supported in soong yet. This could be removed/simplified once we have
|
||||||
|
// a better syntax.
|
||||||
|
No_stubs bool
|
||||||
}
|
}
|
||||||
|
|
||||||
Platform struct {
|
Platform struct {
|
||||||
|
@@ -28,6 +28,7 @@ func init() {
|
|||||||
|
|
||||||
type stubLibraries struct {
|
type stubLibraries struct {
|
||||||
stubLibraryMap map[string]bool
|
stubLibraryMap map[string]bool
|
||||||
|
stubVendorLibraryMap map[string]bool
|
||||||
|
|
||||||
apiListCoverageXmlPaths []string
|
apiListCoverageXmlPaths []string
|
||||||
}
|
}
|
||||||
@@ -54,6 +55,9 @@ func (s *stubLibraries) GenerateBuildActions(ctx android.SingletonContext) {
|
|||||||
if IsStubTarget(m) {
|
if IsStubTarget(m) {
|
||||||
if name := getInstalledFileName(m); name != "" {
|
if name := getInstalledFileName(m); name != "" {
|
||||||
s.stubLibraryMap[name] = true
|
s.stubLibraryMap[name] = true
|
||||||
|
if m.InVendor() {
|
||||||
|
s.stubVendorLibraryMap[name] = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if m.library != nil {
|
if m.library != nil {
|
||||||
@@ -68,12 +72,14 @@ func (s *stubLibraries) GenerateBuildActions(ctx android.SingletonContext) {
|
|||||||
func stubLibrariesSingleton() android.Singleton {
|
func stubLibrariesSingleton() android.Singleton {
|
||||||
return &stubLibraries{
|
return &stubLibraries{
|
||||||
stubLibraryMap: make(map[string]bool),
|
stubLibraryMap: make(map[string]bool),
|
||||||
|
stubVendorLibraryMap: make(map[string]bool),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *stubLibraries) MakeVars(ctx android.MakeVarsContext) {
|
func (s *stubLibraries) MakeVars(ctx android.MakeVarsContext) {
|
||||||
// Convert stub library file names into Makefile variable.
|
// Convert stub library file names into Makefile variable.
|
||||||
ctx.Strict("STUB_LIBRARIES", strings.Join(android.SortedKeys(s.stubLibraryMap), " "))
|
ctx.Strict("STUB_LIBRARIES", strings.Join(android.SortedKeys(s.stubLibraryMap), " "))
|
||||||
|
ctx.Strict("SOONG_STUB_VENDOR_LIBRARIES", strings.Join(android.SortedKeys(s.stubVendorLibraryMap), " "))
|
||||||
|
|
||||||
// Export the list of API XML files to Make.
|
// Export the list of API XML files to Make.
|
||||||
sort.Strings(s.apiListCoverageXmlPaths)
|
sort.Strings(s.apiListCoverageXmlPaths)
|
||||||
|
Reference in New Issue
Block a user