mirror of
https://github.com/golang/go
synced 2024-11-22 05:14:40 -07:00
build: use cmd/dist
R=bradfitz, ality, r, r, iant, mikioh.mikioh CC=golang-dev https://golang.org/cl/5615058
This commit is contained in:
parent
4c1abd6c64
commit
8290536864
@ -8,7 +8,6 @@ if [ ! -f make.bash ]; then
|
|||||||
echo 'all.bash must be run from $GOROOT/src' 1>&2
|
echo 'all.bash must be run from $GOROOT/src' 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
. ./make.bash
|
. ./make.bash --no-banner
|
||||||
bash run.bash --no-env --no-rebuild
|
bash run.bash --no-rebuild
|
||||||
installed # function defined by make.bash
|
../bin/tool/dist banner # print build info
|
||||||
|
|
||||||
|
@ -5,34 +5,11 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [ ! -f env.bash ]; then
|
if [ ! -x ../bin/tool/dist ]; then
|
||||||
echo 'clean.bash must be run from $GOROOT/src' 1>&2
|
echo 'cannot find ../bin/tool/dist; nothing to clean' >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
. ./env.bash
|
|
||||||
if [ ! -f Make.inc ] ; then
|
|
||||||
GOROOT_FINAL=${GOROOT_FINAL:-$GOROOT}
|
|
||||||
sed 's!@@GOROOT@@!'"$GOROOT_FINAL"'!' Make.inc.in >Make.inc
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$1" != "--nopkg" ]; then
|
eval $(../bin/tool/dist env)
|
||||||
rm -rf "$GOROOT"/pkg/${GOOS}_$GOARCH
|
"$GOBIN/go" clean -i std
|
||||||
fi
|
../bin/tool/dist clean
|
||||||
rm -f "$GOROOT"/lib/*.a
|
|
||||||
for i in lib9 libbio libmach cmd
|
|
||||||
do
|
|
||||||
# Do not use gomake here. It may not be available.
|
|
||||||
$MAKE -C "$GOROOT/src/$i" clean
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -x "$GOBIN/go" ]; then
|
|
||||||
go clean std || true # go command might not know about clean
|
|
||||||
|
|
||||||
# TODO: Make clean work in directories outside $GOPATH
|
|
||||||
true || go clean \
|
|
||||||
../misc/cgo/gmp ../misc/cgo/stdio \
|
|
||||||
../misc/cgo/life ../misc/cgo/test \
|
|
||||||
../misc/dashboard/builder ../misc/goplay\
|
|
||||||
../doc/codelab/wiki\
|
|
||||||
../test/bench/shootout ../test/bench/garbage ../test/bench/go1
|
|
||||||
fi
|
|
||||||
|
107
src/env.bash
107
src/env.bash
@ -1,107 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# Copyright 2009 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.
|
|
||||||
|
|
||||||
# If set to a Windows-style path convert to an MSYS-Unix
|
|
||||||
# one using the built-in shell commands.
|
|
||||||
if [[ "$GOROOT" == *:* ]]; then
|
|
||||||
GOROOT=$(cd "$GOROOT"; pwd)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$GOBIN" == *:* ]]; then
|
|
||||||
GOBIN=$(cd "$GOBIN"; pwd)
|
|
||||||
fi
|
|
||||||
|
|
||||||
export GOROOT=${GOROOT:-$(cd ..; pwd)}
|
|
||||||
|
|
||||||
if ! test -f "$GOROOT"/include/u.h
|
|
||||||
then
|
|
||||||
echo '$GOROOT is not set correctly or not exported: '$GOROOT 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Double-check that we're in $GOROOT, for people with multiple Go trees.
|
|
||||||
# Various aspects of the build cd into $GOROOT-rooted paths,
|
|
||||||
# making it easy to jump to a different tree and get confused.
|
|
||||||
DIR1=$(cd ..; pwd)
|
|
||||||
DIR2=$(cd "$GOROOT"; pwd)
|
|
||||||
if [ "$DIR1" != "$DIR2" ]; then
|
|
||||||
echo 'Suspicious $GOROOT '"$GOROOT"': does not match current directory.' 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
export GOBIN=${GOBIN:-"$GOROOT/bin"}
|
|
||||||
if [ ! -d "$GOBIN" -a "$GOBIN" != "$GOROOT/bin" ]; then
|
|
||||||
echo '$GOBIN is not a directory or does not exist' 1>&2
|
|
||||||
echo 'create it or set $GOBIN differently' 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
export OLDPATH=$PATH
|
|
||||||
export PATH="$GOBIN":$PATH
|
|
||||||
|
|
||||||
MAKE=make
|
|
||||||
if ! make --version 2>/dev/null | grep 'GNU Make' >/dev/null; then
|
|
||||||
MAKE=gmake
|
|
||||||
fi
|
|
||||||
|
|
||||||
PROGS="
|
|
||||||
ar
|
|
||||||
awk
|
|
||||||
bash
|
|
||||||
bison
|
|
||||||
chmod
|
|
||||||
cp
|
|
||||||
cut
|
|
||||||
echo
|
|
||||||
egrep
|
|
||||||
gcc
|
|
||||||
grep
|
|
||||||
ls
|
|
||||||
$MAKE
|
|
||||||
mkdir
|
|
||||||
mv
|
|
||||||
pwd
|
|
||||||
rm
|
|
||||||
sed
|
|
||||||
sort
|
|
||||||
tee
|
|
||||||
touch
|
|
||||||
tr
|
|
||||||
true
|
|
||||||
uname
|
|
||||||
uniq
|
|
||||||
"
|
|
||||||
|
|
||||||
for i in $PROGS; do
|
|
||||||
if ! which $i >/dev/null 2>&1; then
|
|
||||||
echo "Cannot find '$i' on search path." 1>&2
|
|
||||||
echo "See http://golang.org/doc/install.html#ctools" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if bison --version 2>&1 | grep 'bison++' >/dev/null 2>&1; then
|
|
||||||
echo "Your system's 'bison' is bison++."
|
|
||||||
echo "Go needs the original bison instead." 1>&2
|
|
||||||
echo "See http://golang.org/doc/install.html#ctools" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Issue 2020: some users configure bash to default to
|
|
||||||
# set -o noclobber
|
|
||||||
# which makes >x fail if x already exists. Restore sanity.
|
|
||||||
set +o noclobber
|
|
||||||
|
|
||||||
# Tried to use . <($MAKE ...) here, but it cannot set environment
|
|
||||||
# variables in the version of bash that ships with OS X. Amazing.
|
|
||||||
eval $($MAKE --no-print-directory -f Make.inc go-env | egrep 'GOARCH|GOOS|GOHOSTARCH|GOHOSTOS|GO_ENV|CGO_ENABLED')
|
|
||||||
|
|
||||||
# Shell doesn't tell us whether make succeeded,
|
|
||||||
# so Make.inc generates a fake variable name.
|
|
||||||
if [ "$MAKE_GO_ENV_WORKED" != 1 ]; then
|
|
||||||
echo 'Did not find Go environment variables.' 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
unset MAKE_GO_ENV_WORKED
|
|
127
src/make.bash
127
src/make.bash
@ -4,12 +4,12 @@
|
|||||||
# license that can be found in the LICENSE file.
|
# license that can be found in the LICENSE file.
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
if [ ! -f env.bash ]; then
|
if [ ! -f run.bash ]; then
|
||||||
echo 'make.bash must be run from $GOROOT/src' 1>&2
|
echo 'make.bash must be run from $GOROOT/src' 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
. ./env.bash
|
|
||||||
|
|
||||||
|
# Test for bad ld.
|
||||||
if ld --version 2>&1 | grep 'gold.* 2\.20' >/dev/null; then
|
if ld --version 2>&1 | grep 'gold.* 2\.20' >/dev/null; then
|
||||||
echo 'ERROR: Your system has gold 2.20 installed.'
|
echo 'ERROR: Your system has gold 2.20 installed.'
|
||||||
echo 'This version is shipped by Ubuntu even though'
|
echo 'This version is shipped by Ubuntu even though'
|
||||||
@ -21,48 +21,9 @@ if ld --version 2>&1 | grep 'gold.* 2\.20' >/dev/null; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create target directories
|
# Test for bad SELinux.
|
||||||
mkdir -p "$GOROOT/bin/tool"
|
# On Fedora 16 the selinux filesystem is mounted at /sys/fs/selinux,
|
||||||
mkdir -p "$GOROOT/pkg"
|
# so loop through the possible selinux mount points.
|
||||||
|
|
||||||
# Remove old, pre-tool binaries.
|
|
||||||
rm -rf "$GOROOT"/bin/go-tool
|
|
||||||
rm -f "$GOROOT"/bin/[568][acgl]
|
|
||||||
rm -f "$GOROOT"/bin/{6cov,6nm,cgo,ebnflint,goapi,gofix,goinstall,gomake,gopack,gopprof,gotest,gotype,govet,goyacc,quietgcc}
|
|
||||||
|
|
||||||
# If GOBIN is set and it has a Go compiler, it must also be cleaned.
|
|
||||||
if [ -n "GOBIN" ]; then
|
|
||||||
if [ -x "$GOBIN"/5g -o -x "$GOBIN"/6g -o -x "$GOBIN"/8g ]; then
|
|
||||||
rm -f "$GOBIN"/[568][acgl]
|
|
||||||
rm -f "$GOBIN"/{6cov,6nm,cgo,ebnflint,goapi,gofix,goinstall,gomake,gopack,gopprof,gotest,gotype,govet,goyacc,quietgcc}
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
GOROOT_FINAL=${GOROOT_FINAL:-$GOROOT}
|
|
||||||
|
|
||||||
MAKEFLAGS=${MAKEFLAGS:-"-j4"}
|
|
||||||
export MAKEFLAGS
|
|
||||||
unset CDPATH # in case user has it set
|
|
||||||
|
|
||||||
rm -f "$GOBIN"/quietgcc
|
|
||||||
rm -f "$GOROOT/bin/tool/quietgcc"
|
|
||||||
CC=${CC:-gcc}
|
|
||||||
export CC
|
|
||||||
sed -e "s|@CC@|$CC|" < "$GOROOT"/src/quietgcc.bash > "$GOROOT"/bin/tool/quietgcc
|
|
||||||
chmod +x "$GOROOT"/bin/tool/quietgcc
|
|
||||||
|
|
||||||
export GOMAKE="$GOROOT"/bin/tool/make
|
|
||||||
rm -f "$GOBIN"/gomake
|
|
||||||
rm -f "$GOMAKE"
|
|
||||||
(
|
|
||||||
echo '#!/bin/sh'
|
|
||||||
echo 'export GOROOT=${GOROOT:-'$GOROOT_FINAL'}'
|
|
||||||
echo 'exec '$MAKE' "$@"'
|
|
||||||
) >"$GOMAKE"
|
|
||||||
chmod +x "$GOMAKE"
|
|
||||||
|
|
||||||
# on Fedora 16 the selinux filesystem is mounted at /sys/fs/selinux,
|
|
||||||
# so loop through the possible selinux mount points
|
|
||||||
for se_mount in /selinux /sys/fs/selinux
|
for se_mount in /selinux /sys/fs/selinux
|
||||||
do
|
do
|
||||||
if [ -d $se_mount -a -f $se_mount/booleans/allow_execstack -a -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled; then
|
if [ -d $se_mount -a -f $se_mount/booleans/allow_execstack -a -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled; then
|
||||||
@ -82,67 +43,23 @@ do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
bash "$GOROOT"/src/clean.bash
|
# Finally! Run the build.
|
||||||
|
|
||||||
# pkg builds runtime/cgo and the Go programs in cmd.
|
|
||||||
for i in lib9 libbio libmach cmd
|
|
||||||
do
|
|
||||||
echo; echo; echo %%%% making $i %%%%; echo
|
|
||||||
"$GOMAKE" -C $i install
|
|
||||||
done
|
|
||||||
|
|
||||||
echo; echo; echo %%%% making runtime generated files %%%%; echo
|
|
||||||
|
|
||||||
(
|
|
||||||
cd "$GOROOT"/src/pkg/runtime
|
|
||||||
./autogen.sh
|
|
||||||
"$GOMAKE" install; "$GOMAKE" clean # copy runtime.h to pkg directory
|
|
||||||
) || exit 1
|
|
||||||
|
|
||||||
|
echo '# Building C bootstrap tool.'
|
||||||
|
mkdir -p ../bin/tool
|
||||||
|
gcc -O2 -Wall -Werror -o ../bin/tool/dist -Icmd/dist cmd/dist/*.c
|
||||||
echo
|
echo
|
||||||
echo '# Building go_bootstrap command from bootstrap script.'
|
|
||||||
if ! ./buildscript/${GOOS}_$GOARCH.sh; then
|
echo '# Building compilers and Go bootstrap tool.'
|
||||||
echo '# Bootstrap script failed.'
|
../bin/tool/dist bootstrap -v # builds go_bootstrap
|
||||||
if [ ! -x "$GOBIN/go" ]; then
|
echo
|
||||||
exit 1
|
|
||||||
fi
|
echo '# Building packages and commands.'
|
||||||
echo '# Regenerating bootstrap script using pre-existing go binary.'
|
../bin/tool/go_bootstrap clean std
|
||||||
./buildscript.sh
|
../bin/tool/go_bootstrap install -a -v std
|
||||||
./buildscript/${GOOS}_$GOARCH.sh
|
rm -f ../bin/tool/go_bootstrap
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [ "$1" != "--no-banner" ]; then
|
||||||
|
../bin/tool/dist banner
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clean what clean.bash couldn't.
|
|
||||||
go_bootstrap clean std
|
|
||||||
|
|
||||||
echo '# Building Go code.'
|
|
||||||
go_bootstrap install -a -v std
|
|
||||||
rm -f "$GOBIN/go_bootstrap"
|
|
||||||
|
|
||||||
# Print post-install messages.
|
|
||||||
# Implemented as a function so that all.bash can repeat the output
|
|
||||||
# after run.bash finishes running all the tests.
|
|
||||||
installed() {
|
|
||||||
eval $("$GOMAKE" --no-print-directory -f Make.inc go-env)
|
|
||||||
echo
|
|
||||||
echo ---
|
|
||||||
echo Installed Go for $GOOS/$GOARCH in "$GOROOT".
|
|
||||||
echo Installed commands in "$GOBIN".
|
|
||||||
case "$OLDPATH" in
|
|
||||||
"$GOBIN:"* | *":$GOBIN" | *":$GOBIN:"*)
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo '***' "You need to add $GOBIN to your "'$PATH.' '***'
|
|
||||||
esac
|
|
||||||
if [ "$(uname)" = "Darwin" ]; then
|
|
||||||
echo
|
|
||||||
echo On OS X the debuggers must be installed setgrp procmod.
|
|
||||||
echo Read and run ./sudo.bash to install the debuggers.
|
|
||||||
fi
|
|
||||||
if [ "$GOROOT_FINAL" != "$GOROOT" ]; then
|
|
||||||
echo
|
|
||||||
echo The binaries expect "$GOROOT" to be copied or moved to "$GOROOT_FINAL".
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
(installed) # run in sub-shell to avoid polluting environment
|
|
||||||
|
|
||||||
|
49
src/run.bash
49
src/run.bash
@ -4,54 +4,41 @@
|
|||||||
# license that can be found in the LICENSE file.
|
# license that can be found in the LICENSE file.
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
if [ "$1" = "--no-env" ]; then
|
|
||||||
# caller has already run env.bash
|
|
||||||
shift
|
|
||||||
else
|
|
||||||
. ./env.bash
|
|
||||||
fi
|
|
||||||
|
|
||||||
unset MAKEFLAGS # single-threaded make
|
eval $(../bin/tool/dist env -p)
|
||||||
|
|
||||||
unset CDPATH # in case user has it set
|
unset CDPATH # in case user has it set
|
||||||
|
|
||||||
# no core files, please
|
# no core files, please
|
||||||
ulimit -c 0
|
ulimit -c 0
|
||||||
|
|
||||||
# allow make.bash to avoid double-build of everything
|
# allow all.bash to avoid double-build of everything
|
||||||
rebuild=true
|
rebuild=true
|
||||||
if [ "$1" = "--no-rebuild" ]; then
|
if [ "$1" = "--no-rebuild" ]; then
|
||||||
rebuild=false
|
|
||||||
shift
|
shift
|
||||||
|
else
|
||||||
|
echo '# Building packages and commands.'
|
||||||
|
time go install -a -v std
|
||||||
|
echo
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo '# Testing packages.'
|
||||||
|
time go test std -short -timeout=120s
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo '# runtime -cpu=1,2,4'
|
||||||
|
go test runtime -short -timeout=120s -cpu=1,2,4
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo '# sync -cpu=10'
|
||||||
|
go test sync -short -timeout=120s -cpu=10
|
||||||
|
|
||||||
xcd() {
|
xcd() {
|
||||||
echo
|
echo
|
||||||
echo --- cd $1
|
echo --- cd $1
|
||||||
builtin cd "$GOROOT"/src/$1
|
builtin cd "$GOROOT"/src/$1
|
||||||
}
|
}
|
||||||
|
|
||||||
if $rebuild; then
|
|
||||||
echo
|
|
||||||
echo '# Package builds'
|
|
||||||
time go install -a -v std
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo '# Package tests'
|
|
||||||
time go test std -short -timeout=120s
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo '# runtime -cpu=1,2,4'
|
|
||||||
go test runtime -short -timeout=120s -cpu=1,2,4
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo '# sync -cpu=10'
|
|
||||||
go test sync -short -timeout=120s -cpu=10
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo '# Build bootstrap scripts'
|
|
||||||
./buildscript.sh
|
|
||||||
|
|
||||||
BROKEN=true
|
BROKEN=true
|
||||||
|
|
||||||
$BROKEN ||
|
$BROKEN ||
|
||||||
|
@ -23,7 +23,7 @@ do
|
|||||||
# Remove old binaries if present
|
# Remove old binaries if present
|
||||||
sudo rm -f /usr/local/bin/6$i
|
sudo rm -f /usr/local/bin/6$i
|
||||||
# Install new binaries
|
# Install new binaries
|
||||||
sudo cp "$GOROOT"/src/cmd/$i/$i /usr/local/bin/go$i
|
sudo cp "$GOROOT"/bin/tool/$i /usr/local/bin/go$i
|
||||||
sudo chgrp procmod /usr/local/bin/go$i
|
sudo chgrp procmod /usr/local/bin/go$i
|
||||||
sudo chmod g+s /usr/local/bin/go$i
|
sudo chmod g+s /usr/local/bin/go$i
|
||||||
done
|
done
|
||||||
|
4
test/run
4
test/run
@ -3,8 +3,8 @@
|
|||||||
# Use of this source code is governed by a BSD-style
|
# Use of this source code is governed by a BSD-style
|
||||||
# license that can be found in the LICENSE file.
|
# license that can be found in the LICENSE file.
|
||||||
|
|
||||||
eval $(../bin/tool/make --no-print-directory -f ../src/Make.inc go-env)
|
eval $(../bin/tool/dist env)
|
||||||
|
export GOARCH GOOS GOROOT
|
||||||
export E=
|
export E=
|
||||||
|
|
||||||
case X"$GOARCH" in
|
case X"$GOARCH" in
|
||||||
|
Loading…
Reference in New Issue
Block a user