Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d19ed278 authored by Chih-hung Hsieh's avatar Chih-hung Hsieh Committed by Automerger Merge Worker
Browse files

Merge "Use ccCmd to generate clang-tidy dependent file" am: 935ae2c5

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1824476

Change-Id: I303aab3d1318b9d94c76a362d07ec446fa65cdb0
parents d4e77a61 935ae2c5
Loading
Loading
Loading
Loading
+24 −10
Original line number Original line Diff line number Diff line
@@ -199,8 +199,18 @@ var (
	// Rule for invoking clang-tidy (a clang-based linter).
	// Rule for invoking clang-tidy (a clang-based linter).
	clangTidy, clangTidyRE = pctx.RemoteStaticRules("clangTidy",
	clangTidy, clangTidyRE = pctx.RemoteStaticRules("clangTidy",
		blueprint.RuleParams{
		blueprint.RuleParams{
			Command:     "rm -f $out && $tidyVars $reTemplate${config.ClangBin}/clang-tidy $tidyFlags $in -- $cFlags && touch $out",
			Depfile: "${out}.d",
			CommandDeps: []string{"${config.ClangBin}/clang-tidy"},
			Deps:    blueprint.DepsGCC,
			// Pick bash because some machines with old /bin/sh cannot handle arrays.
			// All $cFlags and $tidyFlags should have single quotes escaped.
			// Assume no single quotes in other parameters like $in, $out, $ccCmd.
			Command: "/bin/bash -c 'SRCF=$in; TIDYF=$out; CLANGFLAGS=($cFlags); " +
				"rm -f $$TIDYF $${TIDYF}.d && " +
				"${config.CcWrapper}$ccCmd \"$${CLANGFLAGS[@]}\" -E -o /dev/null $$SRCF " +
				"-MQ $$TIDYF -MD -MF $${TIDYF}.d && " +
				"$tidyVars $reTemplate${config.ClangBin}/clang-tidy $tidyFlags $$SRCF " +
				"-- \"$${CLANGFLAGS[@]}\" && touch $$TIDYF'",
			CommandDeps: []string{"${config.ClangBin}/clang-tidy", "$ccCmd"},
		},
		},
		&remoteexec.REParams{
		&remoteexec.REParams{
			Labels:               map[string]string{"type": "lint", "tool": "clang-tidy", "lang": "cpp"},
			Labels:               map[string]string{"type": "lint", "tool": "clang-tidy", "lang": "cpp"},
@@ -214,7 +224,7 @@ var (
			// (1) New timestamps trigger clang and clang-tidy compilations again.
			// (1) New timestamps trigger clang and clang-tidy compilations again.
			// (2) Changing source files caused concurrent clang or clang-tidy jobs to crash.
			// (2) Changing source files caused concurrent clang or clang-tidy jobs to crash.
			Platform: map[string]string{remoteexec.PoolKey: "${config.REClangTidyPool}"},
			Platform: map[string]string{remoteexec.PoolKey: "${config.REClangTidyPool}"},
		}, []string{"cFlags", "tidyFlags", "tidyVars"}, []string{})
		}, []string{"ccCmd", "cFlags", "tidyFlags", "tidyVars"}, []string{})


	_ = pctx.SourcePathVariable("yasmCmd", "prebuilts/misc/${config.HostPrebuiltTag}/yasm/yasm")
	_ = pctx.SourcePathVariable("yasmCmd", "prebuilts/misc/${config.HostPrebuiltTag}/yasm/yasm")


@@ -437,6 +447,12 @@ func (a Objects) Append(b Objects) Objects {
	}
	}
}
}


func escapeSingleQuotes(s string) string {
	// Replace single quotes to work when embedded in a single quoted string for bash.
	// Relying on string concatenation of bash to get A'B from quoted 'A'\''B'.
	return strings.Replace(s, `'`, `'\''`, -1)
}

// Generate rules for compiling multiple .c, .cpp, or .S files to individual .o files
// Generate rules for compiling multiple .c, .cpp, or .S files to individual .o files
func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles android.Paths,
func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles android.Paths,
	flags builderFlags, pathDeps android.Paths, cFlagsDeps android.Paths) Objects {
	flags builderFlags, pathDeps android.Paths, cFlagsDeps android.Paths) Objects {
@@ -672,14 +688,12 @@ func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and
				Description: "clang-tidy " + srcFile.Rel(),
				Description: "clang-tidy " + srcFile.Rel(),
				Output:      tidyFile,
				Output:      tidyFile,
				Input:       srcFile,
				Input:       srcFile,
				// We must depend on objFile, since clang-tidy doesn't
				// support exporting dependencies.
				Implicit:  objFile,
				Implicits:   cFlagsDeps,
				Implicits:   cFlagsDeps,
				OrderOnly:   pathDeps,
				OrderOnly:   pathDeps,
				Args: map[string]string{
				Args: map[string]string{
					"cFlags":    shareFlags("cFlags", moduleToolingFlags),
					"ccCmd":     ccCmd,
					"tidyFlags": shareFlags("tidyFlags", config.TidyFlagsForSrcFile(srcFile, flags.tidyFlags)),
					"cFlags":    shareFlags("cFlags", escapeSingleQuotes(moduleToolingFlags)),
					"tidyFlags": shareFlags("tidyFlags", escapeSingleQuotes(config.TidyFlagsForSrcFile(srcFile, flags.tidyFlags))),
					"tidyVars":  tidyVars, // short and not shared
					"tidyVars":  tidyVars, // short and not shared
				},
				},
			})
			})