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

Commit ae3e4cc2 authored by Cole Faust's avatar Cole Faust Committed by Gerrit Code Review
Browse files

Merge "Use product variables from the overridden apex"

parents 36d1cd01 912bc886
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1334,7 +1334,7 @@ func (attrs *CommonAttributes) fillCommonBp2BuildModuleAttrs(ctx *topDownMutator
// Check product variables for `enabled: true` flag override.
// Returns a list of the constraint_value targets who enable this override.
func productVariableConfigEnableLabels(ctx *topDownMutatorContext) []bazel.Label {
	productVariableProps := ProductVariableProperties(ctx)
	productVariableProps := ProductVariableProperties(ctx, ctx.Module())
	productConfigEnablingTargets := []bazel.Label{}
	const propName = "Enabled"
	if productConfigProps, exists := productVariableProps[propName]; exists {
+2 −3
Original line number Diff line number Diff line
@@ -663,9 +663,8 @@ func (p *ProductConfigProperty) SelectKey() string {
type ProductConfigProperties map[string]map[ProductConfigProperty]interface{}

// ProductVariableProperties returns a ProductConfigProperties containing only the properties which
// have been set for the module in the given context.
func ProductVariableProperties(ctx BazelConversionPathContext) ProductConfigProperties {
	module := ctx.Module()
// have been set for the given module.
func ProductVariableProperties(ctx ArchVariantContext, module Module) ProductConfigProperties {
	moduleBase := module.base()

	productConfigProperties := ProductConfigProperties{}
+3 −8
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ func registerApexBuildComponents(ctx android.RegistrationContext) {
	ctx.RegisterModuleType("apex", BundleFactory)
	ctx.RegisterModuleType("apex_test", TestApexBundleFactory)
	ctx.RegisterModuleType("apex_vndk", vndkApexBundleFactory)
	ctx.RegisterModuleType("apex_defaults", defaultsFactory)
	ctx.RegisterModuleType("apex_defaults", DefaultsFactory)
	ctx.RegisterModuleType("prebuilt_apex", PrebuiltFactory)
	ctx.RegisterModuleType("override_apex", OverrideApexFactory)
	ctx.RegisterModuleType("apex_set", apexSetFactory)
@@ -2728,14 +2728,9 @@ type Defaults struct {
}

// apex_defaults provides defaultable properties to other apex modules.
func defaultsFactory() android.Module {
	return DefaultsFactory()
}

func DefaultsFactory(props ...interface{}) android.Module {
func DefaultsFactory() android.Module {
	module := &Defaults{}

	module.AddProperties(props...)
	module.AddProperties(
		&apexBundleProperties{},
		&apexTargetBundleProperties{},
@@ -3538,7 +3533,7 @@ func convertWithBp2build(a *apexBundle, ctx android.TopDownMutatorContext) (baze
		fileContextsLabelAttribute.SetValue(android.BazelLabelForModuleSrcSingle(ctx, *a.properties.File_contexts))
	}

	productVariableProps := android.ProductVariableProperties(ctx)
	productVariableProps := android.ProductVariableProperties(ctx, a)
	// TODO(b/219503907) this would need to be set to a.MinSdkVersionValue(ctx) but
	// given it's coming via config, we probably don't want to put it in here.
	var minSdkVersion bazel.StringAttribute
+87 −0
Original line number Diff line number Diff line
@@ -61,7 +61,10 @@ func registerOverrideApexModuleTypes(ctx android.RegistrationContext) {
	ctx.RegisterModuleType("android_app_certificate", java.AndroidAppCertificateFactory)
	ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
	ctx.RegisterModuleType("apex", apex.BundleFactory)
	ctx.RegisterModuleType("apex_defaults", apex.DefaultsFactory)
	ctx.RegisterModuleType("prebuilt_etc", etc.PrebuiltEtcFactory)
	ctx.RegisterModuleType("soong_config_module_type", android.SoongConfigModuleTypeFactory)
	ctx.RegisterModuleType("soong_config_string_variable", android.SoongConfigStringVariableDummyFactory)
}

func TestApexBundleSimple(t *testing.T) {
@@ -1359,3 +1362,87 @@ apex_test {
			}),
		}})
}

func TestApexBundle_overridePlusProductVars(t *testing.T) {
	// Reproduction of b/271424349
	// Tests that overriding an apex that uses product variables correctly copies the product var
	// selects over to the override.
	runOverrideApexTestCase(t, Bp2buildTestCase{
		Description:                "apex - overriding a module that uses product vars",
		ModuleTypeUnderTest:        "override_apex",
		ModuleTypeUnderTestFactory: apex.OverrideApexFactory,
		Blueprint: `
soong_config_string_variable {
    name: "library_linking_strategy",
    values: [
        "prefer_static",
    ],
}

soong_config_module_type {
    name: "library_linking_strategy_apex_defaults",
    module_type: "apex_defaults",
    config_namespace: "ANDROID",
    variables: ["library_linking_strategy"],
    properties: [
        "manifest",
        "min_sdk_version",
    ],
}

library_linking_strategy_apex_defaults {
    name: "higher_min_sdk_when_prefer_static",
    soong_config_variables: {
        library_linking_strategy: {
            // Use the R min_sdk_version
            prefer_static: {},
            // Override the R min_sdk_version to min_sdk_version that supports dcla
            conditions_default: {
                min_sdk_version: "31",
            },
        },
    },
}

filegroup {
	name: "foo-file_contexts",
	srcs: [
		"com.android.apogee-file_contexts",
	],
	bazel_module: { bp2build_available: false },
}

apex {
	name: "foo",
	defaults: ["higher_min_sdk_when_prefer_static"],
	min_sdk_version: "30",
	package_name: "pkg_name",
	file_contexts: ":foo-file_contexts",
}
override_apex {
	name: "override_foo",
	base: ":foo",
	package_name: "override_pkg_name",
}
`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("apex", "foo", AttrNameToString{
				"file_contexts": `":foo-file_contexts"`,
				"manifest":      `"apex_manifest.json"`,
				"min_sdk_version": `select({
        "//build/bazel/product_variables:android__library_linking_strategy__prefer_static": "30",
        "//conditions:default": "31",
    })`,
				"package_name": `"pkg_name"`,
			}), MakeBazelTarget("apex", "override_foo", AttrNameToString{
				"base_apex_name": `"foo"`,
				"file_contexts":  `":foo-file_contexts"`,
				"manifest":       `"apex_manifest.json"`,
				"min_sdk_version": `select({
        "//build/bazel/product_variables:android__library_linking_strategy__prefer_static": "30",
        "//conditions:default": "31",
    })`,
				"package_name": `"override_pkg_name"`,
			}),
		}})
}
+1 −1
Original line number Diff line number Diff line
@@ -454,7 +454,7 @@ func (m *customModule) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
			}
		}
	}
	productVariableProps := android.ProductVariableProperties(ctx)
	productVariableProps := android.ProductVariableProperties(ctx, ctx.Module())
	if props, ok := productVariableProps["String_literal_prop"]; ok {
		for c, p := range props {
			if val, ok := p.(*string); ok {
Loading