diff --git a/cc/cmakelists.go b/cc/cmakelists.go index a2f46cd40..699f5c017 100644 --- a/cc/cmakelists.go +++ b/cc/cmakelists.go @@ -204,10 +204,11 @@ func translateToCMake(c compilerParameters, f *os.File, cflags bool, cppflags bo 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 @@ func writeAllIncludeDirectories(includes []string, f *os.File, isSystem bool) { 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 @@ const ( systemHeaderSearchPath flag systemRoot + relativeFilePathFlag ) type compilerParameters struct { @@ -270,6 +283,8 @@ type compilerParameters struct { 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 @@ func categorizeParameter(parameter string) parameterType { if strings.HasPrefix(parameter, "--sysroot") { return systemRoot } + if strings.HasPrefix(parameter, "-fsanitize-blacklist") { + return relativeFilePathFlag + } return flag } @@ -347,6 +365,16 @@ func parseCompilerParameters(params []string, ctx android.SingletonContext, f *o 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