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

Commit 5e1525d1 authored by Spandan Das's avatar Spandan Das Committed by Gerrit Code Review
Browse files

Merge changes Ibbb14b0d,I9aa552e3

* changes:
  Create config_setting per apex_name
  Add a function to create config_setting(s)
parents 2f6179d4 4242f104
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -273,6 +273,12 @@ type TopDownMutatorContext interface {
	// This function can be used to create alias definitions in a directory that is different
	// from the directory of the visited Soong module.
	CreateBazelTargetAliasInDir(dir string, name string, actual bazel.Label)

	// CreateBazelConfigSetting creates a config_setting in <dir>/BUILD.bazel
	// build/bazel has several static config_setting(s) that are used in Bazel builds.
	// This function can be used to createa additional config_setting(s) based on the build graph
	// (e.g. a config_setting specific to an apex variant)
	CreateBazelConfigSetting(csa bazel.ConfigSettingAttributes, ca CommonAttributes, dir string)
}

type topDownMutatorContext struct {
@@ -738,6 +744,23 @@ func (t *topDownMutatorContext) CreateBazelTargetAliasInDir(
	mod.base().addBp2buildInfo(info)
}

func (t *topDownMutatorContext) CreateBazelConfigSetting(
	csa bazel.ConfigSettingAttributes,
	ca CommonAttributes,
	dir string) {
	mod := t.Module()
	info := bp2buildInfo{
		Dir: dir,
		BazelProps: bazel.BazelTargetModuleProperties{
			Rule_class: "config_setting",
		},
		CommonAttrs:     ca,
		ConstraintAttrs: constraintAttributes{},
		Attrs:           &csa,
	}
	mod.base().addBp2buildInfo(info)
}

// ApexAvailableTags converts the apex_available property value of an ApexModule
// module and returns it as a list of keyed tags.
func ApexAvailableTags(mod Module) bazel.StringListAttribute {
+6 −4
Original line number Diff line number Diff line
@@ -268,9 +268,8 @@ func (ct configurationType) validateConfig(config string) {
	case productVariables:
		// do nothing
	case osAndInApex:
		if _, ok := osAndInApexMap[config]; !ok {
			panic(fmt.Errorf("Unknown os+in_apex config: %s", config))
		}
		// do nothing
		// this axis can contain additional per-apex keys
	case inApex:
		if _, ok := inApexMap[config]; !ok {
			panic(fmt.Errorf("Unknown in_apex config: %s", config))
@@ -299,7 +298,10 @@ func (ca ConfigurationAxis) SelectKey(config string) string {
		}
		return fmt.Sprintf("%s:%s", productVariableBazelPackage, config)
	case osAndInApex:
		return osAndInApexMap[config]
		if ret, exists := osAndInApexMap[config]; exists {
			return ret
		}
		return config
	case inApex:
		return inApexMap[config]
	default:
+11 −0
Original line number Diff line number Diff line
@@ -1424,3 +1424,14 @@ func TryVariableSubstitution(s string, productVariable string) (string, bool) {
	sub := productVariableSubstitutionPattern.ReplaceAllString(s, "$("+productVariable+")")
	return sub, s != sub
}

// StringMapAttribute is a map of strings.
// The use case for this is storing the flag_values in a config_setting object.
// Bazel rules do not support map attributes, and this should NOT be used in Bazel rules.
type StringMapAttribute map[string]string

// ConfigSettingAttributes stores the keys of a config_setting object.
type ConfigSettingAttributes struct {
	// Each key in Flag_values is a label to a custom string_setting
	Flag_values StringMapAttribute
}
+5 −0
Original line number Diff line number Diff line
@@ -600,6 +600,11 @@ func prettyPrint(propertyValue reflect.Value, indent int, emitZeroValues bool) (
		// TODO(b/164227191): implement pretty print for interfaces.
		// Interfaces are used for for arch, multilib and target properties.
		return "", nil
	case reflect.Map:
		if v, ok := propertyValue.Interface().(bazel.StringMapAttribute); ok {
			return starlark_fmt.PrintStringStringDict(v, indent), nil
		}
		return "", fmt.Errorf("bp2build expects map of type map[string]string for field: %s", propertyValue)
	default:
		return "", fmt.Errorf(
			"unexpected kind for property struct field: %s", propertyValue.Kind())
+33 −0
Original line number Diff line number Diff line
@@ -1898,3 +1898,36 @@ func TestGenerateApiBazelTargets(t *testing.T) {
		Description:          "Generating API contribution Bazel targets for custom module",
	})
}

func TestGenerateConfigSetting(t *testing.T) {
	bp := `
	custom {
		name: "foo",
		test_config_setting: true,
	}
	`
	expectedBazelTargets := []string{
		MakeBazelTargetNoRestrictions(
			"config_setting",
			"foo_config_setting",
			AttrNameToString{
				"flag_values": `{
        "//build/bazel/rules/my_string_setting": "foo",
    }`,
			},
		),
		MakeBazelTarget(
			"custom",
			"foo",
			AttrNameToString{},
		),
	}
	registerCustomModule := func(ctx android.RegistrationContext) {
		ctx.RegisterModuleType("custom", customModuleFactoryHostAndDevice)
	}
	RunBp2BuildTestCase(t, registerCustomModule, Bp2buildTestCase{
		Blueprint:            bp,
		ExpectedBazelTargets: expectedBazelTargets,
		Description:          "Generating API contribution Bazel targets for custom module",
	})
}
Loading