Fix Soong CMakeLists.txt generator
Problem: Soong does not guarantee that the list of parameters will
be in individual strings. This means the CMakeLists generator can
receive as input:
params = {"-isystem", "path/to/system"}
or it could receive:
params = {"-isystem path/to/system"}
Solution: Normalize the list of parameters into a flattened list
of parameters where each parameters is in an individual string.
Fixes: 143378093
Test: None
Change-Id: I9bd1a2006a1cf0ba383f467748b6fd4eadef6866
diff --git a/cc/cmakelists.go b/cc/cmakelists.go
index 7b4f89b..be18ab9 100644
--- a/cc/cmakelists.go
+++ b/cc/cmakelists.go
@@ -306,6 +306,20 @@
return flag
}
+// Flattens a list of strings potentially containing space characters into a list of string containing no
+// spaces.
+func normalizeParameters(params []string) []string {
+ var flatParams []string
+ for _, s := range params {
+ s = strings.Trim(s, " ")
+ if len(s) == 0 {
+ continue
+ }
+ flatParams = append(flatParams, strings.Split(s, " ")...)
+ }
+ return flatParams
+}
+
func parseCompilerParameters(params []string, ctx android.SingletonContext, f *os.File) compilerParameters {
var compilerParameters = makeCompilerParameters()
@@ -313,6 +327,15 @@
f.WriteString(fmt.Sprintf("# Raw param [%d] = '%s'\n", i, str))
}
+ // Soong does not guarantee that each flag will be in an individual string. e.g: The
+ // input received could be:
+ // params = {"-isystem", "path/to/system"}
+ // or it could be
+ // params = {"-isystem path/to/system"}
+ // To normalize the input, we split all strings with the "space" character and consolidate
+ // all tokens into a flattened parameters list
+ params = normalizeParameters(params)
+
for i := 0; i < len(params); i++ {
param := params[i]
if param == "" {