]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/dist: fix default GOOS/GOARCH for cross-compile
authorRuss Cox <rsc@golang.org>
Mon, 2 Mar 2015 00:42:03 +0000 (19:42 -0500)
committerRuss Cox <rsc@golang.org>
Mon, 2 Mar 2015 17:51:47 +0000 (17:51 +0000)
Before this CL, if you are on a darwin/amd64 machine and
cross-compile 9g for a linux/ppc64 machine, when you copy
9g over to that kind of machine and run it, you'll find it thinks
the default object target is darwin/amd64. Not useful.
Make the default target linux/ppc64 in this case. More useful.

Change-Id: I62f2e9cb5f60b3077a922b31cd023a9cb7a6cfda
Reviewed-on: https://go-review.googlesource.com/6407
Reviewed-by: Rob Pike <r@golang.org>
src/cmd/dist/buildruntime.go

index 112326558a7a7b559984e5988b2fa015fa5839ec..73f4d8eaf16ab5d0b187aebef19b019d6fbe4fe9 100644 (file)
@@ -40,27 +40,38 @@ func mkzversion(dir, file string) {
 //     const defaultGOROOT = <goroot>
 //     const defaultGO386 = <go386>
 //     const defaultGOARM = <goarm>
-//     const defaultGOOS = <goos>
-//     const defaultGOARCH = <goarch>
+//     const defaultGOOS = runtime.GOOS
+//     const defaultGOARCH = runtime.GOARCH
 //     const defaultGO_EXTLINK_ENABLED = <goextlinkenabled>
 //     const version = <version>
 //     const goexperiment = <goexperiment>
 //
+// The use of runtime.GOOS and runtime.GOARCH makes sure that
+// a cross-compiled compiler expects to compile for its own target
+// system. That is, if on a Mac you do:
+//
+//     GOOS=linux GOARCH=ppc64 go build cmd/9g
+//
+// the resulting compiler will default to generating linux/ppc64 object files.
+// This is more useful than having it default to generating objects for the
+// original target (in this example, a Mac).
 func mkzbootstrap(file string) {
        out := fmt.Sprintf(
                "// auto generated by go tool dist\n"+
                        "\n"+
                        "package obj\n"+
                        "\n"+
+                       "import \"runtime\"\n"+
+                       "\n"+
                        "const defaultGOROOT = `%s`\n"+
                        "const defaultGO386 = `%s`\n"+
                        "const defaultGOARM = `%s`\n"+
-                       "const defaultGOOS = `%s`\n"+
-                       "const defaultGOARCH = `%s`\n"+
+                       "const defaultGOOS = runtime.GOOS\n"+
+                       "const defaultGOARCH = runtime.GOARCH\n"+
                        "const defaultGO_EXTLINK_ENABLED = `%s`\n"+
                        "const version = `%s`\n"+
                        "const goexperiment = `%s`\n",
-               goroot_final, go386, goarm, gohostos, gohostarch, goextlinkenabled, findgoversion(), os.Getenv("GOEXPERIMENT"))
+               goroot_final, go386, goarm, goextlinkenabled, findgoversion(), os.Getenv("GOEXPERIMENT"))
 
        writefile(out, file, 0)
 }