diff options
| author | Liz Prucka <lizprucka@google.com> | 2023-02-07 16:20:49 -0600 |
|---|---|---|
| committer | Aleksandr Nogikh <wp32pw@gmail.com> | 2023-02-10 19:24:33 +0100 |
| commit | 93e26d605eebce2ad19e6f37d9e96a872ca55cce (patch) | |
| tree | 57b1d037b276f5aa01c19a83458bd699a292b43e /pkg | |
| parent | 95871dcc45f6531b4c692ff892aad56bdd95e16f (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.go | 41 |
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 |
