diff options
Diffstat (limited to 'android/variable.go')
| -rw-r--r-- | android/variable.go | 57 | 
1 files changed, 57 insertions, 0 deletions
| diff --git a/android/variable.go b/android/variable.go index 57a01a4bb..859a0b0b0 100644 --- a/android/variable.go +++ b/android/variable.go @@ -449,6 +449,63 @@ func (v *productVariables) SetDefaultConfig() {  	}  } +// ProductConfigContext requires the access to the Module to get product config properties. +type ProductConfigContext interface { +	Module() Module +} + +// ProductConfigProperty contains the information for a single property (may be a struct) paired +// with the appropriate ProductConfigVariable. +type ProductConfigProperty struct { +	ProductConfigVariable string +	Property              interface{} +} + +// ProductConfigProperties is a map of property name to a slice of ProductConfigProperty such that +// all it all product variable-specific versions of a property are easily accessed together +type ProductConfigProperties map[string][]ProductConfigProperty + +// ProductVariableProperties returns a ProductConfigProperties containing only the properties which +// have been set for the module in the given context. +func ProductVariableProperties(ctx ProductConfigContext) ProductConfigProperties { +	module := ctx.Module() +	moduleBase := module.base() + +	productConfigProperties := ProductConfigProperties{} + +	if moduleBase.variableProperties == nil { +		return productConfigProperties +	} + +	variableValues := reflect.ValueOf(moduleBase.variableProperties).Elem().FieldByName("Product_variables") +	for i := 0; i < variableValues.NumField(); i++ { +		variableValue := variableValues.Field(i) +		// Check if any properties were set for the module +		if variableValue.IsZero() { +			continue +		} +		// e.g. Platform_sdk_version, Unbundled_build, Malloc_not_svelte, etc. +		productVariableName := variableValues.Type().Field(i).Name +		for j := 0; j < variableValue.NumField(); j++ { +			property := variableValue.Field(j) +			// If the property wasn't set, no need to pass it along +			if property.IsZero() { +				continue +			} + +			// e.g. Asflags, Cflags, Enabled, etc. +			propertyName := variableValue.Type().Field(j).Name +			productConfigProperties[propertyName] = append(productConfigProperties[propertyName], +				ProductConfigProperty{ +					ProductConfigVariable: productVariableName, +					Property:              property.Interface(), +				}) +		} +	} + +	return productConfigProperties +} +  func VariableMutator(mctx BottomUpMutatorContext) {  	var module Module  	var ok bool |