aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/dist/buildgo.go
blob: af33ecd66d63cbd8a35f36f0f564ac0ca97e23c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

import (
	"bytes"
	"fmt"
)

/*
 * Helpers for building cmd/go and cmd/cgo.
 */

// mkzdefaultcc writes zdefaultcc.go:
//
//	package main
//	const defaultCC = <defaultcc>
//	const defaultCXX = <defaultcxx>
//
// It is invoked to write cmd/go/zdefaultcc.go
// but we also write cmd/cgo/zdefaultcc.go
func mkzdefaultcc(dir, file string) {
	var out string

	out = fmt.Sprintf(
		"// auto generated by go tool dist\n"+
			"\n"+
			"package main\n"+
			"\n"+
			"const defaultCC = `%s`\n"+
			"const defaultCXX = `%s`\n",
		defaultcctarget, defaultcxxtarget)

	writefile(out, file, writeSkipSame)

	// Convert file name to replace: turn go into cgo.
	i := len(file) - len("go/zdefaultcc.go")
	file = file[:i] + "c" + file[i:]
	writefile(out, file, writeSkipSame)
}

// mkzcgo writes zcgo.go for go/build package:
//
//	package build
//  var cgoEnabled = map[string]bool{}
//
// It is invoked to write go/build/zcgo.go.
func mkzcgo(dir, file string) {
	var buf bytes.Buffer

	fmt.Fprintf(&buf,
		"// auto generated by go tool dist\n"+
			"\n"+
			"package build\n"+
			"\n"+
			"var cgoEnabled = map[string]bool{\n")
	for plat, hasCgo := range cgoEnabled {
		if hasCgo {
			fmt.Fprintf(&buf, "\t%q: true,\n", plat)
		}
	}
	fmt.Fprintf(&buf, "}")

	writefile(buf.String(), file, writeSkipSame)
}