From 484e362fcff09b8b74162eefd0c3bfd67e829d94 Mon Sep 17 00:00:00 2001 From: Florent Revest Date: Wed, 2 Oct 2024 16:02:12 +0200 Subject: pkg/build: use the build environment in clean() calls This unifies the build() and clean() interfaces such that if a custom compiler or make binary is provided in the manager or bisection config, they can be taken into account by the clean() interface. --- pkg/instance/instance.go | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) (limited to 'pkg/instance') diff --git a/pkg/instance/instance.go b/pkg/instance/instance.go index e1e222a3f..b21bbed9e 100644 --- a/pkg/instance/instance.go +++ b/pkg/instance/instance.go @@ -30,6 +30,7 @@ import ( type Env interface { BuildSyzkaller(string, string) (string, error) + CleanKernel(*BuildKernelConfig) error BuildKernel(*BuildKernelConfig) (string, build.ImageDetails, error) Test(numVMs int, reproSyz, reproOpts, reproC []byte) ([]EnvTestResult, error) } @@ -135,19 +136,13 @@ func (env *env) BuildSyzkaller(repoURL, commit string) (string, error) { return buildLog, nil } -func (env *env) BuildKernel(buildCfg *BuildKernelConfig) ( - string, build.ImageDetails, error) { - if env.buildSem != nil { - env.buildSem.Wait() - defer env.buildSem.Signal() - } - imageDir := filepath.Join(env.cfg.Workdir, "image") - params := build.Params{ +func (env *env) buildParamsFromCfg(buildCfg *BuildKernelConfig) build.Params { + return build.Params{ TargetOS: env.cfg.TargetOS, TargetArch: env.cfg.TargetVMArch, VMType: env.cfg.Type, KernelDir: env.cfg.KernelSrc, - OutputDir: imageDir, + OutputDir: filepath.Join(env.cfg.Workdir, "image"), Make: buildCfg.MakeBin, Compiler: buildCfg.CompilerBin, Linker: buildCfg.LinkerBin, @@ -158,20 +153,38 @@ func (env *env) BuildKernel(buildCfg *BuildKernelConfig) ( Config: buildCfg.KernelConfig, BuildCPUs: buildCfg.BuildCPUs, } +} + +func (env *env) BuildKernel(buildCfg *BuildKernelConfig) ( + string, build.ImageDetails, error) { + if env.buildSem != nil { + env.buildSem.Wait() + defer env.buildSem.Signal() + } + params := env.buildParamsFromCfg(buildCfg) details, err := build.Image(params) if err != nil { return "", details, err } - if err := SetConfigImage(env.cfg, imageDir, true); err != nil { + if err := SetConfigImage(env.cfg, params.OutputDir, true); err != nil { return "", details, err } - kernelConfigFile := filepath.Join(imageDir, "kernel.config") + kernelConfigFile := filepath.Join(params.OutputDir, "kernel.config") if !osutil.IsExist(kernelConfigFile) { kernelConfigFile = "" } return kernelConfigFile, details, nil } +func (env *env) CleanKernel(buildCfg *BuildKernelConfig) error { + if env.buildSem != nil { + env.buildSem.Wait() + defer env.buildSem.Signal() + } + params := env.buildParamsFromCfg(buildCfg) + return build.Clean(params) +} + func SetConfigImage(cfg *mgrconfig.Config, imageDir string, reliable bool) error { cfg.KernelObj = filepath.Join(imageDir, "obj") cfg.Image = filepath.Join(imageDir, "image") -- cgit mrf-deployment