aboutsummaryrefslogtreecommitdiff
path: root/compiler_wrapper/compiler_wrapper.go
diff options
context:
space:
mode:
Diffstat (limited to 'compiler_wrapper/compiler_wrapper.go')
-rw-r--r--compiler_wrapper/compiler_wrapper.go49
1 files changed, 28 insertions, 21 deletions
diff --git a/compiler_wrapper/compiler_wrapper.go b/compiler_wrapper/compiler_wrapper.go
index 8538fd49..9d7b76e5 100644
--- a/compiler_wrapper/compiler_wrapper.go
+++ b/compiler_wrapper/compiler_wrapper.go
@@ -81,6 +81,7 @@ func callCompilerInternal(env env, cfg *config, inputCmd *command) (exitCode int
// Disable CCache for rusage logs
// Note: Disabling Goma causes timeout related INFRA_FAILUREs in builders
allowCCache := !rusageEnabled
+ gomaUsed := false
workAroundKernelBugWithRetries := false
if cfg.isAndroidWrapper {
@@ -90,7 +91,7 @@ func callCompilerInternal(env env, cfg *config, inputCmd *command) (exitCode int
mainBuilder.addPreUserArgs(mainBuilder.cfg.clangFlags...)
mainBuilder.addPreUserArgs(mainBuilder.cfg.commonFlags...)
mainBuilder.addPostUserArgs(mainBuilder.cfg.clangPostFlags...)
- if _, err := processGomaCccFlags(mainBuilder); err != nil {
+ if gomaUsed, err = processGomaCccFlags(mainBuilder); err != nil {
return 0, err
}
compilerCmd = mainBuilder.build()
@@ -126,24 +127,24 @@ func callCompilerInternal(env env, cfg *config, inputCmd *command) (exitCode int
return 0, err
}
}
- if err := processGomaCCacheFlags(allowCCache, mainBuilder); err != nil {
+ if gomaUsed, err = processGomaCCacheFlags(allowCCache, mainBuilder); err != nil {
return 0, err
}
compilerCmd = mainBuilder.build()
} else {
if clangSyntax {
allowCCache = false
- clangCmd, err := calcClangCommand(allowCCache, mainBuilder.clone())
+ _, clangCmd, err := calcClangCommand(allowCCache, mainBuilder.clone())
if err != nil {
return 0, err
}
- gccCmd, err := calcGccCommand(rusageEnabled, mainBuilder)
+ _, gccCmd, err := calcGccCommand(rusageEnabled, mainBuilder)
if err != nil {
return 0, err
}
return checkClangSyntax(env, clangCmd, gccCmd)
}
- compilerCmd, err = calcGccCommand(rusageEnabled, mainBuilder)
+ gomaUsed, compilerCmd, err = calcGccCommand(rusageEnabled, mainBuilder)
if err != nil {
return 0, err
}
@@ -244,10 +245,11 @@ func callCompilerInternal(env env, cfg *config, inputCmd *command) (exitCode int
case err != nil:
return exitCode, err
default:
- if err := commitRusage(exitCode); err != nil {
- return exitCode, fmt.Errorf("commiting rusage: %v", err)
+ if !gomaUsed {
+ if err := commitRusage(exitCode); err != nil {
+ return exitCode, fmt.Errorf("commiting rusage: %v", err)
+ }
}
-
return exitCode, err
}
}
@@ -266,30 +268,34 @@ func prepareClangCommand(builder *commandBuilder) (err error) {
return processClangFlags(builder)
}
-func calcClangCommand(allowCCache bool, builder *commandBuilder) (*command, error) {
+func calcClangCommand(allowCCache bool, builder *commandBuilder) (bool, *command, error) {
err := prepareClangCommand(builder)
if err != nil {
- return nil, err
+ return false, nil, err
}
- if err := processGomaCCacheFlags(allowCCache, builder); err != nil {
- return nil, err
+ gomaUsed, err := processGomaCCacheFlags(allowCCache, builder)
+ if err != nil {
+ return gomaUsed, nil, err
}
- return builder.build(), nil
+ return gomaUsed, builder.build(), nil
}
-func calcGccCommand(enableRusage bool, builder *commandBuilder) (*command, error) {
+func calcGccCommand(enableRusage bool, builder *commandBuilder) (bool, *command, error) {
if !builder.cfg.isHostWrapper {
processSysrootFlag(builder)
}
builder.addPreUserArgs(builder.cfg.gccFlags...)
calcCommonPreUserArgs(builder)
processGccFlags(builder)
+
+ gomaUsed := false
if !builder.cfg.isHostWrapper {
- if err := processGomaCCacheFlags(!enableRusage, builder); err != nil {
- return nil, err
+ var err error
+ if gomaUsed, err = processGomaCCacheFlags(!enableRusage, builder); err != nil {
+ return gomaUsed, nil, err
}
}
- return builder.build(), nil
+ return gomaUsed, builder.build(), nil
}
func calcCommonPreUserArgs(builder *commandBuilder) {
@@ -303,18 +309,19 @@ func calcCommonPreUserArgs(builder *commandBuilder) {
processSanitizerFlags(builder)
}
-func processGomaCCacheFlags(allowCCache bool, builder *commandBuilder) (err error) {
- gomaccUsed := false
+func processGomaCCacheFlags(allowCCache bool, builder *commandBuilder) (gomaccUsed bool, err error) {
+
+ gomaccUsed = false
if !builder.cfg.isHostWrapper {
gomaccUsed, err = processGomaCccFlags(builder)
if err != nil {
- return err
+ return gomaccUsed, err
}
}
if !gomaccUsed && allowCCache {
processCCacheFlag(builder)
}
- return nil
+ return gomaccUsed, nil
}
func getAbsWrapperPath(env env, wrapperCmd *command) (string, error) {