From 93e26d605eebce2ad19e6f37d9e96a872ca55cce Mon Sep 17 00:00:00 2001 From: Liz Prucka Date: Tue, 7 Feb 2023 16:20:49 -0600 Subject: 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+. --- pkg/build/android.go | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) (limited to 'pkg') 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 -- cgit mrf-deployment