[dev.cc] cmd/dist: write cmd/internal/obj/zbootstrap.go

cmd/internal/obj needs information about the default
values of GOROOT, GOARM, GOEXPERIMENT, Version, and so on.
It cannot ask package runtime, because during bootstrap
package runtime comes from Go 1.4.
So it must have its own copy.

Change-Id: I73d3e75a3d47210b3184a51a810ebb44826b81e5
Reviewed-on: https://go-review.googlesource.com/3140
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
diff --git a/.gitignore b/.gitignore
index 7b63aaf..f1c7263 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,6 +35,7 @@
 src/cmd/gc/opnames.h
 src/cmd/gc/y.output
 src/cmd/go/zdefaultcc.go
+src/cmd/internal/obj/zbootstrap.go
 src/go/doc/headscan
 src/runtime/mkversion
 src/runtime/zaexperiment.h
diff --git a/src/cmd/dist/buildruntime.go b/src/cmd/dist/buildruntime.go
index 1e6ae82..5e26059 100644
--- a/src/cmd/dist/buildruntime.go
+++ b/src/cmd/dist/buildruntime.go
@@ -45,3 +45,31 @@
 
 	writefile(out, file, 0)
 }
+
+// mkzbootstrap writes cmd/internal/obj/zbootstrap.go:
+//
+//	package obj
+//
+//	const defaultGOROOT = <goroot>
+//	const defaultGOARM = <goarm>
+//	const defaultGOOS = <goos>
+//	const defaultGOARCH = <goarch>
+//	const version = <version>
+//	const goexperiment = <goexperiment>
+//
+func mkzbootstrap(file string) {
+	out := fmt.Sprintf(
+		"// auto generated by go tool dist\n"+
+			"\n"+
+			"package obj\n"+
+			"\n"+
+			"const defaultGOROOT = `%s`\n"+
+			"const defaultGOARM = `%s`\n"+
+			"const defaultGOOS = `%s`\n"+
+			"const defaultGOARCH = `%s`\n"+
+			"const version = `%s`\n"+
+			"const goexperiment = `%s`\n",
+		goroot_final, goarm, gohostos, gohostarch, goversion, os.Getenv("GOEXPERIMENT"))
+
+	writefile(out, file, 0)
+}
diff --git a/src/cmd/dist/buildtool.go b/src/cmd/dist/buildtool.go
index c493dd1..1037152 100644
--- a/src/cmd/dist/buildtool.go
+++ b/src/cmd/dist/buildtool.go
@@ -38,6 +38,8 @@
 	}
 	xprintf("##### Building Go toolchain using %s.\n", goroot_bootstrap)
 
+	mkzbootstrap(pathf("%s/src/cmd/internal/obj/zbootstrap.go", goroot))
+
 	// Use $GOROOT/pkg/bootstrap as the bootstrap workspace root.
 	// We use a subdirectory of $GOROOT/pkg because that's the
 	// space within $GOROOT where we store all generated objects.