Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eebb2593 authored by Yu Liu's avatar Yu Liu
Browse files

Handle the case where the release value set is a list.

Bug: 304814040
Test: CI, unit test,
b build build/make/tools/aconfig:aconfig.test.cpp
b test build/make/tools/aconfig:AconfigJavaHostTest

Change-Id: I9ca939348a063c39e9528f24e788f9757458d30c
parent 7c81b2b2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -74,8 +74,8 @@ func (module *DeclarationsModule) DepsMutator(ctx android.BottomUpMutatorContext
	// RELEASE_ACONFIG_VALUE_SETS, and add any aconfig_values that
	// match our package.
	valuesFromConfig := ctx.Config().ReleaseAconfigValueSets()
	if valuesFromConfig != "" {
		ctx.AddDependency(ctx.Module(), implicitValuesTag, valuesFromConfig)
	if len(valuesFromConfig) > 0 {
		ctx.AddDependency(ctx.Module(), implicitValuesTag, valuesFromConfig...)
	}
}

+2 −0
Original line number Diff line number Diff line
@@ -531,6 +531,8 @@ var (
	}

	Bp2buildModuleAlwaysConvertList = []string{
		"aconfig.test.cpp",
		"AconfigJavaHostTest",
		// aconfig
		"libonce_cell",
		"libanyhow",
+13 −11
Original line number Diff line number Diff line
@@ -200,21 +200,23 @@ func (c Config) ReleaseVersion() string {
}

// The aconfig value set passed to aconfig, derived from RELEASE_VERSION
func (c Config) ReleaseAconfigValueSets() string {
func (c Config) ReleaseAconfigValueSets() []string {
	// This logic to handle both Soong module name and bazel target is temporary in order to
	// provide backward compatibility where aosp and internal both have the release
	// aconfig value set but can't be updated at the same time to use bazel target
	value := strings.Split(c.config.productVariables.ReleaseAconfigValueSets, ":")
	value_len := len(value)
	if value_len > 2 {
	var valueSets []string
	for _, valueSet := range c.config.productVariables.ReleaseAconfigValueSets {
		value := strings.Split(valueSet, ":")
		valueLen := len(value)
		if valueLen > 2 {
			// This shouldn't happen as this should be either a module name or a bazel target path.
		panic(fmt.Errorf("config file: invalid value for release aconfig value sets: %s",
			c.config.productVariables.ReleaseAconfigValueSets))
			panic(fmt.Errorf("config file: invalid value for release aconfig value sets: %s", valueSet))
		}
	if value_len > 0 {
		return value[value_len-1]
		if valueLen > 0 {
			valueSets = append(valueSets, value[valueLen-1])
		}
	return ""
	}
	return valueSets
}

// The flag default permission value passed to aconfig
+2 −2
Original line number Diff line number Diff line
@@ -475,7 +475,7 @@ type ProductVariables struct {
	BuildVersionTags    []string `json:",omitempty"`

	ReleaseVersion          string   `json:",omitempty"`
	ReleaseAconfigValueSets string `json:",omitempty"`
	ReleaseAconfigValueSets []string `json:",omitempty"`

	ReleaseAconfigFlagDefaultPermission string `json:",omitempty"`

+40 −2
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ type bazelLabel struct {
	target string
}

const releaseAconfigValueSetsName = "release_aconfig_value_sets"

func (l *bazelLabel) Less(other *bazelLabel) bool {
	if l.repo < other.repo {
		return true
@@ -343,10 +345,11 @@ func platformMappingSingleProduct(
		result.WriteString(fmt.Sprintf("    --//build/bazel/product_config:product_brand=%s\n", productVariables.ProductBrand))
		result.WriteString(fmt.Sprintf("    --//build/bazel/product_config:product_manufacturer=%s\n", productVariables.ProductManufacturer))
		result.WriteString(fmt.Sprintf("    --//build/bazel/product_config:release_aconfig_flag_default_permission=%s\n", productVariables.ReleaseAconfigFlagDefaultPermission))
		// Empty string can't be used as label_flag on the bazel side
		releaseAconfigValueSets := "//build/bazel/product_config:empty_aconfig_value_sets"
		if len(productVariables.ReleaseAconfigValueSets) > 0 {
			result.WriteString(fmt.Sprintf("    --//build/bazel/product_config:release_aconfig_value_sets=%s\n", productVariables.ReleaseAconfigValueSets))
			releaseAconfigValueSets = "@//" + label.pkg + ":" + releaseAconfigValueSetsName + "_" + label.target
		}
		result.WriteString(fmt.Sprintf("    --//build/bazel/product_config:release_aconfig_value_sets=%s\n", releaseAconfigValueSets))
		result.WriteString(fmt.Sprintf("    --//build/bazel/product_config:release_version=%s\n", productVariables.ReleaseVersion))
		result.WriteString(fmt.Sprintf("    --//build/bazel/product_config:platform_sdk_version=%d\n", platform_sdk_version))
		result.WriteString(fmt.Sprintf("    --//build/bazel/product_config:safestack=%t\n", proptools.Bool(productVariables.Safestack)))
@@ -481,6 +484,7 @@ func starlarkMapToProductVariables(in map[string]starlark.Value) (android.Produc
func createTargets(productLabelsToVariables map[bazelLabel]*android.ProductVariables, res map[string]BazelTargets) {
	createGeneratedAndroidCertificateDirectories(productLabelsToVariables, res)
	createAvbKeyFilegroups(productLabelsToVariables, res)
	createReleaseAconfigValueSetsFilegroup(productLabelsToVariables, res)
	for label, variables := range productLabelsToVariables {
		createSystemPartition(label, &variables.PartitionVarsForBazelMigrationOnlyDoNotUse, res)
	}
@@ -515,6 +519,40 @@ func createGeneratedAndroidCertificateDirectories(productLabelsToVariables map[b
	}
}

func createReleaseAconfigValueSetsFilegroup(productLabelsToVariables map[bazelLabel]*android.ProductVariables, targets map[string]BazelTargets) {
	for label, productVariables := range productLabelsToVariables {
		if len(productVariables.ReleaseAconfigValueSets) > 0 {
			key := label.target
			dir := label.pkg
			var value_sets strings.Builder
			for _, value_set := range productVariables.ReleaseAconfigValueSets {
				value_sets.WriteString("        \"" + value_set + "\",\n")
			}

			name := releaseAconfigValueSetsName + "_" + key
			content := "aconfig_value_sets(\n" +
				"    name = \"" + name + "\",\n" +
				"    value_sets = [\n" +
				value_sets.String() +
				"    ],\n" +
				"    visibility = [\"//visibility:public\"],\n" +
				")"
			targets[dir] = append(targets[dir], BazelTarget{
				name:        name,
				packageName: dir,
				content:     content,
				ruleClass:   "aconfig_value_sets",
				loads: []BazelLoad{{
					file: "//build/bazel/rules/aconfig:aconfig_value_sets.bzl",
					symbols: []BazelLoadSymbol{{
						symbol: "aconfig_value_sets",
					}},
				}},
			})
		}
	}
}

func createAvbKeyFilegroups(productLabelsToVariables map[bazelLabel]*android.ProductVariables, targets map[string]BazelTargets) {
	var allAvbKeys []string
	for _, productVariables := range productLabelsToVariables {