From acf9174120bfb7edc10ebb87ddb07de6c7dd5271 Mon Sep 17 00:00:00 2001 From: Inseob Kim Date: Mon, 5 Aug 2024 12:51:05 +0900 Subject: [PATCH] Add system_ext support to build_prop module As some partitions have build.prop under etc/, this change adds relative_install_path property to build_prop module. Also this change adds system_ext related Soong variables and system_ext support in gen_build_prop.py. Bug: 322090587 Test: build and compare system_ext/etc/build.prop Change-Id: I416662b8bae09383af0cdd3d8444a5c300006b7b --- Android.bp | 9 +++++++++ android/build_prop.go | 11 ++++++++--- android/config.go | 4 ++++ android/variable.go | 3 ++- scripts/gen_build_prop.py | 31 +++++++++++++++++++++---------- 5 files changed, 44 insertions(+), 14 deletions(-) diff --git a/Android.bp b/Android.bp index c37d777db..b944941ad 100644 --- a/Android.bp +++ b/Android.bp @@ -141,3 +141,12 @@ build_prop { "//packages/modules/Virtualization/build/microdroid", ], } + +build_prop { + name: "system_ext-build.prop", + stem: "build.prop", + system_ext_specific: true, + product_config: ":product_config", + relative_install_path: "etc", // system_ext/etc/build.prop + visibility: ["//visibility:private"], +} diff --git a/android/build_prop.go b/android/build_prop.go index 14e5e2310..d48d94d4e 100644 --- a/android/build_prop.go +++ b/android/build_prop.go @@ -37,6 +37,9 @@ type buildPropProperties struct { // Path to a JSON file containing product configs. Product_config *string `android:"path"` + + // Optional subdirectory under which this file is installed into + Relative_install_path *string } type buildPropModule struct { @@ -56,6 +59,8 @@ func (p *buildPropModule) propFiles(ctx ModuleContext) Paths { partition := p.PartitionTag(ctx.DeviceConfig()) if partition == "system" { return ctx.Config().SystemPropFiles(ctx) + } else if partition == "system_ext" { + return ctx.Config().SystemExtPropFiles(ctx) } return nil } @@ -84,8 +89,8 @@ func (p *buildPropModule) GenerateAndroidBuildActions(ctx ModuleContext) { } partition := p.PartitionTag(ctx.DeviceConfig()) - if partition != "system" { - ctx.PropertyErrorf("partition", "unsupported partition %q: only \"system\" is supported", partition) + if partition != "system" && partition != "system_ext" { + ctx.PropertyErrorf("partition", "unsupported partition %q: only \"system\" and \"system_ext\" are supported", partition) return } @@ -134,7 +139,7 @@ func (p *buildPropModule) GenerateAndroidBuildActions(ctx ModuleContext) { rule.Build(ctx.ModuleName(), "generating build.prop") - p.installPath = PathForModuleInstall(ctx) + p.installPath = PathForModuleInstall(ctx, proptools.String(p.properties.Relative_install_path)) ctx.InstallFile(p.installPath, p.stem(), p.outputFilePath) ctx.SetOutputFiles(Paths{p.outputFilePath}, "") diff --git a/android/config.go b/android/config.go index 40a73d6e7..d27848dc9 100644 --- a/android/config.go +++ b/android/config.go @@ -2086,6 +2086,10 @@ func (c *config) SystemPropFiles(ctx PathContext) Paths { return PathsForSource(ctx, c.productVariables.SystemPropFiles) } +func (c *config) SystemExtPropFiles(ctx PathContext) Paths { + return PathsForSource(ctx, c.productVariables.SystemExtPropFiles) +} + func (c *config) EnableUffdGc() string { return String(c.productVariables.EnableUffdGc) } diff --git a/android/variable.go b/android/variable.go index a715e0eb0..c9b29f1d0 100644 --- a/android/variable.go +++ b/android/variable.go @@ -508,7 +508,8 @@ type ProductVariables struct { ArtTargetIncludeDebugBuild *bool `json:",omitempty"` - SystemPropFiles []string `json:",omitempty"` + SystemPropFiles []string `json:",omitempty"` + SystemExtPropFiles []string `json:",omitempty"` EnableUffdGc *string `json:",omitempty"` } diff --git a/scripts/gen_build_prop.py b/scripts/gen_build_prop.py index c0d473585..2bd246dc7 100644 --- a/scripts/gen_build_prop.py +++ b/scripts/gen_build_prop.py @@ -129,16 +129,16 @@ def generate_common_build_props(args): print(f"ro.product.{partition}.name={config['DeviceProduct']}") if partition != "system": - if config["ModelForAttestation"]: - print(f"ro.product.model_for_attestation={config['ModelForAttestation']}") - if config["BrandForAttestation"]: - print(f"ro.product.brand_for_attestation={config['BrandForAttestation']}") - if config["NameForAttestation"]: - print(f"ro.product.name_for_attestation={config['NameForAttestation']}") - if config["DeviceForAttestation"]: - print(f"ro.product.device_for_attestation={config['DeviceForAttestation']}") - if config["ManufacturerForAttestation"]: - print(f"ro.product.manufacturer_for_attestation={config['ManufacturerForAttestation']}") + if config["ProductModelForAttestation"]: + print(f"ro.product.model_for_attestation={config['ProductModelForAttestation']}") + if config["ProductBrandForAttestation"]: + print(f"ro.product.brand_for_attestation={config['ProductBrandForAttestation']}") + if config["ProductNameForAttestation"]: + print(f"ro.product.name_for_attestation={config['ProductNameForAttestation']}") + if config["ProductDeviceForAttestation"]: + print(f"ro.product.device_for_attestation={config['ProductDeviceForAttestation']}") + if config["ProductManufacturerForAttestation"]: + print(f"ro.product.manufacturer_for_attestation={config['ProductManufacturerForAttestation']}") if config["ZygoteForce64"]: if partition == "vendor": @@ -511,6 +511,15 @@ def build_system_prop(args): build_prop(args, gen_build_info=True, gen_common_build_props=True, variables=variables) +def build_system_ext_prop(args): + config = args.config + + # Order matters here. When there are duplicates, the last one wins. + # TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter + variables = ["PRODUCT_SYSTEM_EXT_PROPERTIES"] + + build_prop(args, gen_build_info=False, gen_common_build_props=True, variables=variables) + ''' def build_vendor_prop(args): config = args.config @@ -563,6 +572,8 @@ def main(): with contextlib.redirect_stdout(args.out): if args.partition == "system": build_system_prop(args) + elif args.partition == "system_ext": + build_system_ext_prop(args) ''' elif args.partition == "vendor": build_vendor_prop(args)