aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorLiz Prucka <lizprucka@google.com>2023-02-07 16:20:49 -0600
committerAleksandr Nogikh <wp32pw@gmail.com>2023-02-10 19:24:33 +0100
commit93e26d605eebce2ad19e6f37d9e96a872ca55cce (patch)
tree57b1d037b276f5aa01c19a83458bd699a292b43e /pkg
parent95871dcc45f6531b4c692ff892aad56bdd95e16f (diff)
pkg/build: added bazel build for android
Added functionality to build with bazel instead of 'build.sh', as 'build.sh' is being depreciated. Checks the branch information from 'build.config.constants' file and uses Bazel for android14+.
Diffstat (limited to 'pkg')
-rw-r--r--pkg/build/android.go41
1 files changed, 32 insertions, 9 deletions
diff --git a/pkg/build/android.go b/pkg/build/android.go
index fef296d08..9d078a4ae 100644
--- a/pkg/build/android.go
+++ b/pkg/build/android.go
@@ -10,6 +10,7 @@ import (
"io/ioutil"
"os"
"path/filepath"
+ "strings"
"time"
"github.com/google/syzkaller/pkg/osutil"
@@ -18,6 +19,7 @@ import (
const (
kernelConfig = "common/build.config.gki_kasan.x86_64"
moduleConfig = "common-modules/virtual-device/build.config.virtual_device_kasan.x86_64"
+ bazelTarget = "//common-modules/virtual-device:virtual_device_x86_64_dist"
)
type android struct{}
@@ -31,6 +33,13 @@ func (a android) runBuild(kernelDir, buildConfig string) error {
return err
}
+func (a android) runBazel(kernelDir, buildConfig string) error {
+ cmd := osutil.Command("tools/bazel", "run", "--kasan", bazelTarget, "--", "--dist_dir=dist")
+ cmd.Dir = kernelDir
+ _, err := osutil.Run(time.Hour, cmd)
+ return err
+}
+
func (a android) readCompiler(archivePath string) (string, error) {
f, err := os.Open(archivePath)
if err != nil {
@@ -75,11 +84,29 @@ func (a android) build(params Params) (ImageDetails, error) {
return details, fmt.Errorf("sysctl file is not supported for android cuttlefish images")
}
- if err := a.runBuild(params.KernelDir, kernelConfig); err != nil {
- return details, fmt.Errorf("failed to build kernel: %s", err)
- }
- if err := a.runBuild(params.KernelDir, moduleConfig); err != nil {
- return details, fmt.Errorf("failed to build modules: %s", err)
+ var config string
+ var err error
+ // Default to build.sh if compiler is not specified.
+ if params.Compiler == "bazel" {
+ if err := a.runBazel(params.KernelDir, bazelTarget); err != nil {
+ return details, fmt.Errorf("failed to build kernel: %s", err)
+ }
+ // Find the .config file; it is placed in a temporary output directory during the build.
+ cmd := osutil.Command("find", ".", "-wholename", "*virtual_device_x86_64_config/out_dir/.config")
+ cmd.Dir = params.KernelDir
+ configBytes, err := osutil.Run(time.Minute, cmd)
+ if err != nil {
+ return details, fmt.Errorf("failed to find build config: %v", err)
+ }
+ config = filepath.Join(params.KernelDir, strings.TrimSpace(string(configBytes)))
+ } else {
+ if err := a.runBuild(params.KernelDir, kernelConfig); err != nil {
+ return details, fmt.Errorf("failed to build kernel: %s", err)
+ }
+ if err := a.runBuild(params.KernelDir, moduleConfig); err != nil {
+ return details, fmt.Errorf("failed to build modules: %s", err)
+ }
+ config = filepath.Join(params.KernelDir, "out", "common", ".config")
}
buildDistDir := filepath.Join(params.KernelDir, "dist")
@@ -87,10 +114,6 @@ func (a android) build(params Params) (ImageDetails, error) {
vmlinux := filepath.Join(buildDistDir, "vmlinux")
initramfs := filepath.Join(buildDistDir, "initramfs.img")
- buildOutDir := filepath.Join(params.KernelDir, "out")
- config := filepath.Join(buildOutDir, "common", ".config")
-
- var err error
details.CompilerID, err = a.readCompiler(filepath.Join(buildDistDir, "kernel-headers.tar.gz"))
if err != nil {
return details, err