aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/build
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-08-21 14:28:06 +0200
committerAleksandr Nogikh <nogikh@google.com>2024-08-22 09:49:03 +0000
commitea1cd5ff3029315c1f89b98b820ceeebfba0e4df (patch)
treeead4b8475abce2fecb5a30f3cc1d6d62a2bac982 /pkg/build
parentaa99fc3349e97ea596c31624efde306de4136241 (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.go5
-rw-r--r--pkg/build/freebsd.go12
-rw-r--r--pkg/build/linux.go13
-rw-r--r--pkg/build/netbsd.go8
-rw-r--r--pkg/build/openbsd.go7
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
}