summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bazel/bazel_proxy.go28
-rw-r--r--cmd/soong_build/main.go6
-rw-r--r--ui/build/config.go10
-rw-r--r--ui/build/soong.go2
4 files changed, 36 insertions, 10 deletions
diff --git a/bazel/bazel_proxy.go b/bazel/bazel_proxy.go
index 2940b9995..229818da0 100644
--- a/bazel/bazel_proxy.go
+++ b/bazel/bazel_proxy.go
@@ -26,10 +26,11 @@ import (
"time"
)
-// Logs fatal events of ProxyServer.
+// Logs events of ProxyServer.
type ServerLogger interface {
Fatal(v ...interface{})
Fatalf(format string, v ...interface{})
+ Println(v ...interface{})
}
// CmdRequest is a request to the Bazel Proxy server.
@@ -71,9 +72,10 @@ type ProxyClient struct {
// The ProxyServer will only live as long as soong_ui does; the
// underlying Bazel server will live past the duration of the build.
type ProxyServer struct {
- logger ServerLogger
- outDir string
- workspaceDir string
+ logger ServerLogger
+ outDir string
+ workspaceDir string
+ bazeliskVersion string
// The server goroutine will listen on this channel and stop handling requests
// once it is written to.
done chan struct{}
@@ -119,12 +121,17 @@ func (b *ProxyClient) IssueCommand(req CmdRequest) (CmdResponse, error) {
}
// NewProxyServer is a constructor for a ProxyServer.
-func NewProxyServer(logger ServerLogger, outDir string, workspaceDir string) *ProxyServer {
+func NewProxyServer(logger ServerLogger, outDir string, workspaceDir string, bazeliskVersion string) *ProxyServer {
+ if len(bazeliskVersion) > 0 {
+ logger.Println("** Using Bazelisk for this build, due to env var USE_BAZEL_VERSION=" + bazeliskVersion + " **")
+ }
+
return &ProxyServer{
- logger: logger,
- outDir: outDir,
- workspaceDir: workspaceDir,
- done: make(chan struct{}),
+ logger: logger,
+ outDir: outDir,
+ workspaceDir: workspaceDir,
+ done: make(chan struct{}),
+ bazeliskVersion: bazeliskVersion,
}
}
@@ -155,6 +162,9 @@ func (b *ProxyServer) handleRequest(conn net.Conn) error {
return fmt.Errorf("Error decoding request: %s", err)
}
+ if len(b.bazeliskVersion) > 0 {
+ req.Env = append(req.Env, "USE_BAZEL_VERSION="+b.bazeliskVersion)
+ }
stdout, stderr, cmdErr := ExecBazel("./build/bazel/bin/bazel", b.workspaceDir, req)
errorString := ""
if cmdErr != nil {
diff --git a/cmd/soong_build/main.go b/cmd/soong_build/main.go
index e006c9d7e..d589925c9 100644
--- a/cmd/soong_build/main.go
+++ b/cmd/soong_build/main.go
@@ -552,6 +552,12 @@ func main() {
}
writeMetrics(configuration, ctx.EventHandler, metricsDir)
}
+
+ // Register this environment variablesas being an implicit dependencies of
+ // soong_build. Changes to this environment variable will result in
+ // retriggering soong_build.
+ configuration.Getenv("USE_BAZEL_VERSION")
+
writeUsedEnvironmentFile(configuration)
// Touch the output file so that it's the newest file created by soong_build.
diff --git a/ui/build/config.go b/ui/build/config.go
index 0df13742f..711774a8a 100644
--- a/ui/build/config.go
+++ b/ui/build/config.go
@@ -1642,6 +1642,16 @@ func (c *configImpl) IsPersistentBazelEnabled() bool {
return c.Environment().IsEnvTrue("USE_PERSISTENT_BAZEL")
}
+// GetBazeliskBazelVersion returns the Bazel version to use for this build,
+// or the empty string if the current canonical prod Bazel should be used.
+// This environment variable should only be set to debug the build system.
+// The Bazel version, if set, will be passed to Bazelisk, and Bazelisk will
+// handle downloading and invoking the correct Bazel binary.
+func (c *configImpl) GetBazeliskBazelVersion() string {
+ value, _ := c.Environment().Get("USE_BAZEL_VERSION")
+ return value
+}
+
func (c *configImpl) BazelModulesForceEnabledByFlag() string {
return c.bazelForceEnabledModules
}
diff --git a/ui/build/soong.go b/ui/build/soong.go
index 6de8d6f98..986ec702b 100644
--- a/ui/build/soong.go
+++ b/ui/build/soong.go
@@ -533,7 +533,7 @@ func runSoong(ctx Context, config Config) {
defer ctx.EndTrace()
if config.IsPersistentBazelEnabled() {
- bazelProxy := bazel.NewProxyServer(ctx.Logger, config.OutDir(), filepath.Join(config.SoongOutDir(), "workspace"))
+ bazelProxy := bazel.NewProxyServer(ctx.Logger, config.OutDir(), filepath.Join(config.SoongOutDir(), "workspace"), config.GetBazeliskBazelVersion())
bazelProxy.Start()
defer bazelProxy.Close()
}