Use sysprop stub regarding to the install location

Rather than the owner of sysprop, the install location is important when
choosing a stub for sysprop_library.

Bug: 171170584
Test: soong test
Change-Id: Iba934d14dd235bd85d0bd631ef6bad83c1b4f551
This commit is contained in:
Inseob Kim 2020-10-20 16:29:55 +09:00
parent d9052d177c
commit fe61218f7f
2 changed files with 32 additions and 10 deletions

View file

@ -404,13 +404,21 @@ func syspropLibraryHook(ctx android.LoadHookContext, m *syspropLibrary) {
// ctx's Platform or Specific functions represent where this sysprop_library installed.
installedInSystem := ctx.Platform() || ctx.SystemExtSpecific()
installedInVendorOrOdm := ctx.SocSpecific() || ctx.DeviceSpecific()
installedInProduct := ctx.ProductSpecific()
isOwnerPlatform := false
stub := "sysprop-library-stub-"
var stub string
if installedInVendorOrOdm {
stub = "sysprop-library-stub-vendor"
} else if installedInProduct {
stub = "sysprop-library-stub-product"
} else {
stub = "sysprop-library-stub-platform"
}
switch m.Owner() {
case "Platform":
// Every partition can access platform-defined properties
stub += "platform"
isOwnerPlatform = true
case "Vendor":
// System can't access vendor's properties
@ -418,14 +426,12 @@ func syspropLibraryHook(ctx android.LoadHookContext, m *syspropLibrary) {
ctx.ModuleErrorf("None of soc_specific, device_specific, product_specific is true. " +
"System can't access sysprop_library owned by Vendor")
}
stub += "vendor"
case "Odm":
// Only vendor can access Odm-defined properties
if !installedInVendorOrOdm {
ctx.ModuleErrorf("Neither soc_speicifc nor device_specific is true. " +
"Odm-defined properties should be accessed only in Vendor or Odm")
}
stub += "vendor"
default:
ctx.PropertyErrorf("property_owner",
"Unknown value %s: must be one of Platform, Vendor or Odm", m.Owner())

View file

@ -103,6 +103,8 @@ func testConfig(env map[string]string, bp string, fs map[string][]byte) android.
"api/sysprop-platform-on-product-latest.txt": nil,
"api/sysprop-vendor-current.txt": nil,
"api/sysprop-vendor-latest.txt": nil,
"api/sysprop-vendor-on-product-current.txt": nil,
"api/sysprop-vendor-on-product-latest.txt": nil,
"api/sysprop-odm-current.txt": nil,
"api/sysprop-odm-latest.txt": nil,
"framework/aidl/a.aidl": nil,
@ -182,8 +184,15 @@ func TestSyspropLibrary(t *testing.T) {
srcs: ["com/android/VendorProperties.sysprop"],
api_packages: ["com.android"],
property_owner: "Vendor",
vendor: true,
}
sysprop_library {
name: "sysprop-vendor-on-product",
srcs: ["com/android/VendorProperties.sysprop"],
api_packages: ["com.android"],
property_owner: "Vendor",
product_specific: true,
vendor_available: true,
}
sysprop_library {
@ -213,7 +222,7 @@ func TestSyspropLibrary(t *testing.T) {
srcs: ["c.java"],
sdk_version: "system_current",
product_specific: true,
libs: ["sysprop-platform", "sysprop-vendor"],
libs: ["sysprop-platform", "sysprop-vendor-on-product"],
}
java_library {
@ -240,7 +249,7 @@ func TestSyspropLibrary(t *testing.T) {
name: "cc-client-product",
srcs: ["d.cpp"],
product_specific: true,
static_libs: ["sysprop-platform-on-product", "sysprop-vendor"],
static_libs: ["sysprop-platform-on-product", "sysprop-vendor-on-product"],
}
cc_library {
@ -290,6 +299,12 @@ func TestSyspropLibrary(t *testing.T) {
soc_specific: true,
sdk_version: "core_current",
}
java_library {
name: "sysprop-library-stub-product",
product_specific: true,
sdk_version: "core_current",
}
`)
// Check for generated cc_library
@ -317,13 +332,14 @@ func TestSyspropLibrary(t *testing.T) {
expectedApexAvailableOnLibrary, library.ApexProperties.Apex_available)
}
// core variant of vendor-owned sysprop_library is for product
ctx.ModuleForTests("libsysprop-vendor", variant)
// product variant of vendor-owned sysprop_library
ctx.ModuleForTests("libsysprop-vendor-on-product", variant)
}
ctx.ModuleForTests("sysprop-platform", "android_common")
ctx.ModuleForTests("sysprop-platform_public", "android_common")
ctx.ModuleForTests("sysprop-vendor", "android_common")
ctx.ModuleForTests("sysprop-vendor-on-product", "android_common")
// Check for exported includes
coreVariant := "android_arm64_armv8-a_static"
@ -336,7 +352,7 @@ func TestSyspropLibrary(t *testing.T) {
platformOnProductPath := "libsysprop-platform-on-product/android_arm64_armv8-a_static/gen/sysprop/public/include"
vendorInternalPath := "libsysprop-vendor/android_vendor.VER_arm64_armv8-a_static/gen/sysprop/include"
vendorPublicPath := "libsysprop-vendor/android_arm64_armv8-a_static/gen/sysprop/public/include"
vendorPublicPath := "libsysprop-vendor-on-product/android_arm64_armv8-a_static/gen/sysprop/public/include"
platformClient := ctx.ModuleForTests("cc-client-platform", coreVariant)
platformFlags := platformClient.Rule("cc").Args["cFlags"]