#!/bin/rc -e
# Copyright 2012 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.

# Environment variables that control make.rc:
#
# GOROOT_FINAL: The expected final Go root, baked into binaries.
# The default is the location of the Go tree during the build.
#
# GOHOSTARCH: The architecture for host tools (compilers and
# binaries).  Binaries of this type must be executable on the current
# system, so the only common reason to set this is to set
# GOHOSTARCH=386 on an amd64 machine.
#
# GOARCH: The target architecture for installed packages and tools.
#
# GOOS: The target operating system for installed packages and tools.
#
# GO_GCFLAGS: Additional 5g/6g/8g arguments to use when
# building the packages and commands.
#
# GO_LDFLAGS: Additional 5l/6l/8l arguments to use when
# building the commands.
#
# GO_CCFLAGS: Additional 5c/6c/8c arguments to use when
# building.
#
# CGO_ENABLED: Controls cgo usage during the build. Set it to 1
# to include all cgo related files, .c and .go file with "cgo"
# build directive, in the build. Set it to 0 to ignore them.

rfork e
if(! test -f run.rc){
	echo 'make.rc must be run from $GOROOT/src' >[1=2]
	exit wrongdir
}

# Generate libc_plan9.h.
../include/plan9/mklibc.rc > ../include/plan9/libc_plan9.h

# Clean old generated file that will cause problems in the build.
rm -f ./pkg/runtime/runtime_defs.go

# Determine the host compiler toolchain.
eval `{grep '^(CC|LD|O)=' /$objtype/mkfile}

echo '# Building C bootstrap tool.'
echo cmd/dist
GOROOT = `{cd .. && pwd}
if(! ~ $#GOROOT_FINAL 1)
	GOROOT_FINAL = $GOROOT
DEFGOROOT='-DGOROOT_FINAL="'$GOROOT_FINAL'"'

for(i in cmd/dist/*.c)
	$CC -FTVwp+ -DPLAN9 $DEFGOROOT $i
$LD -o cmd/dist/dist *.$O
rm *.$O

eval `{./cmd/dist/dist env -9}
echo

if(~ $1 --dist-tool){
	# Stop after building dist tool.
	mkdir -p $GOTOOLDIR
	if(! ~ $2 '')
		cp cmd/dist/dist $2
	mv cmd/dist/dist $GOTOOLDIR/dist
	exit
}

echo '# Building compilers and Go bootstrap tool for host,' $GOHOSTOS/$GOHOSTARCH^.
buildall = -a
if(~ $1 --no-clean)
	buildall = ()
./cmd/dist/dist bootstrap $buildall -v # builds go_bootstrap
# Delay move of dist tool to now, because bootstrap may clear tool directory.
mv cmd/dist/dist $GOTOOLDIR/dist
$GOTOOLDIR/go_bootstrap clean -i std
echo

# Run only one process at a time on 9vx.
if(~ $sysname vx32)
	pflag = (-p 1)

if(! ~ $GOHOSTARCH $GOARCH || ! ~ $GOHOSTOS $GOOS){
	echo '# Building packages and commands for host,' $GOHOSTOS/$GOHOSTARCH^.
	GOOS=$GOHOSTOS GOARCH=$GOHOSTARCH \
		$GOTOOLDIR/go_bootstrap install -ccflags $"GO_CCFLAGS -gcflags $"GO_GCFLAGS -ldflags $"GO_LDFLAGS -v $pflag std
	echo
}

echo '# Building packages and commands for' $GOOS/$GOARCH^.
$GOTOOLDIR/go_bootstrap install -ccflags $"GO_CCFLAGS -gcflags $"GO_GCFLAGS -ldflags $"GO_LDFLAGS -v $pflag std
echo

rm -f $GOTOOLDIR/go_bootstrap

if(! ~ $1 --no-banner)
	$GOTOOLDIR/dist banner

status=''
