Revert "Split Rust crate builds into compile and link phases."
This reverts commit e7c71c344d
.
The intermediates created by the separated rust compile steps are very
large, on the order of 60GB. This is more than CI can support for now,
revert the split into compile and link phases. This comes at the expense
of incremental build time, especially when modifying C/C++ sources that
are dependencies of rust modules.
Bug: 293349612
Test: builds
Change-Id: I81169e7d0727330c8de5e7688dcdc87fe7b8d3b5
This commit is contained in:
119
rust/builder.go
119
rust/builder.go
@@ -26,14 +26,14 @@ import (
|
||||
|
||||
var (
|
||||
_ = pctx.SourcePathVariable("rustcCmd", "${config.RustBin}/rustc")
|
||||
_ = pctx.SourcePathVariable("mkcraterspCmd", "build/soong/scripts/mkcratersp.py")
|
||||
rustc = pctx.AndroidStaticRule("rustc",
|
||||
blueprint.RuleParams{
|
||||
Command: "$envVars $rustcCmd " +
|
||||
"-C linker=$mkcraterspCmd " +
|
||||
"-C linker=${config.RustLinker} " +
|
||||
"-C link-args=\"${crtBegin} ${earlyLinkFlags} ${linkFlags} ${crtEnd}\" " +
|
||||
"--emit link -o $out --emit dep-info=$out.d.raw $in ${libFlags} $rustcFlags" +
|
||||
" && grep \"^$out:\" $out.d.raw > $out.d",
|
||||
CommandDeps: []string{"$rustcCmd", "$mkcraterspCmd"},
|
||||
CommandDeps: []string{"$rustcCmd"},
|
||||
// Rustc deps-info writes out make compatible dep files: https://github.com/rust-lang/rust/issues/7633
|
||||
// Rustc emits unneeded dependency lines for the .d and input .rs files.
|
||||
// Those extra lines cause ninja warning:
|
||||
@@ -42,12 +42,7 @@ var (
|
||||
Deps: blueprint.DepsGCC,
|
||||
Depfile: "$out.d",
|
||||
},
|
||||
"rustcFlags", "libFlags", "envVars")
|
||||
rustLink = pctx.AndroidStaticRule("rustLink",
|
||||
blueprint.RuleParams{
|
||||
Command: "${config.RustLinker} -o $out ${crtBegin} ${earlyLinkFlags} @$in ${linkFlags} ${crtEnd}",
|
||||
},
|
||||
"earlyLinkFlags", "linkFlags", "crtBegin", "crtEnd")
|
||||
"rustcFlags", "earlyLinkFlags", "linkFlags", "libFlags", "crtBegin", "crtEnd", "envVars")
|
||||
|
||||
_ = pctx.SourcePathVariable("rustdocCmd", "${config.RustBin}/rustdoc")
|
||||
rustdoc = pctx.AndroidStaticRule("rustdoc",
|
||||
@@ -106,13 +101,14 @@ var (
|
||||
`KYTHE_CANONICALIZE_VNAME_PATHS=prefer-relative ` +
|
||||
`$rustExtractor $envVars ` +
|
||||
`$rustcCmd ` +
|
||||
`-C linker=true ` +
|
||||
`-C linker=${config.RustLinker} ` +
|
||||
`-C link-args="${crtBegin} ${linkFlags} ${crtEnd}" ` +
|
||||
`$in ${libFlags} $rustcFlags`,
|
||||
CommandDeps: []string{"$rustExtractor", "$kytheVnames"},
|
||||
Rspfile: "${out}.rsp",
|
||||
RspfileContent: "$in",
|
||||
},
|
||||
"rustcFlags", "libFlags", "envVars")
|
||||
"rustcFlags", "linkFlags", "libFlags", "crtBegin", "crtEnd", "envVars")
|
||||
)
|
||||
|
||||
type buildOutput struct {
|
||||
@@ -242,12 +238,6 @@ func rustEnvVars(ctx ModuleContext, deps PathDeps) []string {
|
||||
}
|
||||
}
|
||||
|
||||
envVars = append(envVars, "AR=${cc_config.ClangBin}/llvm-ar")
|
||||
|
||||
if ctx.Darwin() {
|
||||
envVars = append(envVars, "ANDROID_RUST_DARWIN=true")
|
||||
}
|
||||
|
||||
return envVars
|
||||
}
|
||||
|
||||
@@ -255,7 +245,8 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl
|
||||
outputFile android.WritablePath, crateType string) buildOutput {
|
||||
|
||||
var inputs android.Paths
|
||||
var implicits, linkImplicits, linkOrderOnly android.Paths
|
||||
var implicits android.Paths
|
||||
var orderOnly android.Paths
|
||||
var output buildOutput
|
||||
var rustcFlags, linkFlags []string
|
||||
var earlyLinkFlags string
|
||||
@@ -319,15 +310,15 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl
|
||||
implicits = append(implicits, rustLibsToPaths(deps.RLibs)...)
|
||||
implicits = append(implicits, rustLibsToPaths(deps.DyLibs)...)
|
||||
implicits = append(implicits, rustLibsToPaths(deps.ProcMacros)...)
|
||||
implicits = append(implicits, deps.AfdoProfiles...)
|
||||
implicits = append(implicits, deps.StaticLibs...)
|
||||
implicits = append(implicits, deps.SharedLibDeps...)
|
||||
implicits = append(implicits, deps.srcProviderFiles...)
|
||||
implicits = append(implicits, deps.WholeStaticLibs...)
|
||||
implicits = append(implicits, deps.AfdoProfiles...)
|
||||
|
||||
linkImplicits = append(linkImplicits, deps.LibDeps...)
|
||||
linkImplicits = append(linkImplicits, deps.CrtBegin...)
|
||||
linkImplicits = append(linkImplicits, deps.CrtEnd...)
|
||||
implicits = append(implicits, deps.CrtBegin...)
|
||||
implicits = append(implicits, deps.CrtEnd...)
|
||||
|
||||
linkOrderOnly = append(linkOrderOnly, deps.linkObjects...)
|
||||
orderOnly = append(orderOnly, deps.SharedLibs...)
|
||||
|
||||
if len(deps.SrcDeps) > 0 {
|
||||
moduleGenDir := ctx.RustModule().compiler.CargoOutDir()
|
||||
@@ -353,14 +344,29 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl
|
||||
implicits = append(implicits, outputs.Paths()...)
|
||||
}
|
||||
|
||||
envVars = append(envVars, "ANDROID_RUST_VERSION="+config.GetRustVersion(ctx))
|
||||
|
||||
if ctx.RustModule().compiler.CargoEnvCompat() {
|
||||
if _, ok := ctx.RustModule().compiler.(*binaryDecorator); ok {
|
||||
envVars = append(envVars, "CARGO_BIN_NAME="+strings.TrimSuffix(outputFile.Base(), outputFile.Ext()))
|
||||
}
|
||||
envVars = append(envVars, "CARGO_CRATE_NAME="+ctx.RustModule().CrateName())
|
||||
pkgVersion := ctx.RustModule().compiler.CargoPkgVersion()
|
||||
if pkgVersion != "" {
|
||||
envVars = append(envVars, "CARGO_PKG_VERSION="+pkgVersion)
|
||||
}
|
||||
}
|
||||
|
||||
if flags.Clippy {
|
||||
clippyFile := android.PathForModuleOut(ctx, outputFile.Base()+".clippy")
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
Rule: clippyDriver,
|
||||
Description: "clippy " + main.Rel(),
|
||||
Output: clippyFile,
|
||||
Inputs: inputs,
|
||||
Implicits: implicits,
|
||||
Rule: clippyDriver,
|
||||
Description: "clippy " + main.Rel(),
|
||||
Output: clippyFile,
|
||||
ImplicitOutputs: nil,
|
||||
Inputs: inputs,
|
||||
Implicits: implicits,
|
||||
OrderOnly: orderOnly,
|
||||
Args: map[string]string{
|
||||
"rustcFlags": strings.Join(rustcFlags, " "),
|
||||
"libFlags": strings.Join(libFlags, " "),
|
||||
@@ -372,49 +378,24 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl
|
||||
implicits = append(implicits, clippyFile)
|
||||
}
|
||||
|
||||
rustcOutputFile := outputFile
|
||||
var rustcImplicitOutputs android.WritablePaths
|
||||
usesLinker := crateType == "bin" || crateType == "dylib" || crateType == "cdylib" || crateType == "proc-macro"
|
||||
if usesLinker {
|
||||
rustcOutputFile = android.PathForModuleOut(ctx, outputFile.Base()+".rsp")
|
||||
rustcImplicitOutputs = android.WritablePaths{
|
||||
android.PathForModuleOut(ctx, rustcOutputFile.Base()+".whole.a"),
|
||||
android.PathForModuleOut(ctx, rustcOutputFile.Base()+".a"),
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
Rule: rustc,
|
||||
Description: "rustc " + main.Rel(),
|
||||
Output: rustcOutputFile,
|
||||
Inputs: inputs,
|
||||
Implicits: implicits,
|
||||
ImplicitOutputs: rustcImplicitOutputs,
|
||||
Rule: rustc,
|
||||
Description: "rustc " + main.Rel(),
|
||||
Output: outputFile,
|
||||
Inputs: inputs,
|
||||
Implicits: implicits,
|
||||
OrderOnly: orderOnly,
|
||||
Args: map[string]string{
|
||||
"rustcFlags": strings.Join(rustcFlags, " "),
|
||||
"libFlags": strings.Join(libFlags, " "),
|
||||
"envVars": strings.Join(envVars, " "),
|
||||
"rustcFlags": strings.Join(rustcFlags, " "),
|
||||
"earlyLinkFlags": earlyLinkFlags,
|
||||
"linkFlags": strings.Join(linkFlags, " "),
|
||||
"libFlags": strings.Join(libFlags, " "),
|
||||
"crtBegin": strings.Join(deps.CrtBegin.Strings(), " "),
|
||||
"crtEnd": strings.Join(deps.CrtEnd.Strings(), " "),
|
||||
"envVars": strings.Join(envVars, " "),
|
||||
},
|
||||
})
|
||||
|
||||
if usesLinker {
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
Rule: rustLink,
|
||||
Description: "rustLink " + main.Rel(),
|
||||
Output: outputFile,
|
||||
Inputs: android.Paths{rustcOutputFile},
|
||||
Implicits: linkImplicits,
|
||||
OrderOnly: linkOrderOnly,
|
||||
Args: map[string]string{
|
||||
"earlyLinkFlags": earlyLinkFlags,
|
||||
"linkFlags": strings.Join(linkFlags, " "),
|
||||
"crtBegin": strings.Join(deps.CrtBegin.Strings(), " "),
|
||||
"crtEnd": strings.Join(deps.CrtEnd.Strings(), " "),
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
if flags.EmitXrefs {
|
||||
kytheFile := android.PathForModuleOut(ctx, outputFile.Base()+".kzip")
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
@@ -423,9 +404,13 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl
|
||||
Output: kytheFile,
|
||||
Inputs: inputs,
|
||||
Implicits: implicits,
|
||||
OrderOnly: orderOnly,
|
||||
Args: map[string]string{
|
||||
"rustcFlags": strings.Join(rustcFlags, " "),
|
||||
"linkFlags": strings.Join(linkFlags, " "),
|
||||
"libFlags": strings.Join(libFlags, " "),
|
||||
"crtBegin": strings.Join(deps.CrtBegin.Strings(), " "),
|
||||
"crtEnd": strings.Join(deps.CrtEnd.Strings(), " "),
|
||||
"envVars": strings.Join(envVars, " "),
|
||||
},
|
||||
})
|
||||
|
Reference in New Issue
Block a user