]> Cypherpunks repositories - gostls13.git/commitdiff
build: add GOHOSTOS and GOHOSTARCH environment variables.
authorAndrew Gerrand <adg@golang.org>
Fri, 8 Oct 2010 07:52:28 +0000 (18:52 +1100)
committerAndrew Gerrand <adg@golang.org>
Fri, 8 Oct 2010 07:52:28 +0000 (18:52 +1100)
Auto-detect both if not set, and if GOARCH is not set use GOHOSTARCH.

GOHOSTARCH is used to set the -m32 or -m64 flags for gcc.

This is so that 64-bit can build binaries that run on 32-bit systems.

R=rsc, iant, brainman
CC=golang-dev
https://golang.org/cl/2342045

src/Make.inc
src/quietgcc.bash

index 858cb3a68327f6eb70b6c386a71d7dc20ddf5e0b..254140e03bde5a045df08592fcabc4a083d804cd 100644 (file)
@@ -21,8 +21,12 @@ endif
 # Set up GOROOT_FINAL, GOARCH, GOOS if needed.
 GOROOT_FINAL?=$(GOROOT)
 
+ifeq ($(GOHOSTOS),)
+GOHOSTOS:=$(shell uname | tr A-Z a-z | sed 's/mingw/windows/; s/.*windows.*/windows/')
+endif
+
 ifeq ($(GOOS),)
-GOOS:=${shell uname | tr A-Z a-z | sed 's/mingw/windows/; s/windows.*/windows/'}
+GOOS:=$(GOHOSTOS)
 endif
 
 ifeq ($(GOOS),darwin)
@@ -35,17 +39,21 @@ else
 $(error Invalid $$GOOS '$(GOOS)'; must be darwin, freebsd, linux, nacl, tiny, or windows)
 endif
 
-ifeq ($(GOARCH),)
-ifeq ($(GOOS),darwin)
+ifeq ($(GOHOSTARCH),)
+ifeq ($(GOHOSTOS),darwin)
 # Even on 64-bit platform, darwin uname -m prints i386.
 # Check for amd64 with sysctl instead.
-GOARCH:=${shell if sysctl machdep.cpu.extfeatures | grep EM64T >/dev/null; then echo amd64; else uname -m | sed 's/i386/386/'; fi}
+GOHOSTARCH:=${shell if sysctl machdep.cpu.extfeatures | grep EM64T >/dev/null; then echo amd64; else uname -m | sed 's/i386/386/'; fi}
 else
 # Ask uname -m for the processor.
-GOARCH:=${shell uname -m | sed 's/^..86$$/386/; s/^.86$$/386/; s/x86_64/amd64/; s/arm.*/arm/'}
+GOHOSTARCH:=${shell uname -m | sed 's/^..86$$/386/; s/^.86$$/386/; s/x86_64/amd64/; s/arm.*/arm/'}
 endif
 endif
 
+ifeq ($(GOARCH),)
+GOARCH:=$(GOHOSTARCH)
+endif
+
 ifeq ($(GOARCH),386)
 O:=8
 else ifeq ($(GOARCH),amd64)
@@ -63,7 +71,7 @@ $(error Invalid $$GOARCH '$(GOARCH)'; must be 386, amd64, or arm)
 endif
 
 # Save for recursive make to avoid recomputing.
-export GOARCH GOOS
+export GOARCH GOOS GOHOSTARCH GOHOSTOS
 
 # ugly hack to deal with whitespaces in $GOROOT
 nullstring :=
@@ -101,6 +109,8 @@ export LANG LC_ALL LC_CTYPE GREP_OPTIONS GREP_COLORS
 go-env:
        @echo export GOARCH=$(GOARCH)
        @echo export GOOS=$(GOOS)
+       @echo export GOHOSTARCH=$(GOHOSTARCH)
+       @echo export GOHOSTOS=$(GOHOSTOS)
        @echo export O=$O
        @echo export AS="$(AS)"
        @echo export CC="$(CC)"
index ca3bf8f32f1db83bd1da044c252b83102a0af7ab..748fc593e05cd1c3bf9bb9276d2b7f4021628a00 100755 (executable)
@@ -22,14 +22,15 @@ if test "$gcc" = "@C""C@"; then
   gcc=gcc
 fi
 
-# If this is a 64-bit machine, compile 64-bit versions of
-# the host tools, to match the native ptrace.
-case "`uname -m -p`" in
+# Build 64-bit binaries on 64-bit systems, unless GOHOSTARCH=386.
+case "$(uname -m -p)-$GOHOSTARCH" in
+*x86_64*-386 | *amd64*-386)
+       gcc="$gcc -m32"
+       ;;
 *x86_64* | *amd64*)
        gcc="$gcc -m64"
 esac
 
-
 # Run gcc, save error status, redisplay output without noise, exit with gcc status.
 tmp=/tmp/qcc.$$.$USER.out
 $gcc -Wall -Wno-sign-compare -Wno-missing-braces \