mirror of
https://github.com/reactos/syzkaller.git
synced 2025-02-17 18:17:31 +00:00
pkg/kernel: move partial config functionality into a separate function
Move partial config functionality into BuildWithPartConfig. It is used only for syz-gce which will be removed soon. Provide a better interface for new continuous build system.
This commit is contained in:
parent
5cc5b2714e
commit
e39114dc0c
@ -25,35 +25,43 @@ import (
|
||||
"github.com/google/syzkaller/pkg/osutil"
|
||||
)
|
||||
|
||||
func Build(dir, compiler, config string, fullConfig bool) error {
|
||||
const timeout = 10 * time.Minute // default timeout for command invocations
|
||||
if fullConfig {
|
||||
if err := ioutil.WriteFile(filepath.Join(dir, ".config"), []byte(config), 0600); err != nil {
|
||||
return fmt.Errorf("failed to write config file: %v", err)
|
||||
}
|
||||
} else {
|
||||
os.Remove(filepath.Join(dir, ".config"))
|
||||
configFile := filepath.Join(dir, "syz.config")
|
||||
if err := ioutil.WriteFile(configFile, []byte(config), 0600); err != nil {
|
||||
return fmt.Errorf("failed to write config file: %v", err)
|
||||
}
|
||||
defer os.Remove(configFile)
|
||||
if _, err := osutil.RunCmd(timeout, dir, "make", "defconfig"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := osutil.RunCmd(timeout, dir, "make", "kvmconfig"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := osutil.RunCmd(timeout, dir, "scripts/kconfig/merge_config.sh", "-n", ".config", configFile); err != nil {
|
||||
return err
|
||||
}
|
||||
func Build(dir, compiler, config string) error {
|
||||
if err := fileutil.CopyFile(config, filepath.Join(dir, ".config")); err != nil {
|
||||
return fmt.Errorf("failed to write config file: %v", err)
|
||||
}
|
||||
return build(dir, compiler)
|
||||
}
|
||||
|
||||
// TODO(dvyukov): this is only for syz-gce, remove when syz-gce is deleted.
|
||||
func BuildWithPartConfig(dir, compiler, config string) error {
|
||||
const timeout = 10 * time.Minute // default timeout for command invocations
|
||||
os.Remove(filepath.Join(dir, ".config"))
|
||||
configFile := filepath.Join(dir, "syz.config")
|
||||
if err := ioutil.WriteFile(configFile, []byte(config), 0600); err != nil {
|
||||
return fmt.Errorf("failed to write config file: %v", err)
|
||||
}
|
||||
defer os.Remove(configFile)
|
||||
if _, err := osutil.RunCmd(timeout, dir, "make", "defconfig"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := osutil.RunCmd(timeout, dir, "make", "kvmconfig"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := osutil.RunCmd(timeout, dir, "scripts/kconfig/merge_config.sh", "-n", ".config", configFile); err != nil {
|
||||
return err
|
||||
}
|
||||
return build(dir, compiler)
|
||||
}
|
||||
|
||||
func build(dir, compiler string) error {
|
||||
const timeout = 10 * time.Minute // default timeout for command invocations
|
||||
if _, err := osutil.RunCmd(timeout, dir, "make", "olddefconfig"); err != nil {
|
||||
return err
|
||||
}
|
||||
// We build only bzImage as we currently don't use modules.
|
||||
// Build of a large kernel can take a while on a 1 CPU VM.
|
||||
if _, err := osutil.RunCmd(3*time.Hour, dir, "make", "bzImage", "-j", strconv.Itoa(runtime.NumCPU()), "CC="+compiler); err != nil {
|
||||
cpu := strconv.Itoa(runtime.NumCPU())
|
||||
if _, err := osutil.RunCmd(3*time.Hour, dir, "make", "bzImage", "-j", cpu, "CC="+compiler); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
@ -354,16 +354,14 @@ func (a *LocalBuildAction) Build() error {
|
||||
}
|
||||
}
|
||||
Logf(0, "building kernel on %v...", hash)
|
||||
config, full := syzconfig, false
|
||||
if cfg.Linux_Config != "" {
|
||||
data, err := ioutil.ReadFile(cfg.Linux_Config)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read config file: %v", err)
|
||||
if err := kernel.Build(dir, a.Compiler, cfg.Linux_Config); err != nil {
|
||||
return fmt.Errorf("build failed: %v", err)
|
||||
}
|
||||
} else {
|
||||
if err := kernel.BuildWithPartConfig(dir, a.Compiler, syzconfig); err != nil {
|
||||
return fmt.Errorf("build failed: %v", err)
|
||||
}
|
||||
config, full = string(data), true
|
||||
}
|
||||
if err := kernel.Build(dir, a.Compiler, config, full); err != nil {
|
||||
return fmt.Errorf("build failed: %v", err)
|
||||
}
|
||||
Logf(0, "building image...")
|
||||
os.MkdirAll("image/obj", 0700)
|
||||
|
Loading…
x
Reference in New Issue
Block a user