xref: /aosp_15_r20/build/soong/android/configurable_properties.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Workerpackage android
2*333d2b36SAndroid Build Coastguard Worker
3*333d2b36SAndroid Build Coastguard Workerimport "github.com/google/blueprint/proptools"
4*333d2b36SAndroid Build Coastguard Worker
5*333d2b36SAndroid Build Coastguard Worker// CreateSelectOsToBool is a utility function that makes it easy to create a
6*333d2b36SAndroid Build Coastguard Worker// Configurable property value that maps from os to a bool. Use an empty string
7*333d2b36SAndroid Build Coastguard Worker// to indicate a "default" case.
8*333d2b36SAndroid Build Coastguard Workerfunc CreateSelectOsToBool(cases map[string]*bool) proptools.Configurable[bool] {
9*333d2b36SAndroid Build Coastguard Worker	var resultCases []proptools.ConfigurableCase[bool]
10*333d2b36SAndroid Build Coastguard Worker	for pattern, value := range cases {
11*333d2b36SAndroid Build Coastguard Worker		if pattern == "" {
12*333d2b36SAndroid Build Coastguard Worker			resultCases = append(resultCases, proptools.NewConfigurableCase(
13*333d2b36SAndroid Build Coastguard Worker				[]proptools.ConfigurablePattern{proptools.NewDefaultConfigurablePattern()},
14*333d2b36SAndroid Build Coastguard Worker				value,
15*333d2b36SAndroid Build Coastguard Worker			))
16*333d2b36SAndroid Build Coastguard Worker		} else {
17*333d2b36SAndroid Build Coastguard Worker			resultCases = append(resultCases, proptools.NewConfigurableCase(
18*333d2b36SAndroid Build Coastguard Worker				[]proptools.ConfigurablePattern{proptools.NewStringConfigurablePattern(pattern)},
19*333d2b36SAndroid Build Coastguard Worker				value,
20*333d2b36SAndroid Build Coastguard Worker			))
21*333d2b36SAndroid Build Coastguard Worker		}
22*333d2b36SAndroid Build Coastguard Worker	}
23*333d2b36SAndroid Build Coastguard Worker
24*333d2b36SAndroid Build Coastguard Worker	return proptools.NewConfigurable(
25*333d2b36SAndroid Build Coastguard Worker		[]proptools.ConfigurableCondition{proptools.NewConfigurableCondition("os", nil)},
26*333d2b36SAndroid Build Coastguard Worker		resultCases,
27*333d2b36SAndroid Build Coastguard Worker	)
28*333d2b36SAndroid Build Coastguard Worker}
29*333d2b36SAndroid Build Coastguard Worker
30*333d2b36SAndroid Build Coastguard Workerfunc NewSimpleConfigurable[T proptools.ConfigurableElements](value T) proptools.Configurable[T] {
31*333d2b36SAndroid Build Coastguard Worker	return proptools.NewConfigurable(nil, []proptools.ConfigurableCase[T]{
32*333d2b36SAndroid Build Coastguard Worker		proptools.NewConfigurableCase(nil, &value),
33*333d2b36SAndroid Build Coastguard Worker	})
34*333d2b36SAndroid Build Coastguard Worker}
35