aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorDan Willemsen <dwillemsen@google.com>2017-08-04 16:04:04 -0700
committerDan Willemsen <dwillemsen@google.com>2017-08-18 10:13:22 -0700
commit99a75cd2a5102e72b07a7614e84f8624d3c2ddd1 (patch)
tree37cf7ebfe1dcbc192d496a72833dd4fc27a9e0d4 /ui
parentfd697f425657d6f443def3f0b1862888b0095bac (diff)
downloadbuild_soong-99a75cd2a5102e72b07a7614e84f8624d3c2ddd1.tar.gz
build_soong-99a75cd2a5102e72b07a7614e84f8624d3c2ddd1.tar.bz2
build_soong-99a75cd2a5102e72b07a7614e84f8624d3c2ddd1.zip
Obsolete bootstrap.bash and ./soong wrappers
We can call directly into the blueprint bootstrap.bash using values that soong_ui has already calculated. Instead of calling into blueprint.bash, build minibp with microfactory, and directly run ninja. This allows us to get individual tracing data from each component. Test: m -j blueprint_tools Test: m clean; m -j blueprint_tools Change-Id: I2239943c9a8a3ad6e1a40fa0dc914421f4b5202c
Diffstat (limited to 'ui')
-rw-r--r--ui/build/Android.bp1
-rw-r--r--ui/build/build.go1
-rw-r--r--ui/build/soong.go114
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")
}