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

Commit 909eaf52 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "soong_config: bool_variables shortcut" into rvc-dev

parents bc6341b8 1934adc0
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -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"],
}

@@ -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
+4 −10
Original line number Diff line number Diff line
@@ -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"],
//     }
//
@@ -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
@@ -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"],
//     }
//
@@ -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"],
+2 −5
Original line number Diff line number Diff line
@@ -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"],
		}

@@ -56,10 +57,6 @@ func TestSoongConfigModule(t *testing.T) {
			name: "feature1",
		}

		soong_config_bool_variable {
			name: "feature2",
		}

		soong_config_bool_variable {
			name: "FEATURE3",
		}
+15 −0
Original line number Diff line number Diff line
@@ -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
}
@@ -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
}

+76 −0
Original line number Diff line number Diff line
@@ -124,6 +124,10 @@ var fixSteps = []FixStep{
		Name: "removeHidlInterfaceTypes",
		Fix:  removeHidlInterfaceTypes,
	},
	{
		Name: "removeSoongConfigBoolVariable",
		Fix:  removeSoongConfigBoolVariable,
	},
}

func NewFixRequest() FixRequest {
@@ -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