Add support for merging defaults soong_config_module_types into bp2build
select statements. This supports defaults from the same or different namespaces, and transitively defaults as well. Test: soong unit tests Test: CI Change-Id: I99435bacfcfbfe20ad753b8021a1779531d7595a
This commit is contained in:
@@ -213,10 +213,60 @@ func InitDefaultsModule(module DefaultsModule) {
|
||||
|
||||
var _ Defaults = (*DefaultsModuleBase)(nil)
|
||||
|
||||
// applyNamespacedVariableDefaults only runs in bp2build mode for
|
||||
// defaultable/defaults modules. Its purpose is to merge namespaced product
|
||||
// variable props from defaults deps, even if those defaults are custom module
|
||||
// types created from soong_config_module_type, e.g. one that's wrapping a
|
||||
// cc_defaults or java_defaults.
|
||||
func applyNamespacedVariableDefaults(defaultDep Defaults, ctx TopDownMutatorContext) {
|
||||
var dep, b Bazelable
|
||||
|
||||
dep, ok := defaultDep.(Bazelable)
|
||||
if !ok {
|
||||
if depMod, ok := defaultDep.(Module); ok {
|
||||
// Track that this dependency hasn't been converted to bp2build yet.
|
||||
ctx.AddUnconvertedBp2buildDep(depMod.Name())
|
||||
return
|
||||
} else {
|
||||
panic("Expected default dep to be a Module.")
|
||||
}
|
||||
}
|
||||
|
||||
b, ok = ctx.Module().(Bazelable)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
// namespacedVariableProps is a map from namespaces (e.g. acme, android,
|
||||
// vendor_foo) to a slice of soong_config_variable struct pointers,
|
||||
// containing properties for that particular module.
|
||||
src := dep.namespacedVariableProps()
|
||||
dst := b.namespacedVariableProps()
|
||||
if dst == nil {
|
||||
dst = make(namespacedVariableProperties)
|
||||
}
|
||||
|
||||
// Propagate all soong_config_variable structs from the dep. We'll merge the
|
||||
// actual property values later in variable.go.
|
||||
for namespace := range src {
|
||||
if dst[namespace] == nil {
|
||||
dst[namespace] = []interface{}{}
|
||||
}
|
||||
for _, i := range src[namespace] {
|
||||
dst[namespace] = append(dst[namespace], i)
|
||||
}
|
||||
}
|
||||
|
||||
b.setNamespacedVariableProps(dst)
|
||||
}
|
||||
|
||||
func (defaultable *DefaultableModuleBase) applyDefaults(ctx TopDownMutatorContext,
|
||||
defaultsList []Defaults) {
|
||||
|
||||
for _, defaults := range defaultsList {
|
||||
if ctx.Config().runningAsBp2Build {
|
||||
applyNamespacedVariableDefaults(defaults, ctx)
|
||||
}
|
||||
for _, prop := range defaultable.defaultableProperties {
|
||||
if prop == defaultable.defaultableVariableProperties {
|
||||
defaultable.applyDefaultVariableProperties(ctx, defaults, prop)
|
||||
|
Reference in New Issue
Block a user