diff options
Diffstat (limited to 'compiler_wrapper/compiler_wrapper.go')
-rw-r--r-- | compiler_wrapper/compiler_wrapper.go | 73 |
1 files changed, 46 insertions, 27 deletions
diff --git a/compiler_wrapper/compiler_wrapper.go b/compiler_wrapper/compiler_wrapper.go index 4c3db14a..2b9459e4 100644 --- a/compiler_wrapper/compiler_wrapper.go +++ b/compiler_wrapper/compiler_wrapper.go @@ -80,6 +80,7 @@ func callCompilerInternal(env env, cfg *config, inputCmd *command) (exitCode int case clangType: mainBuilder.addPreUserArgs(mainBuilder.cfg.clangFlags...) mainBuilder.addPreUserArgs(mainBuilder.cfg.commonFlags...) + mainBuilder.addPostUserArgs(mainBuilder.cfg.clangPostFlags...) if _, err := processGomaCccFlags(mainBuilder); err != nil { return 0, err } @@ -89,40 +90,55 @@ func callCompilerInternal(env env, cfg *config, inputCmd *command) (exitCode int default: return 0, newErrorwithSourceLocf("unsupported compiler: %s", mainBuilder.target.compiler) } - } else if mainBuilder.target.compilerType == clangType { - cSrcFile, useClangTidy := processClangTidyFlags(mainBuilder) - err := prepareClangCommand(mainBuilder) - if err != nil { - return 0, err - } - allowCCache := true - if useClangTidy { - allowCCache = false - clangCmdWithoutGomaAndCCache := mainBuilder.build() - if err := runClangTidy(env, clangCmdWithoutGomaAndCCache, cSrcFile); err != nil { - return 0, err - } - } - if err := processGomaCCacheFlags(allowCCache, mainBuilder); err != nil { - return 0, err - } - compilerCmd = mainBuilder.build() } else { - if clangSyntax { - allowCCache := false - clangCmd, err := calcClangCommand(allowCCache, mainBuilder.clone()) + cSrcFile, tidyFlags, tidyMode := processClangTidyFlags(mainBuilder) + if mainBuilder.target.compilerType == clangType { + err := prepareClangCommand(mainBuilder) if err != nil { return 0, err } - gccCmd, err := calcGccCommand(mainBuilder) + allowCCache := true + if tidyMode != tidyModeNone { + allowCCache = false + clangCmdWithoutGomaAndCCache := mainBuilder.build() + var err error + switch tidyMode { + case tidyModeTricium: + if cfg.triciumNitsDir == "" { + return 0, newErrorwithSourceLocf("tricium linting was requested, but no nits directory is configured") + } + err = runClangTidyForTricium(env, clangCmdWithoutGomaAndCCache, cSrcFile, cfg.triciumNitsDir, tidyFlags, cfg.crashArtifactsDir) + case tidyModeAll: + err = runClangTidy(env, clangCmdWithoutGomaAndCCache, cSrcFile, tidyFlags) + default: + panic(fmt.Sprintf("Unknown tidy mode: %v", tidyMode)) + } + + if err != nil { + return 0, err + } + } + if err := processGomaCCacheFlags(allowCCache, mainBuilder); err != nil { + return 0, err + } + compilerCmd = mainBuilder.build() + } else { + if clangSyntax { + allowCCache := false + clangCmd, err := calcClangCommand(allowCCache, mainBuilder.clone()) + if err != nil { + return 0, err + } + gccCmd, err := calcGccCommand(mainBuilder) + if err != nil { + return 0, err + } + return checkClangSyntax(env, clangCmd, gccCmd) + } + compilerCmd, err = calcGccCommand(mainBuilder) if err != nil { return 0, err } - return checkClangSyntax(env, clangCmd, gccCmd) - } - compilerCmd, err = calcGccCommand(mainBuilder) - if err != nil { - return 0, err } } rusageLogfileName := getRusageLogFilename(env) @@ -167,6 +183,9 @@ func prepareClangCommand(builder *commandBuilder) (err error) { processSysrootFlag(builder) } builder.addPreUserArgs(builder.cfg.clangFlags...) + if builder.cfg.crashArtifactsDir != "" { + builder.addPreUserArgs("-fcrash-diagnostics-dir=" + builder.cfg.crashArtifactsDir) + } builder.addPostUserArgs(builder.cfg.clangPostFlags...) calcCommonPreUserArgs(builder) return processClangFlags(builder) |