diff options
author | Tobias Bosch <tbosch@google.com> | 2019-10-17 07:44:13 -0700 |
---|---|---|
committer | Tobias Bosch <tbosch@google.com> | 2019-10-17 19:22:03 +0000 |
commit | 8cb363f62b57954ace161789eb7fa692a24f29a4 (patch) | |
tree | 38c0358978d0dab8f34c6d7bd6004dff318ef7ec | |
parent | 90d3658f7f8170c66f67f021df64bd421cdb7f11 (diff) | |
download | toolchain-utils-8cb363f62b57954ace161789eb7fa692a24f29a4.tar.gz |
compiler_wrapper: remove WITH_TIDY support for android.
Also consolidates most of the android specific logic
into one place so it's clear which flags are used
and which ones are not.
Also detects wrapping of clang-tidy for future
special casing.
BUG=chromium:773875
TEST=unit tests, golden tests
TEST=android's test_compiler.py --with-tidy
Change-Id: Ic83340ba63ec3ea4c3c174069d3dc017ecbcdd72
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/1866603
Tested-by: Tobias Bosch <tbosch@google.com>
Reviewed-by: George Burgess <gbiv@chromium.org>
-rw-r--r-- | compiler_wrapper/android_config_test.go | 13 | ||||
-rw-r--r-- | compiler_wrapper/bisect_flag_test.go | 2 | ||||
-rw-r--r-- | compiler_wrapper/clang_flags.go | 9 | ||||
-rw-r--r-- | compiler_wrapper/command.go | 3 | ||||
-rw-r--r-- | compiler_wrapper/compile_with_fallback_test.go | 2 | ||||
-rw-r--r-- | compiler_wrapper/compiler_wrapper.go | 30 | ||||
-rw-r--r-- | compiler_wrapper/testdata/android_golden/clang_path.json | 48 |
7 files changed, 89 insertions, 18 deletions
diff --git a/compiler_wrapper/android_config_test.go b/compiler_wrapper/android_config_test.go index 4e2f1f5c..104be6df 100644 --- a/compiler_wrapper/android_config_test.go +++ b/compiler_wrapper/android_config_test.go @@ -35,6 +35,7 @@ func createAndroidClangPathGoldenInputs(ctx *testContext) goldenFile { gomaPath := path.Join(ctx.tempDir, "gomacc") ctx.writeFile(gomaPath, "") defaultPath := filepath.Join(ctx.tempDir, "clang") + clangTidyPath := filepath.Join(ctx.tempDir, "clang-tidy") deepPath := "a/b/c/d/e/f/g/clang" linkedDeepPath := "symlinked/clang_other" @@ -52,11 +53,21 @@ func createAndroidClangPathGoldenInputs(ctx *testContext) goldenFile { Cmds: errorResults, }, { + Env: []string{"WITH_TIDY=1"}, + WrapperCmd: newGoldenCmd(defaultPath, mainCc), + Cmds: okResults, + }, + { WrapperCmd: newGoldenCmd(filepath.Join(ctx.tempDir, "clang++"), mainCc), Cmds: okResults, }, { - WrapperCmd: newGoldenCmd(filepath.Join(ctx.tempDir, "clang-tidy"), mainCc), + WrapperCmd: newGoldenCmd(clangTidyPath, mainCc), + Cmds: okResults, + }, + { + Env: []string{"WITH_TIDY=1"}, + WrapperCmd: newGoldenCmd(clangTidyPath, mainCc), Cmds: okResults, }, { diff --git a/compiler_wrapper/bisect_flag_test.go b/compiler_wrapper/bisect_flag_test.go index 8500eef2..0bb6a820 100644 --- a/compiler_wrapper/bisect_flag_test.go +++ b/compiler_wrapper/bisect_flag_test.go @@ -85,7 +85,7 @@ func TestDefaultBisectDirAndroid(t *testing.T) { "HOME=/somehome", } ctx.cfg.isAndroidWrapper = true - cmd := mustCallBisectDriver(ctx, callCompiler(ctx, ctx.cfg, ctx.newCommand(gccX86_64, mainCc))) + cmd := mustCallBisectDriver(ctx, callCompiler(ctx, ctx.cfg, ctx.newCommand(clangAndroid, mainCc))) if err := verifyArgOrder(cmd, "someBisectStage", filepath.Join("/somehome", "ANDROID_BISECT")); err != nil { t.Error(err) diff --git a/compiler_wrapper/clang_flags.go b/compiler_wrapper/clang_flags.go index ee041a2e..8b76e965 100644 --- a/compiler_wrapper/clang_flags.go +++ b/compiler_wrapper/clang_flags.go @@ -12,15 +12,6 @@ import ( ) func processClangFlags(builder *commandBuilder) error { - if builder.cfg.isAndroidWrapper { - // FIXME: This combination of using the directory of the symlink but the - // basename of the link target is strange but is the logic that old android - // wrapper uses. Change this to use directory and basename either from the - // absWrapperPath or from the builder.path, but don't mix anymore. - builder.path = filepath.Join(filepath.Dir(builder.path), filepath.Base(builder.absWrapperPath)+".real") - return nil - } - env := builder.env clangDir, _ := env.getenv("CLANG") diff --git a/compiler_wrapper/command.go b/compiler_wrapper/command.go index 26f85568..69578597 100644 --- a/compiler_wrapper/command.go +++ b/compiler_wrapper/command.go @@ -129,6 +129,8 @@ func newCommandBuilder(env env, cfg *config, cmd *command) (*commandBuilder, err var compilerType compilerType switch { + case strings.HasPrefix(target.compiler, "clang-tidy"): + compilerType = clangTidyType case strings.HasPrefix(target.compiler, "clang"): compilerType = clangType default: @@ -172,6 +174,7 @@ type compilerType int32 const ( gccType compilerType = iota clangType + clangTidyType ) type builderTarget struct { diff --git a/compiler_wrapper/compile_with_fallback_test.go b/compiler_wrapper/compile_with_fallback_test.go index 32d1915b..4ea847f6 100644 --- a/compiler_wrapper/compile_with_fallback_test.go +++ b/compiler_wrapper/compile_with_fallback_test.go @@ -169,7 +169,7 @@ func TestCompileWithFallbackExtraArgs(t *testing.T) { }{ {"./clang", true}, {"./clang++", true}, - {"./some_clang", false}, + {"./clang-tidy", false}, } ctx.env = append(ctx.env, "ANDROID_LLVM_FALLBACK_DISABLED_WARNINGS=-a -b") extraArgs := []string{"-fno-color-diagnostics", "-a", "-b"} diff --git a/compiler_wrapper/compiler_wrapper.go b/compiler_wrapper/compiler_wrapper.go index b157687f..17c62db7 100644 --- a/compiler_wrapper/compiler_wrapper.go +++ b/compiler_wrapper/compiler_wrapper.go @@ -71,7 +71,27 @@ func callCompilerInternal(env env, cfg *config, inputCmd *command) (exitCode int env = mainBuilder.env var compilerCmd *command clangSyntax := processClangSyntaxFlag(mainBuilder) - if mainBuilder.target.compilerType == clangType { + if cfg.isAndroidWrapper { + // FIXME: This combination of using the directory of the symlink but the + // basename of the link target is strange but is the logic that old android + // wrapper uses. Change this to use directory and basename either from the + // absWrapperPath or from the builder.path, but don't mix anymore. + mainBuilder.path = filepath.Join(filepath.Dir(mainBuilder.path), filepath.Base(mainBuilder.absWrapperPath)+".real") + + switch mainBuilder.target.compilerType { + case clangType: + mainBuilder.addPreUserArgs(mainBuilder.cfg.clangFlags...) + mainBuilder.addPreUserArgs(mainBuilder.cfg.commonFlags...) + if _, err := processGomaCccFlags(mainBuilder); err != nil { + return 0, err + } + compilerCmd = mainBuilder.build() + case clangTidyType: + compilerCmd = mainBuilder.build() + default: + return 0, newErrorwithSourceLocf("unsupported compiler: %s", mainBuilder.target.compiler) + } + } else if mainBuilder.target.compilerType == clangType { cSrcFile, useClangTidy := processClangTidyFlags(mainBuilder) sysroot, err := prepareClangCommand(mainBuilder) if err != nil { @@ -146,7 +166,7 @@ func callCompilerInternal(env env, cfg *config, inputCmd *command) (exitCode int func prepareClangCommand(builder *commandBuilder) (sysroot string, err error) { sysroot = "" - if !builder.cfg.isHostWrapper && !builder.cfg.isAndroidWrapper { + if !builder.cfg.isHostWrapper { sysroot = processSysrootFlag(builder) } builder.addPreUserArgs(builder.cfg.clangFlags...) @@ -189,15 +209,13 @@ func calcGccCommand(builder *commandBuilder) (*command, error) { func calcCommonPreUserArgs(builder *commandBuilder) { builder.addPreUserArgs(builder.cfg.commonFlags...) - if !builder.cfg.isHostWrapper && !builder.cfg.isAndroidWrapper { + if !builder.cfg.isHostWrapper { processPieFlags(builder) processThumbCodeFlags(builder) processStackProtectorFlags(builder) processX86Flags(builder) } - if !builder.cfg.isAndroidWrapper { - processSanitizerFlags(builder) - } + processSanitizerFlags(builder) } func processGomaCCacheFlags(sysroot string, allowCCache bool, builder *commandBuilder) (err error) { diff --git a/compiler_wrapper/testdata/android_golden/clang_path.json b/compiler_wrapper/testdata/android_golden/clang_path.json index b784feb5..5686b381 100644 --- a/compiler_wrapper/testdata/android_golden/clang_path.json +++ b/compiler_wrapper/testdata/android_golden/clang_path.json @@ -49,6 +49,30 @@ }, { "wd": "/tmp/stable", + "env": [ + "WITH_TIDY=1" + ], + "wrapper": { + "cmd": { + "path": "/tmp/stable/clang", + "args": [ + "main.cc" + ] + } + }, + "cmds": [ + { + "cmd": { + "path": "/tmp/stable/clang.real", + "args": [ + "main.cc" + ] + } + } + ] + }, + { + "wd": "/tmp/stable", "wrapper": { "cmd": { "path": "/tmp/stable/clang++", @@ -91,6 +115,30 @@ }, { "wd": "/tmp/stable", + "env": [ + "WITH_TIDY=1" + ], + "wrapper": { + "cmd": { + "path": "/tmp/stable/clang-tidy", + "args": [ + "main.cc" + ] + } + }, + "cmds": [ + { + "cmd": { + "path": "/tmp/stable/clang-tidy.real", + "args": [ + "main.cc" + ] + } + } + ] + }, + { + "wd": "/tmp/stable", "wrapper": { "cmd": { "path": "a/b/c/d/e/f/g/clang", |