Loading README.md +2 −5 Original line number Diff line number Diff line Loading @@ -419,7 +419,8 @@ soong_config_module_type { name: "acme_cc_defaults", module_type: "cc_defaults", config_namespace: "acme", variables: ["board", "feature"], variables: ["board"], bool_variables: ["feature"], properties: ["cflags", "srcs"], } Loading @@ -427,10 +428,6 @@ soong_config_string_variable { name: "board", values: ["soc_a", "soc_b"], } soong_config_bool_variable { name: "feature", } ``` This example describes a new `acme_cc_defaults` module type that extends the Loading android/soong_config_modules.go +4 −10 Original line number Diff line number Diff line Loading @@ -88,7 +88,8 @@ type soongConfigModuleTypeImportProperties struct { // name: "acme_cc_defaults", // module_type: "cc_defaults", // config_namespace: "acme", // variables: ["board", "feature"], // variables: ["board"], // bool_variables: ["feature"], // properties: ["cflags", "srcs"], // } // Loading @@ -97,10 +98,6 @@ type soongConfigModuleTypeImportProperties struct { // values: ["soc_a", "soc_b"], // } // // soong_config_bool_variable { // name: "feature", // } // // If an acme BoardConfig.mk file contained: // // SOONG_CONFIG_NAMESPACES += acme Loading Loading @@ -149,7 +146,8 @@ type soongConfigModuleTypeModule struct { // name: "acme_cc_defaults", // module_type: "cc_defaults", // config_namespace: "acme", // variables: ["board", "feature"], // variables: ["board"], // bool_variables: ["feature"], // properties: ["cflags", "srcs"], // } // Loading @@ -158,10 +156,6 @@ type soongConfigModuleTypeModule struct { // values: ["soc_a", "soc_b"], // } // // soong_config_bool_variable { // name: "feature", // } // // acme_cc_defaults { // name: "acme_defaults", // cflags: ["-DGENERIC"], Loading android/soong_config_modules_test.go +2 −5 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ func TestSoongConfigModule(t *testing.T) { name: "acme_test_defaults", module_type: "test_defaults", config_namespace: "acme", variables: ["board", "feature1", "feature2", "FEATURE3"], variables: ["board", "feature1", "FEATURE3"], bool_variables: ["feature2"], properties: ["cflags", "srcs"], } Loading @@ -56,10 +57,6 @@ func TestSoongConfigModule(t *testing.T) { name: "feature1", } soong_config_bool_variable { name: "feature2", } soong_config_bool_variable { name: "FEATURE3", } Loading android/soongconfig/modules.go +15 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,9 @@ type ModuleTypeProperties struct { // the list of SOONG_CONFIG variables that this module type will read Variables []string // the list of boolean SOONG_CONFIG variables that this module type will read Bool_variables []string // the list of properties that this module type will extend. Properties []string } Loading Loading @@ -146,6 +149,18 @@ func processModuleTypeDef(v *SoongConfigDefinition, def *parser.Module) (errs [] } v.ModuleTypes[props.Name] = mt for _, name := range props.Bool_variables { if name == "" { return []error{fmt.Errorf("bool_variable name must not be blank")} } mt.Variables = append(mt.Variables, &boolVariable{ baseVariable: baseVariable{ variable: name, }, }) } return nil } Loading bpfix/bpfix/bpfix.go +76 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,10 @@ var fixSteps = []FixStep{ Name: "removeHidlInterfaceTypes", Fix: removeHidlInterfaceTypes, }, { Name: "removeSoongConfigBoolVariable", Fix: removeSoongConfigBoolVariable, }, } func NewFixRequest() FixRequest { Loading Loading @@ -714,6 +718,78 @@ func removeHidlInterfaceTypes(f *Fixer) error { return nil } func removeSoongConfigBoolVariable(f *Fixer) error { found := map[string]bool{} newDefs := make([]parser.Definition, 0, len(f.tree.Defs)) for _, def := range f.tree.Defs { if mod, ok := def.(*parser.Module); ok && mod.Type == "soong_config_bool_variable" { if name, ok := getLiteralStringPropertyValue(mod, "name"); ok { found[name] = true } else { return fmt.Errorf("Found soong_config_bool_variable without a name") } } else { newDefs = append(newDefs, def) } } f.tree.Defs = newDefs if len(found) == 0 { return nil } return runPatchListMod(func(mod *parser.Module, buf []byte, patchList *parser.PatchList) error { if mod.Type != "soong_config_module_type" { return nil } variables, ok := getLiteralListProperty(mod, "variables") if !ok { return nil } boolValues := strings.Builder{} empty := true for _, item := range variables.Values { nameValue, ok := item.(*parser.String) if !ok { empty = false continue } if found[nameValue.Value] { patchList.Add(item.Pos().Offset, item.End().Offset+2, "") boolValues.WriteString(`"`) boolValues.WriteString(nameValue.Value) boolValues.WriteString(`",`) } else { empty = false } } if empty { *patchList = parser.PatchList{} prop, _ := mod.GetProperty("variables") patchList.Add(prop.Pos().Offset, prop.End().Offset+2, "") } if boolValues.Len() == 0 { return nil } bool_variables, ok := getLiteralListProperty(mod, "bool_variables") if ok { patchList.Add(bool_variables.RBracePos.Offset, bool_variables.RBracePos.Offset, ","+boolValues.String()) } else { patchList.Add(variables.RBracePos.Offset+2, variables.RBracePos.Offset+2, fmt.Sprintf(`bool_variables: [%s],`, boolValues.String())) } return nil })(f) return nil } // Converts the default source list property, 'srcs', to a single source property with a given name. // "LOCAL_MODULE" reference is also resolved during the conversion process. func convertToSingleSource(mod *parser.Module, srcPropertyName string) { Loading Loading
README.md +2 −5 Original line number Diff line number Diff line Loading @@ -419,7 +419,8 @@ soong_config_module_type { name: "acme_cc_defaults", module_type: "cc_defaults", config_namespace: "acme", variables: ["board", "feature"], variables: ["board"], bool_variables: ["feature"], properties: ["cflags", "srcs"], } Loading @@ -427,10 +428,6 @@ soong_config_string_variable { name: "board", values: ["soc_a", "soc_b"], } soong_config_bool_variable { name: "feature", } ``` This example describes a new `acme_cc_defaults` module type that extends the Loading
android/soong_config_modules.go +4 −10 Original line number Diff line number Diff line Loading @@ -88,7 +88,8 @@ type soongConfigModuleTypeImportProperties struct { // name: "acme_cc_defaults", // module_type: "cc_defaults", // config_namespace: "acme", // variables: ["board", "feature"], // variables: ["board"], // bool_variables: ["feature"], // properties: ["cflags", "srcs"], // } // Loading @@ -97,10 +98,6 @@ type soongConfigModuleTypeImportProperties struct { // values: ["soc_a", "soc_b"], // } // // soong_config_bool_variable { // name: "feature", // } // // If an acme BoardConfig.mk file contained: // // SOONG_CONFIG_NAMESPACES += acme Loading Loading @@ -149,7 +146,8 @@ type soongConfigModuleTypeModule struct { // name: "acme_cc_defaults", // module_type: "cc_defaults", // config_namespace: "acme", // variables: ["board", "feature"], // variables: ["board"], // bool_variables: ["feature"], // properties: ["cflags", "srcs"], // } // Loading @@ -158,10 +156,6 @@ type soongConfigModuleTypeModule struct { // values: ["soc_a", "soc_b"], // } // // soong_config_bool_variable { // name: "feature", // } // // acme_cc_defaults { // name: "acme_defaults", // cflags: ["-DGENERIC"], Loading
android/soong_config_modules_test.go +2 −5 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ func TestSoongConfigModule(t *testing.T) { name: "acme_test_defaults", module_type: "test_defaults", config_namespace: "acme", variables: ["board", "feature1", "feature2", "FEATURE3"], variables: ["board", "feature1", "FEATURE3"], bool_variables: ["feature2"], properties: ["cflags", "srcs"], } Loading @@ -56,10 +57,6 @@ func TestSoongConfigModule(t *testing.T) { name: "feature1", } soong_config_bool_variable { name: "feature2", } soong_config_bool_variable { name: "FEATURE3", } Loading
android/soongconfig/modules.go +15 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,9 @@ type ModuleTypeProperties struct { // the list of SOONG_CONFIG variables that this module type will read Variables []string // the list of boolean SOONG_CONFIG variables that this module type will read Bool_variables []string // the list of properties that this module type will extend. Properties []string } Loading Loading @@ -146,6 +149,18 @@ func processModuleTypeDef(v *SoongConfigDefinition, def *parser.Module) (errs [] } v.ModuleTypes[props.Name] = mt for _, name := range props.Bool_variables { if name == "" { return []error{fmt.Errorf("bool_variable name must not be blank")} } mt.Variables = append(mt.Variables, &boolVariable{ baseVariable: baseVariable{ variable: name, }, }) } return nil } Loading
bpfix/bpfix/bpfix.go +76 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,10 @@ var fixSteps = []FixStep{ Name: "removeHidlInterfaceTypes", Fix: removeHidlInterfaceTypes, }, { Name: "removeSoongConfigBoolVariable", Fix: removeSoongConfigBoolVariable, }, } func NewFixRequest() FixRequest { Loading Loading @@ -714,6 +718,78 @@ func removeHidlInterfaceTypes(f *Fixer) error { return nil } func removeSoongConfigBoolVariable(f *Fixer) error { found := map[string]bool{} newDefs := make([]parser.Definition, 0, len(f.tree.Defs)) for _, def := range f.tree.Defs { if mod, ok := def.(*parser.Module); ok && mod.Type == "soong_config_bool_variable" { if name, ok := getLiteralStringPropertyValue(mod, "name"); ok { found[name] = true } else { return fmt.Errorf("Found soong_config_bool_variable without a name") } } else { newDefs = append(newDefs, def) } } f.tree.Defs = newDefs if len(found) == 0 { return nil } return runPatchListMod(func(mod *parser.Module, buf []byte, patchList *parser.PatchList) error { if mod.Type != "soong_config_module_type" { return nil } variables, ok := getLiteralListProperty(mod, "variables") if !ok { return nil } boolValues := strings.Builder{} empty := true for _, item := range variables.Values { nameValue, ok := item.(*parser.String) if !ok { empty = false continue } if found[nameValue.Value] { patchList.Add(item.Pos().Offset, item.End().Offset+2, "") boolValues.WriteString(`"`) boolValues.WriteString(nameValue.Value) boolValues.WriteString(`",`) } else { empty = false } } if empty { *patchList = parser.PatchList{} prop, _ := mod.GetProperty("variables") patchList.Add(prop.Pos().Offset, prop.End().Offset+2, "") } if boolValues.Len() == 0 { return nil } bool_variables, ok := getLiteralListProperty(mod, "bool_variables") if ok { patchList.Add(bool_variables.RBracePos.Offset, bool_variables.RBracePos.Offset, ","+boolValues.String()) } else { patchList.Add(variables.RBracePos.Offset+2, variables.RBracePos.Offset+2, fmt.Sprintf(`bool_variables: [%s],`, boolValues.String())) } return nil })(f) return nil } // Converts the default source list property, 'srcs', to a single source property with a given name. // "LOCAL_MODULE" reference is also resolved during the conversion process. func convertToSingleSource(mod *parser.Module, srcPropertyName string) { Loading