github.com/sbinet/go@v0.0.0-20160827155028-54d7de7dd62b/src/cmd/dist/buildgo.go (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "bytes" 9 "fmt" 10 "sort" 11 ) 12 13 /* 14 * Helpers for building cmd/go and cmd/cgo. 15 */ 16 17 // mkzdefaultcc writes zdefaultcc.go: 18 // 19 // package main 20 // const defaultCC = <defaultcc> 21 // const defaultCXX = <defaultcxx> 22 // 23 // It is invoked to write cmd/go/zdefaultcc.go 24 // but we also write cmd/cgo/zdefaultcc.go 25 func mkzdefaultcc(dir, file string) { 26 out := fmt.Sprintf( 27 "// auto generated by go tool dist\n"+ 28 "\n"+ 29 "package main\n"+ 30 "\n"+ 31 "const defaultCC = `%s`\n"+ 32 "const defaultCXX = `%s`\n", 33 defaultcctarget, defaultcxxtarget) 34 35 writefile(out, file, writeSkipSame) 36 37 // Convert file name to replace: turn go into cgo. 38 i := len(file) - len("go/zdefaultcc.go") 39 file = file[:i] + "c" + file[i:] 40 writefile(out, file, writeSkipSame) 41 } 42 43 // mkzcgo writes zosarch.go for cmd/go. 44 func mkzosarch(dir, file string) { 45 // sort for deterministic zosarch.go file 46 var list []string 47 for plat := range cgoEnabled { 48 list = append(list, plat) 49 } 50 sort.Strings(list) 51 52 var buf bytes.Buffer 53 buf.WriteString("// auto generated by go tool dist\n\n") 54 buf.WriteString("package main\n\n") 55 fmt.Fprintf(&buf, "var osArchSupportsCgo = map[string]bool{\n") 56 for _, plat := range list { 57 fmt.Fprintf(&buf, "\t%q: %v,\n", plat, cgoEnabled[plat]) 58 } 59 fmt.Fprintf(&buf, "}\n") 60 writefile(buf.String(), file, writeSkipSame) 61 } 62 63 // mkzcgo writes zcgo.go for the go/build package: 64 // 65 // package build 66 // var cgoEnabled = map[string]bool{} 67 // 68 // It is invoked to write go/build/zcgo.go. 69 func mkzcgo(dir, file string) { 70 // sort for deterministic zcgo.go file 71 var list []string 72 for plat, hasCgo := range cgoEnabled { 73 if hasCgo { 74 list = append(list, plat) 75 } 76 } 77 sort.Strings(list) 78 79 var buf bytes.Buffer 80 81 fmt.Fprintf(&buf, 82 "// auto generated by go tool dist\n"+ 83 "\n"+ 84 "package build\n"+ 85 "\n"+ 86 "var cgoEnabled = map[string]bool{\n") 87 for _, plat := range list { 88 fmt.Fprintf(&buf, "\t%q: true,\n", plat) 89 } 90 fmt.Fprintf(&buf, "}") 91 92 writefile(buf.String(), file, writeSkipSame) 93 }