diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-08-21 14:28:06 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2024-08-22 09:49:03 +0000 |
| commit | ea1cd5ff3029315c1f89b98b820ceeebfba0e4df (patch) | |
| tree | ead4b8475abce2fecb5a30f3cc1d6d62a2bac982 /pkg/build | |
| parent | aa99fc3349e97ea596c31624efde306de4136241 (diff) | |
pkg/build: introduce the build jobs parameter
This parameter defines the number of cores dedicated to the kernel build
process. By default, it's equal to the number of available CPUs.
Diffstat (limited to 'pkg/build')
| -rw-r--r-- | pkg/build/build.go | 5 | ||||
| -rw-r--r-- | pkg/build/freebsd.go | 12 | ||||
| -rw-r--r-- | pkg/build/linux.go | 13 | ||||
| -rw-r--r-- | pkg/build/netbsd.go | 8 | ||||
| -rw-r--r-- | pkg/build/openbsd.go | 7 |
5 files changed, 25 insertions, 20 deletions
diff --git a/pkg/build/build.go b/pkg/build/build.go index 4d6e3bce3..2274ceb8e 100644 --- a/pkg/build/build.go +++ b/pkg/build/build.go @@ -12,6 +12,7 @@ import ( "os" "path/filepath" "regexp" + "runtime" "strings" "time" @@ -37,6 +38,7 @@ type Params struct { SysctlFile string Config []byte Tracer debugtracer.DebugTracer + BuildJobs int // If 0, all CPUs will be used. Build json.RawMessage } @@ -71,6 +73,9 @@ func Image(params Params) (details ImageDetails, err error) { if params.Tracer == nil { params.Tracer = &debugtracer.NullTracer{} } + if params.BuildJobs == 0 { + params.BuildJobs = runtime.NumCPU() + } var builder builder builder, err = getBuilder(params.TargetOS, params.TargetArch, params.VMType) if err != nil { diff --git a/pkg/build/freebsd.go b/pkg/build/freebsd.go index 2f4aa1313..2c6e0fcc9 100644 --- a/pkg/build/freebsd.go +++ b/pkg/build/freebsd.go @@ -45,12 +45,12 @@ options DIAGNOSTIC return ImageDetails{}, err } objPrefix := filepath.Join(params.KernelDir, "obj") - output, err := ctx.make(params.KernelDir, objPrefix, "kernel-toolchain") + output, err := ctx.make(params.KernelDir, objPrefix, params.BuildJobs, "kernel-toolchain") if err != nil { return ImageDetails{}, err } - if _, err := ctx.make(params.KernelDir, objPrefix, "buildkernel", "WITH_EXTRA_TCP_STACKS=", - fmt.Sprintf("KERNCONF=%v", confFile)); err != nil { + if _, err := ctx.make(params.KernelDir, objPrefix, params.BuildJobs, "buildkernel", + "WITH_EXTRA_TCP_STACKS=", fmt.Sprintf("KERNCONF=%v", confFile)); err != nil { // The kernel-toolchain make target has to be built separately // because FreeBSD's build doesn't correctly order the two // targets. Its output is useful for debugging though, so @@ -121,16 +121,16 @@ sudo mdconfig -d -u ${md#md} func (ctx freebsd) clean(kernelDir, targetArch string) error { objPrefix := filepath.Join(kernelDir, "obj") - _, err := ctx.make(kernelDir, objPrefix, "cleanworld") + _, err := ctx.make(kernelDir, objPrefix, runtime.NumCPU(), "cleanworld") return err } -func (ctx freebsd) make(kernelDir, objPrefix string, makeArgs ...string) ([]byte, error) { +func (ctx freebsd) make(kernelDir, objPrefix string, jobs int, makeArgs ...string) ([]byte, error) { args := append([]string{ fmt.Sprintf("MAKEOBJDIRPREFIX=%v", objPrefix), "make", "-C", kernelDir, - "-j", strconv.Itoa(runtime.NumCPU()), + "-j", strconv.Itoa(jobs), }, makeArgs...) output, err := osutil.RunCmd(3*time.Hour, kernelDir, "sh", "-c", strings.Join(args, " ")) return output, err diff --git a/pkg/build/linux.go b/pkg/build/linux.go index 4069e0202..b68a87bc1 100644 --- a/pkg/build/linux.go +++ b/pkg/build/linux.go @@ -142,7 +142,7 @@ func (linux) createImage(params Params, kernelPath string) error { } func (linux) clean(kernelDir, targetArch string) error { - return runMakeImpl(targetArch, "", "", "", kernelDir, []string{"distclean"}) + return runMakeImpl(targetArch, "", "", "", kernelDir, runtime.NumCPU(), []string{"distclean"}) } func (linux) writeFile(file string, data []byte) error { @@ -152,9 +152,9 @@ func (linux) writeFile(file string, data []byte) error { return osutil.SandboxChown(file) } -func runMakeImpl(arch, compiler, linker, ccache, kernelDir string, extraArgs []string) error { +func runMakeImpl(arch, compiler, linker, ccache, kernelDir string, jobs int, extraArgs []string) error { target := targets.Get(targets.Linux, arch) - args := LinuxMakeArgs(target, compiler, linker, ccache, "") + args := LinuxMakeArgs(target, compiler, linker, ccache, "", jobs) args = append(args, extraArgs...) cmd := osutil.Command("make", args...) if err := osutil.Sandbox(cmd, true, true); err != nil { @@ -179,12 +179,13 @@ func runMakeImpl(arch, compiler, linker, ccache, kernelDir string, extraArgs []s } func runMake(params Params, extraArgs ...string) error { - return runMakeImpl(params.TargetArch, params.Compiler, params.Linker, params.Ccache, params.KernelDir, extraArgs) + return runMakeImpl(params.TargetArch, params.Compiler, params.Linker, params.Ccache, + params.KernelDir, params.BuildJobs, extraArgs) } -func LinuxMakeArgs(target *targets.Target, compiler, linker, ccache, buildDir string) []string { +func LinuxMakeArgs(target *targets.Target, compiler, linker, ccache, buildDir string, jobs int) []string { args := []string{ - "-j", fmt.Sprint(runtime.NumCPU()), + "-j", fmt.Sprint(jobs), "ARCH=" + target.KernelArch, } if target.Triple != "" { diff --git a/pkg/build/netbsd.go b/pkg/build/netbsd.go index 962b6e82c..80ea02481 100644 --- a/pkg/build/netbsd.go +++ b/pkg/build/netbsd.go @@ -44,25 +44,25 @@ func (ctx netbsd) build(params Params) (ImageDetails, error) { if strings.HasSuffix(params.Compiler, "clang++") { // Build tools before building kernel. if _, err := osutil.RunCmd(60*time.Minute, params.KernelDir, "./build.sh", "-m", params.TargetArch, - "-U", "-j"+strconv.Itoa(runtime.NumCPU()), "-V", "MKCTF=no", + "-U", "-j"+strconv.Itoa(params.BuildJobs), "-V", "MKCTF=no", "-V", "MKLLVM=yes", "-V", "MKGCC=no", "-V", "HAVE_LLVM=yes", "tools"); err != nil { return ImageDetails{}, err } // Build kernel. if _, err := osutil.RunCmd(20*time.Minute, params.KernelDir, "./build.sh", "-m", params.TargetArch, - "-U", "-j"+strconv.Itoa(runtime.NumCPU()), "-V", "MKCTF=no", + "-U", "-j"+strconv.Itoa(params.BuildJobs), "-V", "MKCTF=no", "-V", "MKLLVM=yes", "-V", "MKGCC=no", "-V", "HAVE_LLVM=yes", "kernel="+kernelName); err != nil { return ImageDetails{}, err } } else if strings.HasSuffix(params.Compiler, "g++") { if _, err := osutil.RunCmd(30*time.Minute, params.KernelDir, "./build.sh", "-m", params.TargetArch, - "-U", "-j"+strconv.Itoa(runtime.NumCPU()), "-V", "MKCTF=no", "tools"); err != nil { + "-U", "-j"+strconv.Itoa(params.BuildJobs), "-V", "MKCTF=no", "tools"); err != nil { return ImageDetails{}, err } if _, err := osutil.RunCmd(20*time.Minute, params.KernelDir, "./build.sh", "-m", params.TargetArch, - "-U", "-j"+strconv.Itoa(runtime.NumCPU()), "-V", "MKCTF=no", "kernel="+kernelName); err != nil { + "-U", "-j"+strconv.Itoa(params.BuildJobs), "-V", "MKCTF=no", "kernel="+kernelName); err != nil { return ImageDetails{}, err } } diff --git a/pkg/build/openbsd.go b/pkg/build/openbsd.go index 97f7c6a8f..bb069f90b 100644 --- a/pkg/build/openbsd.go +++ b/pkg/build/openbsd.go @@ -6,7 +6,6 @@ package build import ( "fmt" "path/filepath" - "runtime" "strconv" "time" @@ -32,7 +31,7 @@ func (ctx openbsd) build(params Params) (ImageDetails, error) { return ImageDetails{}, err } for _, tgt := range []string{"clean", "obj", "config", "all"} { - if err := ctx.make(compileDir, tgt); err != nil { + if err := ctx.make(compileDir, params.BuildJobs, tgt); err != nil { return ImageDetails{}, err } } @@ -63,8 +62,8 @@ func (ctx openbsd) clean(kernelDir, targetArch string) error { return nil } -func (ctx openbsd) make(kernelDir string, args ...string) error { - args = append([]string{"-j", strconv.Itoa(runtime.NumCPU())}, args...) +func (ctx openbsd) make(kernelDir string, jobs int, args ...string) error { + args = append([]string{"-j", strconv.Itoa(jobs)}, args...) _, err := osutil.RunCmd(10*time.Minute, kernelDir, "make", args...) return err } |
