Build mk2rbc and rbcrun during bootstrap

Bug: 172923994
Test: treehugger
Change-Id: I6b552b40eecbaedd17b39ed5d00ca2a0b0772c81
This commit is contained in:
Sasha Smundak
2021-04-09 12:03:51 -07:00
parent 6e4950a061
commit 7ae80a7044
2 changed files with 27 additions and 14 deletions

View File

@@ -261,6 +261,12 @@ func runMakeProductConfig(ctx Context, config Config) {
"BUILD_BROKEN_USES_BUILD_STATIC_LIBRARY",
}, exportEnvVars...), BannerVars...)
// We need Roboleaf converter and runner in the mixed mode
runMicrofactory(ctx, config, ".bootstrap/bin/mk2rbc", "android/soong/mk2rbc/cmd",
map[string]string{"android/soong": "build/soong"})
runMicrofactory(ctx, config, ".bootstrap/bin/rbcrun", "rbcrun/cmd",
map[string]string{"go.starlark.net": "external/starlark-go", "rbcrun": "build/make/tools/rbcrun"})
makeVars, err := dumpMakeVars(ctx, config, config.Arguments(), allVars, true, "")
if err != nil {
ctx.Fatalln("Error dumping make vars:", err)

View File

@@ -265,20 +265,8 @@ func runSoong(ctx Context, config Config) {
}
}()
var cfg microfactory.Config
cfg.Map("github.com/google/blueprint", "build/blueprint")
cfg.TrimPath = absPath(ctx, ".")
func() {
ctx.BeginTrace(metrics.RunSoong, "bpglob")
defer ctx.EndTrace()
bpglob := filepath.Join(config.SoongOutDir(), ".minibootstrap/bpglob")
if _, err := microfactory.Build(&cfg, bpglob, "github.com/google/blueprint/bootstrap/bpglob"); err != nil {
ctx.Fatalln("Failed to build bpglob:", err)
}
}()
runMicrofactory(ctx, config, ".minibootstrap/bpglob", "github.com/google/blueprint/bootstrap/bpglob",
map[string]string{"github.com/google/blueprint": "build/blueprint"})
ninja := func(name, file string) {
ctx.BeginTrace(metrics.RunSoong, name)
@@ -332,6 +320,25 @@ func runSoong(ctx Context, config Config) {
}
}
func runMicrofactory(ctx Context, config Config, relExePath string, pkg string, mapping map[string]string) {
name := filepath.Base(relExePath)
ctx.BeginTrace(metrics.RunSoong, name)
defer ctx.EndTrace()
cfg := microfactory.Config{TrimPath: absPath(ctx, ".")}
for pkgPrefix, pathPrefix := range mapping {
cfg.Map(pkgPrefix, pathPrefix)
}
exePath := filepath.Join(config.SoongOutDir(), relExePath)
dir := filepath.Dir(exePath)
if err := os.MkdirAll(dir, 0777); err != nil {
ctx.Fatalf("cannot create %s: %s", dir, err)
}
if _, err := microfactory.Build(&cfg, exePath, pkg); err != nil {
ctx.Fatalf("failed to build %s: %s", name, err)
}
}
func shouldCollectBuildSoongMetrics(config Config) bool {
// Do not collect metrics protobuf if the soong_build binary ran as the
// bp2build converter or the JSON graph dump.