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  }