Create product variant for product partition
When PRODUCT_PRODUCT_VNDK_VERSION is set to 'current', product modules are enforced to use only VNDK libs from the system partition as BOARD_VNDK_VERSION does to vendor partition. Modules with 'vendor_available: true' create product variant as well as core and vendor variants. The product variant as an image variant is used for the modules in /product or /system/product. It must not affect the current build behavior without PRODUCT_PRODUCT_VNDK_VERSION set. Bug: 134099726 Bug: 138966004 Bug: 144534640 Test: build without PRODUCT_PRODUCT_VNDK_VERSION set Change-Id: I4d3585c110d84493e45bf76d550dc240bb26137f
This commit is contained in:
177
cc/cc_test.go
177
cc/cc_test.go
@@ -82,11 +82,8 @@ func testCcNoVndk(t *testing.T, bp string) *android.TestContext {
|
||||
return testCcWithConfig(t, config)
|
||||
}
|
||||
|
||||
func testCcError(t *testing.T, pattern string, bp string) {
|
||||
func testCcErrorWithConfig(t *testing.T, pattern string, config android.Config) {
|
||||
t.Helper()
|
||||
config := TestConfig(buildDir, android.Android, nil, bp, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
|
||||
ctx := CreateTestContext()
|
||||
ctx.Register(config)
|
||||
@@ -106,9 +103,27 @@ func testCcError(t *testing.T, pattern string, bp string) {
|
||||
t.Fatalf("missing expected error %q (0 errors are returned)", pattern)
|
||||
}
|
||||
|
||||
func testCcError(t *testing.T, pattern string, bp string) {
|
||||
config := TestConfig(buildDir, android.Android, nil, bp, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
testCcErrorWithConfig(t, pattern, config)
|
||||
return
|
||||
}
|
||||
|
||||
func testCcErrorProductVndk(t *testing.T, pattern string, bp string) {
|
||||
config := TestConfig(buildDir, android.Android, nil, bp, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.ProductVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
testCcErrorWithConfig(t, pattern, config)
|
||||
return
|
||||
}
|
||||
|
||||
const (
|
||||
coreVariant = "android_arm64_armv8-a_shared"
|
||||
vendorVariant = "android_vendor.VER_arm64_armv8-a_shared"
|
||||
productVariant = "android_product.VER_arm64_armv8-a_shared"
|
||||
recoveryVariant = "android_recovery_arm64_armv8-a_shared"
|
||||
)
|
||||
|
||||
@@ -1445,6 +1460,160 @@ func TestVndkUseVndkExtError(t *testing.T) {
|
||||
`)
|
||||
}
|
||||
|
||||
func TestEnforceProductVndkVersion(t *testing.T) {
|
||||
bp := `
|
||||
cc_library {
|
||||
name: "libllndk",
|
||||
}
|
||||
llndk_library {
|
||||
name: "libllndk",
|
||||
symbol_file: "",
|
||||
}
|
||||
cc_library {
|
||||
name: "libvndk",
|
||||
vendor_available: true,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
},
|
||||
nocrt: true,
|
||||
}
|
||||
cc_library {
|
||||
name: "libvndk_sp",
|
||||
vendor_available: true,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
support_system_process: true,
|
||||
},
|
||||
nocrt: true,
|
||||
}
|
||||
cc_library {
|
||||
name: "libva",
|
||||
vendor_available: true,
|
||||
nocrt: true,
|
||||
}
|
||||
cc_library {
|
||||
name: "libproduct_va",
|
||||
product_specific: true,
|
||||
vendor_available: true,
|
||||
nocrt: true,
|
||||
}
|
||||
cc_library {
|
||||
name: "libprod",
|
||||
product_specific: true,
|
||||
shared_libs: [
|
||||
"libllndk",
|
||||
"libvndk",
|
||||
"libvndk_sp",
|
||||
"libva",
|
||||
"libproduct_va",
|
||||
],
|
||||
nocrt: true,
|
||||
}
|
||||
cc_library {
|
||||
name: "libvendor",
|
||||
vendor: true,
|
||||
shared_libs: [
|
||||
"libllndk",
|
||||
"libvndk",
|
||||
"libvndk_sp",
|
||||
"libva",
|
||||
"libproduct_va",
|
||||
],
|
||||
nocrt: true,
|
||||
}
|
||||
`
|
||||
|
||||
config := TestConfig(buildDir, android.Android, nil, bp, nil)
|
||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.ProductVndkVersion = StringPtr("current")
|
||||
config.TestProductVariables.Platform_vndk_version = StringPtr("VER")
|
||||
|
||||
ctx := testCcWithConfig(t, config)
|
||||
|
||||
checkVndkModule(t, ctx, "libvndk", "vndk-VER", false, "")
|
||||
checkVndkModule(t, ctx, "libvndk_sp", "vndk-sp-VER", true, "")
|
||||
}
|
||||
|
||||
func TestEnforceProductVndkVersionErrors(t *testing.T) {
|
||||
testCcErrorProductVndk(t, "dependency \".*\" of \".*\" missing variant:\n.*image:product.VER", `
|
||||
cc_library {
|
||||
name: "libprod",
|
||||
product_specific: true,
|
||||
shared_libs: [
|
||||
"libvendor",
|
||||
],
|
||||
nocrt: true,
|
||||
}
|
||||
cc_library {
|
||||
name: "libvendor",
|
||||
vendor: true,
|
||||
nocrt: true,
|
||||
}
|
||||
`)
|
||||
testCcErrorProductVndk(t, "dependency \".*\" of \".*\" missing variant:\n.*image:product.VER", `
|
||||
cc_library {
|
||||
name: "libprod",
|
||||
product_specific: true,
|
||||
shared_libs: [
|
||||
"libsystem",
|
||||
],
|
||||
nocrt: true,
|
||||
}
|
||||
cc_library {
|
||||
name: "libsystem",
|
||||
nocrt: true,
|
||||
}
|
||||
`)
|
||||
testCcErrorProductVndk(t, "Vendor module that is not VNDK should not link to \".*\" which is marked as `vendor_available: false`", `
|
||||
cc_library {
|
||||
name: "libprod",
|
||||
product_specific: true,
|
||||
shared_libs: [
|
||||
"libvndk_private",
|
||||
],
|
||||
nocrt: true,
|
||||
}
|
||||
cc_library {
|
||||
name: "libvndk_private",
|
||||
vendor_available: false,
|
||||
vndk: {
|
||||
enabled: true,
|
||||
},
|
||||
nocrt: true,
|
||||
}
|
||||
`)
|
||||
testCcErrorProductVndk(t, "dependency \".*\" of \".*\" missing variant:\n.*image:product.VER", `
|
||||
cc_library {
|
||||
name: "libprod",
|
||||
product_specific: true,
|
||||
shared_libs: [
|
||||
"libsystem_ext",
|
||||
],
|
||||
nocrt: true,
|
||||
}
|
||||
cc_library {
|
||||
name: "libsystem_ext",
|
||||
system_ext_specific: true,
|
||||
nocrt: true,
|
||||
}
|
||||
`)
|
||||
testCcErrorProductVndk(t, "dependency \".*\" of \".*\" missing variant:\n.*image:", `
|
||||
cc_library {
|
||||
name: "libsystem",
|
||||
shared_libs: [
|
||||
"libproduct_va",
|
||||
],
|
||||
nocrt: true,
|
||||
}
|
||||
cc_library {
|
||||
name: "libproduct_va",
|
||||
product_specific: true,
|
||||
vendor_available: true,
|
||||
nocrt: true,
|
||||
}
|
||||
`)
|
||||
}
|
||||
|
||||
func TestMakeLinkType(t *testing.T) {
|
||||
bp := `
|
||||
cc_library {
|
||||
|
Reference in New Issue
Block a user