diff options
author | Russ Cox <rsc@golang.org> | 2015-01-07 11:38:00 -0500 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2015-01-10 19:16:00 +0000 |
commit | 20a10e7ddd1b2305f1279043ec281301c9199359 (patch) | |
tree | 674cac1232c8bb87c64c1c42b306808769a9ac00 /src/make.bash | |
parent | ad6ee36cac122894f7ea4043289c10a50e48ac01 (diff) | |
download | go-20a10e7ddd1b2305f1279043ec281301c9199359.tar.gz go-20a10e7ddd1b2305f1279043ec281301c9199359.zip |
build: require old Go to build new Go (and convert cmd/dist to Go)
This CL introduces the bootstrap requirement that in order to
build the current release (or development version) of Go, you
need an older Go release (1.4 or newer) already installed.
This requirement is the whole point of this CL.
To enforce the requirement, convert cmd/dist from C to Go.
With this bootstrapping out of the way, we can move on to
replacing other, larger C programs like the Go compiler,
the assemblers, and the linker.
See golang.org/s/go15bootstrap for details.
Change-Id: I53fd08ddacf3df9fae94fe2c986dba427ee4a21d
Reviewed-on: https://go-review.googlesource.com/2470
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
Diffstat (limited to 'src/make.bash')
-rwxr-xr-x | src/make.bash | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/src/make.bash b/src/make.bash index a90937a77e..54c4d61249 100755 --- a/src/make.bash +++ b/src/make.bash @@ -3,6 +3,8 @@ # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. +# See golang.org/s/go15bootstrap for an overview of the build process. + # Environment variables that control make.bash: # # GOROOT_FINAL: The expected final Go root, baked into binaries. @@ -110,26 +112,16 @@ rm -f ./runtime/runtime_defs.go # Finally! Run the build. -echo '##### Building C bootstrap tool.' +echo '##### Building Go bootstrap tool.' echo cmd/dist export GOROOT="$(cd .. && pwd)" -GOROOT_FINAL="${GOROOT_FINAL:-$GOROOT}" -DEFGOROOT='-DGOROOT_FINAL="'"$GOROOT_FINAL"'"' - -mflag="" -case "$GOHOSTARCH" in -386) mflag=-m32;; -amd64) mflag=-m64;; -esac -if [ "$(uname)" == "Darwin" ]; then - # golang.org/issue/5261 - mflag="$mflag -mmacosx-version-min=10.6" -fi -# if gcc does not exist and $CC is not set, try clang if available. -if [ -z "$CC" -a -z "$(type -t gcc)" -a -n "$(type -t clang)" ]; then - export CC=clang CXX=clang++ +GOROOT_BOOTSTRAP=${GOROOT_BOOTSTRAP:-$HOME/go1.4} +if [ ! -x "$GOROOT_BOOTSTRAP/bin/go" ]; then + echo "ERROR: Cannot find $GOROOT_BOOTSTRAP/bin/go." >&2 + echo "Set \$GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4." >&2 fi -${CC:-gcc} $mflag -O2 -Wall -Werror -o cmd/dist/dist -Icmd/dist "$DEFGOROOT" cmd/dist/*.c +rm -f cmd/dist/dist +GOROOT="$GOROOT_BOOTSTRAP" "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist # -e doesn't propagate out of eval, so check success by hand. eval $(./cmd/dist/dist env -p || echo FAIL=true) |