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 }