Use --dependency-file when linking elf files.
Use the new --dependency-file flag for lld to produce a deps file.
Fixes: 137961579
Test: m checkbuild
Change-Id: I4e0724795a4237ef4560f814e5ef40e44591d776
diff --git a/cc/builder.go b/cc/builder.go
index 525b1a1..107cd58 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -855,13 +855,24 @@
deps = append(deps, crtBegin...)
deps = append(deps, crtEnd...)
+ var depFile android.WritablePath
+ var depFileLdFlags string
+ depsType := blueprint.DepsNone
+ if !ctx.Windows() && !ctx.Darwin() {
+ // lld only supports --dependency-file for elf files
+ depFile = outputFile.ReplaceExtension(ctx, "d")
+ depFileLdFlags = " -Wl,--dependency-file=" + depFile.String()
+ depsType = blueprint.DepsGCC
+ implicitOutputs = append(implicitOutputs, depFile)
+ }
+
rule := ld
args := map[string]string{
"ldCmd": ldCmd,
"crtBegin": strings.Join(crtBegin.Strings(), " "),
"libFlags": strings.Join(libFlagsList, " "),
"extraLibFlags": flags.extraLibFlags,
- "ldFlags": flags.globalLdFlags + " " + flags.localLdFlags,
+ "ldFlags": flags.globalLdFlags + " " + flags.localLdFlags + depFileLdFlags,
"crtEnd": strings.Join(crtEnd.Strings(), " "),
}
if ctx.Config().UseRBE() && ctx.Config().IsEnvTrue("RBE_CXX_LINKS") {
@@ -872,6 +883,8 @@
ctx.Build(pctx, android.BuildParams{
Rule: rule,
+ Deps: depsType,
+ Depfile: depFile,
Description: "link " + outputFile.Base(),
Output: outputFile,
ImplicitOutputs: implicitOutputs,
@@ -1025,18 +1038,33 @@
ldCmd := "${config.ClangBin}/clang++"
+ var implicitOutputs android.WritablePaths
+ var depFile android.WritablePath
+ var depFileLdFlags string
+ depsType := blueprint.DepsNone
+ if !ctx.Windows() && !ctx.Darwin() {
+ // lld only supports --dependency-file for elf files
+ depFile = outputFile.ReplaceExtension(ctx, "d")
+ depFileLdFlags = " -Wl,--dependency-file=" + depFile.String()
+ depsType = blueprint.DepsGCC
+ implicitOutputs = append(implicitOutputs, depFile)
+ }
+
rule := partialLd
args := map[string]string{
"ldCmd": ldCmd,
- "ldFlags": flags.globalLdFlags + " " + flags.localLdFlags,
+ "ldFlags": flags.globalLdFlags + " " + flags.localLdFlags + depFileLdFlags,
}
if ctx.Config().UseRBE() && ctx.Config().IsEnvTrue("RBE_CXX_LINKS") {
rule = partialLdRE
args["inCommaList"] = strings.Join(objFiles.Strings(), ",")
args["implicitInputs"] = strings.Join(deps.Strings(), ",")
+ args["implicitOutputs"] = strings.Join(implicitOutputs.Strings(), ",")
}
ctx.Build(pctx, android.BuildParams{
Rule: rule,
+ Deps: depsType,
+ Depfile: depFile,
Description: "link " + outputFile.Base(),
Output: outputFile,
Inputs: objFiles,