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

Commit bff73dd6 authored by Yu Liu's avatar Yu Liu Committed by Automerger Merge Worker
Browse files

Merge "Handle the case where the release value set is a list." into main am:...

Merge "Handle the case where the release value set is a list." into main am: f613da45 am: 81b7edc4 am: 4af9447c

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2787773



Change-Id: I16b8c57df048adf1973e59527abadd1d21c693a0
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 919c5f7e 4af9447c
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
@@ -539,6 +539,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 {