1 // Copyright 2018 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 package main 5 6 import ( 7 "fmt" 8 "os" 9 "runtime" 10 "strconv" 11 "strings" 12 13 "github.com/google/syzkaller/sys/targets" 14 ) 15 16 func main() { 17 hostOS := or(os.Getenv("HOSTOS"), runtime.GOOS) 18 hostArch := or(os.Getenv("HOSTARCH"), runtime.GOARCH) 19 targetOS := or(os.Getenv("TARGETOS"), hostOS) 20 targetArch := or(os.Getenv("TARGETARCH"), hostArch) 21 targetVMArch := or(os.Getenv("TARGETVMARCH"), targetArch) 22 target := targets.Get(targetOS, targetArch) 23 if target == nil { 24 fmt.Printf("unknown target %v/%v\n", targetOS, targetArch) 25 os.Exit(1) 26 } 27 type Var struct { 28 Name string 29 Val string 30 } 31 vars := []Var{ 32 {"HOSTOS", hostOS}, 33 {"HOSTARCH", hostArch}, 34 {"TARGETOS", targetOS}, 35 {"TARGETARCH", targetArch}, 36 {"TARGETVMARCH", targetVMArch}, 37 {"CC", target.CCompiler}, 38 {"ADDCFLAGS", strings.Join(target.CrossCFlags, " ")}, 39 {"NCORES", strconv.Itoa(runtime.NumCPU())}, 40 {"EXE", target.ExeExtension}, 41 } 42 for _, v := range vars { 43 fmt.Printf("export %v=%v\\n", v.Name, v.Val) 44 } 45 } 46 47 func or(s1, s2 string) string { 48 if s1 != "" { 49 return s1 50 } 51 return s2 52 } 53