diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/build/Android.bp | 1 | ||||
-rw-r--r-- | ui/build/build.go | 1 | ||||
-rw-r--r-- | ui/build/soong.go | 114 |
3 files changed, 90 insertions, 26 deletions
diff --git a/ui/build/Android.bp b/ui/build/Android.bp index 7640e84d..34c21f70 100644 --- a/ui/build/Android.bp +++ b/ui/build/Android.bp @@ -20,6 +20,7 @@ bootstrap_go_package { "soong-ui-tracer", "soong-shared", "soong-finder", + "blueprint-microfactory", ], srcs: [ "build.go", diff --git a/ui/build/build.go b/ui/build/build.go index 076e15e4..45d18e0a 100644 --- a/ui/build/build.go +++ b/ui/build/build.go @@ -156,7 +156,6 @@ func Build(ctx Context, config Config, what int) { if what&BuildSoong != 0 { // Run Soong - runSoongBootstrap(ctx, config) runSoong(ctx, config) } diff --git a/ui/build/soong.go b/ui/build/soong.go index 2af3616b..8220597d 100644 --- a/ui/build/soong.go +++ b/ui/build/soong.go @@ -15,37 +15,101 @@ package build import ( + "os" "path/filepath" -) - -func runSoongBootstrap(ctx Context, config Config) { - ctx.BeginTrace("bootstrap soong") - defer ctx.EndTrace() + "strconv" + "time" - cmd := Command(ctx, config, "soong bootstrap", "./bootstrap.bash") - cmd.Environment.Set("BUILDDIR", config.SoongOutDir()) - cmd.Environment.Set("NINJA_BUILDDIR", config.OutDir()) - cmd.Environment.Set("NO_DEPRECATION_WARNING", "true") - cmd.Sandbox = soongSandbox - cmd.Stdout = ctx.Stdout() - cmd.Stderr = ctx.Stderr() - cmd.RunOrFatal() -} + "github.com/google/blueprint/microfactory" +) func runSoong(ctx Context, config Config) { ctx.BeginTrace("soong") defer ctx.EndTrace() - cmd := Command(ctx, config, "soong", - filepath.Join(config.SoongOutDir(), "soong"), "-w", "dupbuild=err") - if config.IsVerbose() { - cmd.Args = append(cmd.Args, "-v") + func() { + ctx.BeginTrace("blueprint bootstrap") + defer ctx.EndTrace() + + cmd := Command(ctx, config, "blueprint bootstrap", "build/blueprint/bootstrap.bash", "-t") + cmd.Environment.Set("BLUEPRINTDIR", "./build/blueprint") + cmd.Environment.Set("BOOTSTRAP", "./build/blueprint/bootstrap.bash") + cmd.Environment.Set("BUILDDIR", config.SoongOutDir()) + cmd.Environment.Set("GOROOT", filepath.Join("./prebuilts/go", config.HostPrebuiltTag())) + cmd.Environment.Set("NINJA_BUILDDIR", config.OutDir()) + cmd.Environment.Set("SRCDIR", ".") + cmd.Environment.Set("TOPNAME", "Android.bp") + cmd.Sandbox = soongSandbox + cmd.Stdout = ctx.Stdout() + cmd.Stderr = ctx.Stderr() + cmd.RunOrFatal() + }() + + func() { + ctx.BeginTrace("environment check") + defer ctx.EndTrace() + + envFile := filepath.Join(config.SoongOutDir(), ".soong.environment") + envTool := filepath.Join(config.SoongOutDir(), ".bootstrap/bin/soong_env") + if _, err := os.Stat(envFile); err == nil { + if _, err := os.Stat(envTool); err == nil { + cmd := Command(ctx, config, "soong_env", envTool, envFile) + cmd.Sandbox = soongSandbox + cmd.Stdout = ctx.Stdout() + cmd.Stderr = ctx.Stderr() + if err := cmd.Run(); err != nil { + ctx.Verboseln("soong_env failed, forcing manifest regeneration") + os.Remove(envFile) + } + } else { + ctx.Verboseln("Missing soong_env tool, forcing manifest regeneration") + os.Remove(envFile) + } + } else if !os.IsNotExist(err) { + ctx.Fatalf("Failed to stat %f: %v", envFile, err) + } + }() + + func() { + ctx.BeginTrace("minibp") + defer ctx.EndTrace() + + var cfg microfactory.Config + cfg.Map("github.com/google/blueprint", "build/blueprint") + + if absPath, err := filepath.Abs("."); err == nil { + cfg.TrimPath = absPath + } + + minibp := filepath.Join(config.SoongOutDir(), ".minibootstrap/minibp") + if _, err := microfactory.Build(&cfg, minibp, "github.com/google/blueprint/bootstrap/minibp"); err != nil { + ctx.Fatalln("Failed to build minibp:", err) + } + }() + + ninja := func(name, file string) { + ctx.BeginTrace(name) + defer ctx.EndTrace() + + cmd := Command(ctx, config, "soong "+name, + config.PrebuiltBuildTool("ninja"), + "-d", "keepdepfile", + "-w", "dupbuild=err", + "-j", strconv.Itoa(config.Parallel()), + "-f", filepath.Join(config.SoongOutDir(), file)) + if config.IsVerbose() { + cmd.Args = append(cmd.Args, "-v") + } + cmd.Environment.Set("GOROOT", filepath.Join("./prebuilts/go", config.HostPrebuiltTag())) + cmd.Sandbox = soongSandbox + cmd.Stdin = ctx.Stdin() + cmd.Stdout = ctx.Stdout() + cmd.Stderr = ctx.Stderr() + + defer ctx.ImportNinjaLog(filepath.Join(config.OutDir(), ".ninja_log"), time.Now()) + cmd.RunOrFatal() } - cmd.Environment.Set("SKIP_NINJA", "true") - cmd.Environment.Set("NO_DEPRECATION_WARNING", "true") - cmd.Sandbox = soongSandbox - cmd.Stdin = ctx.Stdin() - cmd.Stdout = ctx.Stdout() - cmd.Stderr = ctx.Stderr() - cmd.RunOrFatal() + + ninja("minibootstrap", ".minibootstrap/build.ninja") + ninja("bootstrap", ".bootstrap/build.ninja") } |