Soong: Add relativeFilePathFlag category in CMakeList generator
* Add relativeFilePathFlag compiler flag category whose format must be
a=b/c/d, where "a" is the flag name and "b/c/d" is the flag value that
is a relative path
* During CMake conversion, "b/c/d" will be prefixed with ANDROID_ROOT
before being written to CMakeLists.txt
Bug: 112599284
Test: cd system/bt; mm -j40
croot; make -j40
Change-Id: I4bb039678482201db60f0af97ab280d5028e0463
diff --git a/cc/cmakelists.go b/cc/cmakelists.go
index a2f46cd..699f5c0 100644
--- a/cc/cmakelists.go
+++ b/cc/cmakelists.go
@@ -204,10 +204,11 @@
writeAllIncludeDirectories(c.systemHeaderSearchPath, f, true)
writeAllIncludeDirectories(c.headerSearchPath, f, false)
if cflags {
+ writeAllRelativeFilePathFlags(c.relativeFilePathFlags, f, "CMAKE_C_FLAGS")
writeAllFlags(c.flags, f, "CMAKE_C_FLAGS")
}
-
if cppflags {
+ writeAllRelativeFilePathFlags(c.relativeFilePathFlags, f, "CMAKE_CXX_FLAGS")
writeAllFlags(c.flags, f, "CMAKE_CXX_FLAGS")
}
if c.sysroot != "" {
@@ -249,6 +250,17 @@
f.WriteString("list (APPEND SOURCE_FILES ${TMP_HEADERS})\n\n")
}
+type relativeFilePathFlagType struct {
+ flag string
+ relativeFilePath string
+}
+
+func writeAllRelativeFilePathFlags(relativeFilePathFlags []relativeFilePathFlagType, f *os.File, tag string) {
+ for _, flag := range relativeFilePathFlags {
+ f.WriteString(fmt.Sprintf("set(%s \"${%s} %s=%s\")\n", tag, tag, flag.flag, buildCMakePath(flag.relativeFilePath)))
+ }
+}
+
func writeAllFlags(flags []string, f *os.File, tag string) {
for _, flag := range flags {
f.WriteString(fmt.Sprintf("set(%s \"${%s} %s\")\n", tag, tag, flag))
@@ -263,6 +275,7 @@
systemHeaderSearchPath
flag
systemRoot
+ relativeFilePathFlag
)
type compilerParameters struct {
@@ -270,6 +283,8 @@
systemHeaderSearchPath []string
flags []string
sysroot string
+ // Must be in a=b/c/d format and can be split into "a" and "b/c/d"
+ relativeFilePathFlags []relativeFilePathFlagType
}
func makeCompilerParameters() compilerParameters {
@@ -294,6 +309,9 @@
if strings.HasPrefix(parameter, "--sysroot") {
return systemRoot
}
+ if strings.HasPrefix(parameter, "-fsanitize-blacklist") {
+ return relativeFilePathFlag
+ }
return flag
}
@@ -347,6 +365,16 @@
f.WriteString("# Found a system root path marker with no path")
}
i = i + 1
+ case relativeFilePathFlag:
+ flagComponents := strings.Split(param, "=")
+ if len(flagComponents) == 2 {
+ flagStruct := relativeFilePathFlagType{flag: flagComponents[0], relativeFilePath: flagComponents[1]}
+ compilerParameters.relativeFilePathFlags = append(compilerParameters.relativeFilePathFlags, flagStruct)
+ } else {
+ if outputDebugInfo {
+ f.WriteString(fmt.Sprintf("# Relative File Path Flag [%s] is not formatted as a=b/c/d \n", param))
+ }
+ }
}
}
return compilerParameters