github.com/tidwall/go@v0.0.0-20170415222209-6694a6888b7d/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 "os" 11 "sort" 12 ) 13 14 /* 15 * Helpers for building cmd/go and cmd/cgo. 16 */ 17 18 // mkzdefaultcc writes zdefaultcc.go: 19 // 20 // package main 21 // const defaultCC = <defaultcc> 22 // const defaultCXX = <defaultcxx> 23 // const defaultPkgConfig = <defaultpkgconfig> 24 // 25 // It is invoked to write cmd/go/zdefaultcc.go 26 // but we also write cmd/cgo/zdefaultcc.go 27 func mkzdefaultcc(dir, file string) { 28 outGo := fmt.Sprintf( 29 "// auto generated by go tool dist\n"+ 30 "\n"+ 31 "package cfg\n"+ 32 "\n"+ 33 "const DefaultCC = `%s`\n"+ 34 "const DefaultCXX = `%s`\n"+ 35 "const DefaultPkgConfig = `%s`\n", 36 defaultcctarget, defaultcxxtarget, defaultpkgconfigtarget) 37 38 writefile(outGo, file, writeSkipSame) 39 40 // Convert file name to replace: turn go/internal/cfg into cgo. 41 outCgo := fmt.Sprintf( 42 "// auto generated by go tool dist\n"+ 43 "\n"+ 44 "package main\n"+ 45 "\n"+ 46 "const defaultCC = `%s`\n"+ 47 "const defaultCXX = `%s`\n"+ 48 "const defaultPkgConfig = `%s`\n", 49 defaultcctarget, defaultcxxtarget, defaultpkgconfigtarget) 50 51 i := len(file) - len("go/internal/cfg/zdefaultcc.go") 52 file = file[:i] + "cgo/zdefaultcc.go" 53 writefile(outCgo, file, writeSkipSame) 54 } 55 56 // mkzcgo writes zosarch.go for cmd/go. 57 func mkzosarch(dir, file string) { 58 // sort for deterministic zosarch.go file 59 var list []string 60 for plat := range cgoEnabled { 61 list = append(list, plat) 62 } 63 sort.Strings(list) 64 65 var buf bytes.Buffer 66 buf.WriteString("// auto generated by go tool dist\n\n") 67 buf.WriteString("package cfg\n\n") 68 fmt.Fprintf(&buf, "var OSArchSupportsCgo = map[string]bool{\n") 69 for _, plat := range list { 70 fmt.Fprintf(&buf, "\t%q: %v,\n", plat, cgoEnabled[plat]) 71 } 72 fmt.Fprintf(&buf, "}\n") 73 writefile(buf.String(), file, writeSkipSame) 74 } 75 76 // mkzcgo writes zcgo.go for the go/build package: 77 // 78 // package build 79 // var cgoEnabled = map[string]bool{} 80 // 81 // It is invoked to write go/build/zcgo.go. 82 func mkzcgo(dir, file string) { 83 // sort for deterministic zcgo.go file 84 var list []string 85 for plat, hasCgo := range cgoEnabled { 86 if hasCgo { 87 list = append(list, plat) 88 } 89 } 90 sort.Strings(list) 91 92 var buf bytes.Buffer 93 94 fmt.Fprintf(&buf, 95 "// auto generated by go tool dist\n"+ 96 "\n"+ 97 "package build\n"+ 98 "\n"+ 99 "const defaultCGO_ENABLED = %q\n\n"+ 100 "var cgoEnabled = map[string]bool{\n", os.Getenv("CGO_ENABLED")) 101 for _, plat := range list { 102 fmt.Fprintf(&buf, "\t%q: true,\n", plat) 103 } 104 fmt.Fprintf(&buf, "}") 105 106 writefile(buf.String(), file, writeSkipSame) 107 }