'vendor_available: *' will not create product variant
With this patch, `vendor_available: true` will no longer creates
product variant. Instead, modules need to set `product_available:
true` if they have to be available to product vanriant.
If both properties are defined for VNDKs, they must have the same
values.
Bug: 150902910
Test: m nothing
Change-Id: I28fb6886e6114583227a31151136627c8516ac9c
diff --git a/cc/cc_test.go b/cc/cc_test.go
index fe9db37..071e813 100644
--- a/cc/cc_test.go
+++ b/cc/cc_test.go
@@ -326,7 +326,6 @@
cc_library {
name: "libvndk",
vendor_available: true,
- product_available: true,
vndk: {
enabled: true,
},
@@ -336,7 +335,6 @@
cc_library {
name: "libvndk_private",
vendor_available: false,
- product_available: false,
vndk: {
enabled: true,
},
@@ -345,11 +343,28 @@
}
cc_library {
- name: "libvndk_sp",
+ name: "libvndk_product",
vendor_available: true,
product_available: true,
vndk: {
enabled: true,
+ },
+ nocrt: true,
+ target: {
+ vendor: {
+ cflags: ["-DTEST"],
+ },
+ product: {
+ cflags: ["-DTEST"],
+ },
+ },
+ }
+
+ cc_library {
+ name: "libvndk_sp",
+ vendor_available: true,
+ vndk: {
+ enabled: true,
support_system_process: true,
},
nocrt: true,
@@ -359,7 +374,6 @@
cc_library {
name: "libvndk_sp_private",
vendor_available: false,
- product_available: false,
vndk: {
enabled: true,
support_system_process: true,
@@ -371,6 +385,26 @@
},
},
}
+
+ cc_library {
+ name: "libvndk_sp_product_private",
+ vendor_available: false,
+ product_available: false,
+ vndk: {
+ enabled: true,
+ support_system_process: true,
+ },
+ nocrt: true,
+ target: {
+ vendor: {
+ suffix: "-x",
+ },
+ product: {
+ suffix: "-x",
+ },
+ },
+ }
+
vndk_libraries_txt {
name: "llndk.libraries.txt",
}
@@ -399,13 +433,13 @@
// They are installed as part of VNDK APEX instead.
checkVndkModule(t, ctx, "libvndk", "", false, "", vendorVariant)
checkVndkModule(t, ctx, "libvndk_private", "", false, "", vendorVariant)
+ checkVndkModule(t, ctx, "libvndk_product", "", false, "", vendorVariant)
checkVndkModule(t, ctx, "libvndk_sp", "", true, "", vendorVariant)
checkVndkModule(t, ctx, "libvndk_sp_private", "", true, "", vendorVariant)
+ checkVndkModule(t, ctx, "libvndk_sp_product_private", "", true, "", vendorVariant)
- checkVndkModule(t, ctx, "libvndk", "", false, "", productVariant)
- checkVndkModule(t, ctx, "libvndk_private", "", false, "", productVariant)
- checkVndkModule(t, ctx, "libvndk_sp", "", true, "", productVariant)
- checkVndkModule(t, ctx, "libvndk_sp_private", "", true, "", productVariant)
+ checkVndkModule(t, ctx, "libvndk_product", "", false, "", productVariant)
+ checkVndkModule(t, ctx, "libvndk_sp_product_private", "", true, "", productVariant)
// Check VNDK snapshot output.
@@ -429,6 +463,8 @@
checkSnapshot(t, ctx, snapshotSingleton, "libvndk", "libvndk.so", vndkCoreLibPath, variant)
checkSnapshot(t, ctx, snapshotSingleton, "libvndk", "libvndk.so", vndkCoreLib2ndPath, variant2nd)
+ checkSnapshot(t, ctx, snapshotSingleton, "libvndk_product", "libvndk_product.so", vndkCoreLibPath, variant)
+ checkSnapshot(t, ctx, snapshotSingleton, "libvndk_product", "libvndk_product.so", vndkCoreLib2ndPath, variant2nd)
checkSnapshot(t, ctx, snapshotSingleton, "libvndk_sp", "libvndk_sp-x.so", vndkSpLibPath, variant)
checkSnapshot(t, ctx, snapshotSingleton, "libvndk_sp", "libvndk_sp-x.so", vndkSpLib2ndPath, variant2nd)
@@ -446,16 +482,19 @@
"VNDK-SP: libc++.so",
"VNDK-SP: libvndk_sp-x.so",
"VNDK-SP: libvndk_sp_private-x.so",
+ "VNDK-SP: libvndk_sp_product_private-x.so",
"VNDK-core: libvndk-private.so",
"VNDK-core: libvndk.so",
+ "VNDK-core: libvndk_product.so",
"VNDK-private: libft2.so",
"VNDK-private: libvndk-private.so",
"VNDK-private: libvndk_sp_private-x.so",
+ "VNDK-private: libvndk_sp_product_private-x.so",
})
checkVndkLibrariesOutput(t, ctx, "llndk.libraries.txt", []string{"libc.so", "libdl.so", "libft2.so", "libm.so"})
- checkVndkLibrariesOutput(t, ctx, "vndkcore.libraries.txt", []string{"libvndk-private.so", "libvndk.so"})
- checkVndkLibrariesOutput(t, ctx, "vndkprivate.libraries.txt", []string{"libft2.so", "libvndk-private.so", "libvndk_sp_private-x.so"})
- checkVndkLibrariesOutput(t, ctx, "vndksp.libraries.txt", []string{"libc++.so", "libvndk_sp-x.so", "libvndk_sp_private-x.so"})
+ checkVndkLibrariesOutput(t, ctx, "vndkcore.libraries.txt", []string{"libvndk-private.so", "libvndk.so", "libvndk_product.so"})
+ checkVndkLibrariesOutput(t, ctx, "vndksp.libraries.txt", []string{"libc++.so", "libvndk_sp-x.so", "libvndk_sp_private-x.so", "libvndk_sp_product_private-x.so"})
+ checkVndkLibrariesOutput(t, ctx, "vndkprivate.libraries.txt", []string{"libft2.so", "libvndk-private.so", "libvndk_sp_private-x.so", "libvndk_sp_product_private-x.so"})
checkVndkLibrariesOutput(t, ctx, "vndkcorevariant.libraries.txt", nil)
}
@@ -683,7 +722,28 @@
func TestVndkModuleError(t *testing.T) {
// Check the error message for vendor_available and product_available properties.
- testCcError(t, "product_available: may not have different value than `vendor_available`", `
+ testCcErrorProductVndk(t, "vndk: vendor_available must be set to either true or false when `vndk: {enabled: true}`", `
+ cc_library {
+ name: "libvndk",
+ vndk: {
+ enabled: true,
+ },
+ nocrt: true,
+ }
+ `)
+
+ testCcErrorProductVndk(t, "vndk: vendor_available must be set to either true or false when `vndk: {enabled: true}`", `
+ cc_library {
+ name: "libvndk",
+ product_available: true,
+ vndk: {
+ enabled: true,
+ },
+ nocrt: true,
+ }
+ `)
+
+ testCcErrorProductVndk(t, "product_available: may not have different value than `vendor_available` for a VNDK", `
cc_library {
name: "libvndk",
vendor_available: true,
@@ -694,6 +754,23 @@
nocrt: true,
}
`)
+
+ testCcErrorProductVndk(t, "product properties must have the same values with the vendor properties for VNDK modules", `
+ cc_library {
+ name: "libvndkprop",
+ vendor_available: true,
+ product_available: true,
+ vndk: {
+ enabled: true,
+ },
+ nocrt: true,
+ target: {
+ vendor: {
+ cflags: ["-DTEST",],
+ },
+ },
+ }
+ `)
}
func TestVndkDepError(t *testing.T) {
@@ -2208,7 +2285,7 @@
}
`)
- testCcErrorProductVndk(t, "`extends` refers module \".*\" which does not have `vendor_available: true`", `
+ testCcErrorProductVndk(t, "`extends` refers module \".*\" which does not have `product_available: true`", `
cc_library {
name: "libvndk",
vendor_available: false,
@@ -2562,7 +2639,6 @@
cc_library {
name: "libvndk2",
vendor_available: true,
- product_available: true,
vndk: {
enabled: true,
},
@@ -2635,7 +2711,6 @@
cc_library {
name: "libvndk_sp2",
vendor_available: true,
- product_available: true,
vndk: {
enabled: true,
},
@@ -2689,6 +2764,20 @@
nocrt: true,
}
cc_library {
+ name: "libboth_available",
+ vendor_available: true,
+ product_available: true,
+ nocrt: true,
+ target: {
+ vendor: {
+ suffix: "-vendor",
+ },
+ product: {
+ suffix: "-product",
+ },
+ }
+ }
+ cc_library {
name: "libproduct_va",
product_specific: true,
vendor_available: true,
@@ -2702,6 +2791,7 @@
"libvndk",
"libvndk_sp",
"libpa",
+ "libboth_available",
"libproduct_va",
],
nocrt: true,
@@ -2714,6 +2804,7 @@
"libvndk",
"libvndk_sp",
"libva",
+ "libboth_available",
"libproduct_va",
],
nocrt: true,
@@ -2729,6 +2820,12 @@
checkVndkModule(t, ctx, "libvndk", "", false, "", productVariant)
checkVndkModule(t, ctx, "libvndk_sp", "", true, "", productVariant)
+
+ mod_vendor := ctx.ModuleForTests("libboth_available", vendorVariant).Module().(*Module)
+ assertString(t, mod_vendor.outputFile.Path().Base(), "libboth_available-vendor.so")
+
+ mod_product := ctx.ModuleForTests("libboth_available", productVariant).Module().(*Module)
+ assertString(t, mod_product.outputFile.Path().Base(), "libboth_available-product.so")
}
func TestEnforceProductVndkVersionErrors(t *testing.T) {
@@ -2761,7 +2858,22 @@
nocrt: true,
}
`)
- testCcErrorProductVndk(t, "Vendor module that is not VNDK should not link to \".*\" which is marked as `vendor_available: false`", `
+ testCcErrorProductVndk(t, "dependency \".*\" of \".*\" missing variant:\n.*image:product.VER", `
+ cc_library {
+ name: "libprod",
+ product_specific: true,
+ shared_libs: [
+ "libva",
+ ],
+ nocrt: true,
+ }
+ cc_library {
+ name: "libva",
+ vendor_available: true,
+ nocrt: true,
+ }
+ `)
+ testCcErrorProductVndk(t, "product module that is not VNDK should not link to \".*\" which is marked as `product_available: false`", `
cc_library {
name: "libprod",
product_specific: true,