github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/tools/syz-build/build.go (about)

     1  // Copyright 2021 syzkaller project authors. All rights reserved.
     2  // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
     3  
     4  // syz-build is a wrapper around pkg/build for testing purposes.
     5  package main
     6  
     7  import (
     8  	"flag"
     9  	"fmt"
    10  	"os"
    11  	"runtime"
    12  
    13  	"github.com/google/syzkaller/pkg/build"
    14  	"github.com/google/syzkaller/pkg/debugtracer"
    15  	"github.com/google/syzkaller/pkg/tool"
    16  )
    17  
    18  var (
    19  	flagOS            = flag.String("os", runtime.GOOS, "OS to build")
    20  	flagArch          = flag.String("arch", runtime.GOARCH, "arch to build")
    21  	flagVM            = flag.String("vm", "gce", "VM type to build")
    22  	flagKernelSrc     = flag.String("kernel_src", "", "path to kernel checkout")
    23  	flagMake          = flag.String("make", "", "non-default make")
    24  	flagCompiler      = flag.String("compiler", "", "non-default compiler")
    25  	flagLinker        = flag.String("linker", "", "non-default linker")
    26  	flagCcache        = flag.String("ccache", "", "ccache executable")
    27  	flagKernelConfig  = flag.String("config", "", "kernel config file")
    28  	flagKernelSysctl  = flag.String("sysctl", "", "kernel sysctl file")
    29  	flagKernelCmdline = flag.String("cmdline", "", "kernel cmdline file")
    30  	flagUserspace     = flag.String("userspace", "", "path to userspace for build")
    31  	flagTrace         = flag.Bool("trace", false, "trace build process and save debug artefacts")
    32  )
    33  
    34  func main() {
    35  	flag.Parse()
    36  	if os.Getuid() != 0 {
    37  		fmt.Printf("not running under root, image build may fail\n")
    38  	}
    39  	os.Setenv("SYZ_DISABLE_SANDBOXING", "yes")
    40  	var kernelConfig []byte
    41  	if *flagKernelConfig != "" {
    42  		var err error
    43  		kernelConfig, err = os.ReadFile(*flagKernelConfig)
    44  		if err != nil {
    45  			tool.Fail(err)
    46  		}
    47  	}
    48  	wd, err := os.Getwd()
    49  	if err != nil {
    50  		tool.Fail(err)
    51  	}
    52  	params := build.Params{
    53  		TargetOS:     *flagOS,
    54  		TargetArch:   *flagArch,
    55  		VMType:       *flagVM,
    56  		KernelDir:    *flagKernelSrc,
    57  		OutputDir:    wd,
    58  		Make:         *flagMake,
    59  		Compiler:     *flagCompiler,
    60  		Linker:       *flagLinker,
    61  		Ccache:       *flagCcache,
    62  		UserspaceDir: *flagUserspace,
    63  		CmdlineFile:  *flagKernelCmdline,
    64  		SysctlFile:   *flagKernelSysctl,
    65  		Config:       kernelConfig,
    66  		Tracer:       &debugtracer.NullTracer{},
    67  	}
    68  	if *flagTrace {
    69  		params.Tracer = &debugtracer.GenericTracer{
    70  			TraceWriter: os.Stdout,
    71  			OutDir:      ".",
    72  		}
    73  	}
    74  	details, err := build.Image(params)
    75  	if err != nil {
    76  		tool.Fail(err)
    77  	}
    78  	params.Tracer.Log("signature: %v", details.Signature)
    79  	params.Tracer.Log("compiler: %v", details.CompilerID)
    80  }