Disable tidy checks for generated code
Generated codes like cpp code from *.ll for *.yy files always run clang-tidy, when generated code has warning, where is no way to fix it. So, disable clang-tidy for generated code. Bug: 162909698 Test: go test android/soong/cc Change-Id: I0fee137d6170ef4bf6cf641abad572e448aceaa1
This commit is contained in:
parent
d06bdb0310
commit
3dba4d2c60
3 changed files with 44 additions and 1 deletions
|
@ -720,7 +720,7 @@ func (compiler *baseCompiler) compile(ctx ModuleContext, flags Flags, deps PathD
|
|||
|
||||
// Compile files listed in c.Properties.Srcs into objects
|
||||
objs := compileObjs(ctx, buildFlags, "", srcs,
|
||||
android.PathsForModuleSrc(ctx, compiler.Properties.Tidy_disabled_srcs),
|
||||
append(android.PathsForModuleSrc(ctx, compiler.Properties.Tidy_disabled_srcs), compiler.generatedSources...),
|
||||
android.PathsForModuleSrc(ctx, compiler.Properties.Tidy_timeout_srcs),
|
||||
pathDeps, compiler.cFlagsDeps)
|
||||
|
||||
|
|
16
cc/gen.go
16
cc/gen.go
|
@ -225,6 +225,10 @@ type generatedSourceInfo struct {
|
|||
// The files that can be used as order only dependencies in order to ensure that the sysprop
|
||||
// header files are up to date.
|
||||
syspropOrderOnlyDeps android.Paths
|
||||
|
||||
// List of generated code path.
|
||||
// ex) '*.cpp' files generated from '*.ll / *.yy'.
|
||||
generatedSources android.Paths
|
||||
}
|
||||
|
||||
func genSources(
|
||||
|
@ -254,30 +258,37 @@ func genSources(
|
|||
return yaccRule_
|
||||
}
|
||||
|
||||
var generatedSources android.Paths = nil
|
||||
|
||||
for i, srcFile := range srcFiles {
|
||||
switch srcFile.Ext() {
|
||||
case ".y":
|
||||
cFile := android.GenPathWithExt(ctx, "yacc", srcFile, "c")
|
||||
srcFiles[i] = cFile
|
||||
deps = append(deps, genYacc(ctx, yaccRule(), srcFile, cFile, buildFlags.yacc)...)
|
||||
generatedSources = append(generatedSources, cFile)
|
||||
case ".yy":
|
||||
cppFile := android.GenPathWithExt(ctx, "yacc", srcFile, "cpp")
|
||||
srcFiles[i] = cppFile
|
||||
deps = append(deps, genYacc(ctx, yaccRule(), srcFile, cppFile, buildFlags.yacc)...)
|
||||
generatedSources = append(generatedSources, cppFile)
|
||||
case ".l":
|
||||
cFile := android.GenPathWithExt(ctx, "lex", srcFile, "c")
|
||||
srcFiles[i] = cFile
|
||||
genLex(ctx, srcFile, cFile, buildFlags.lex)
|
||||
generatedSources = append(generatedSources, cFile)
|
||||
case ".ll":
|
||||
cppFile := android.GenPathWithExt(ctx, "lex", srcFile, "cpp")
|
||||
srcFiles[i] = cppFile
|
||||
genLex(ctx, srcFile, cppFile, buildFlags.lex)
|
||||
generatedSources = append(generatedSources, cppFile)
|
||||
case ".proto":
|
||||
ccFile, headerFile := genProto(ctx, srcFile, buildFlags)
|
||||
srcFiles[i] = ccFile
|
||||
info.protoHeaders = append(info.protoHeaders, headerFile)
|
||||
// Use the generated header as an order only dep to ensure that it is up to date when needed.
|
||||
info.protoOrderOnlyDeps = append(info.protoOrderOnlyDeps, headerFile)
|
||||
generatedSources = append(generatedSources, ccFile)
|
||||
case ".aidl":
|
||||
if aidlRule == nil {
|
||||
aidlRule = android.NewRuleBuilder(pctx, ctx).Sbox(android.PathForModuleGen(ctx, "aidl"),
|
||||
|
@ -299,10 +310,12 @@ func genSources(
|
|||
// needed.
|
||||
// TODO: Reduce the size of the ninja file by using one order only dep for the whole rule
|
||||
info.aidlOrderOnlyDeps = append(info.aidlOrderOnlyDeps, aidlHeaders...)
|
||||
generatedSources = append(generatedSources, cppFile)
|
||||
case ".rscript", ".fs":
|
||||
cppFile := rsGeneratedCppFile(ctx, srcFile)
|
||||
rsFiles = append(rsFiles, srcFiles[i])
|
||||
srcFiles[i] = cppFile
|
||||
generatedSources = append(generatedSources, cppFile)
|
||||
case ".sysprop":
|
||||
cppFile, headerFiles := genSysprop(ctx, srcFile)
|
||||
srcFiles[i] = cppFile
|
||||
|
@ -310,9 +323,12 @@ func genSources(
|
|||
// Use the generated headers as order only deps to ensure that they are up to date when
|
||||
// needed.
|
||||
info.syspropOrderOnlyDeps = append(info.syspropOrderOnlyDeps, headerFiles...)
|
||||
generatedSources = append(generatedSources, cppFile)
|
||||
}
|
||||
}
|
||||
|
||||
info.generatedSources = generatedSources
|
||||
|
||||
for _, aidlLibraryInfo := range aidlLibraryInfos {
|
||||
if aidlLibraryRule == nil {
|
||||
aidlLibraryRule = android.NewRuleBuilder(pctx, ctx).Sbox(
|
||||
|
|
|
@ -244,3 +244,30 @@ func TestWithTidy(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestWithGeneratedCode(t *testing.T) {
|
||||
bp := `
|
||||
cc_library_shared {
|
||||
name: "libfoo",
|
||||
srcs: ["foo_1.y", "foo_2.yy", "foo_3.l", "foo_4.ll", "foo_5.proto",
|
||||
"foo_6.aidl", "foo_7.rscript", "foo_8.fs", "foo_9.sysprop",
|
||||
"foo_src.cpp"],
|
||||
tidy: true,
|
||||
}`
|
||||
variant := "android_arm64_armv8-a_shared"
|
||||
|
||||
testEnv := map[string]string{}
|
||||
testEnv["ALLOW_LOCAL_TIDY_TRUE"] = "1"
|
||||
|
||||
ctx := android.GroupFixturePreparers(prepareForCcTest, android.FixtureMergeEnv(testEnv)).RunTestWithBp(t, bp)
|
||||
|
||||
t.Run("tidy should be only run for source code, not for generated code", func(t *testing.T) {
|
||||
depFiles := ctx.ModuleForTests("libfoo", variant).Rule("ld").Validations.Strings()
|
||||
|
||||
tidyFileForCpp := "out/soong/.intermediates/libfoo/" + variant + "/obj/foo_src.tidy"
|
||||
|
||||
android.AssertArrayString(t,
|
||||
"only one .tidy file for source code should exist for libfoo",
|
||||
[]string{tidyFileForCpp}, depFiles)
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue