1#!/bin/rc -e 2# Copyright 2012 The Go Authors. All rights reserved. 3# Use of this source code is governed by a BSD-style 4# license that can be found in the LICENSE file. 5 6# See golang.org/s/go15bootstrap for an overview of the build process. 7 8# Environment variables that control make.rc: 9# 10# GOHOSTARCH: The architecture for host tools (compilers and 11# binaries). Binaries of this type must be executable on the current 12# system, so the only common reason to set this is to set 13# GOHOSTARCH=386 on an amd64 machine. 14# 15# GOARCH: The target architecture for installed packages and tools. 16# 17# GOOS: The target operating system for installed packages and tools. 18# 19# GO_GCFLAGS: Additional go tool compile arguments to use when 20# building the packages and commands. 21# 22# GO_LDFLAGS: Additional go tool link arguments to use when 23# building the commands. 24# 25# CGO_ENABLED: Controls cgo usage during the build. Set it to 1 26# to include all cgo related files, .c and .go file with "cgo" 27# build directive, in the build. Set it to 0 to ignore them. 28 29rfork e 30if(! test -f run.rc){ 31 echo 'make.rc must be run from $GOROOT/src' >[1=2] 32 exit wrongdir 33} 34 35# Clean old generated file that will cause problems in the build. 36rm -f ./runtime/runtime_defs.go 37 38# Determine the host compiler toolchain. 39eval `{grep '^(CC|LD|O)=' /$objtype/mkfile} 40 41vflag=() 42if(~ $1 -v) { 43 vflag=(-v) 44 shift 45} 46 47fn bootstrapenv { 48 GOROOT=$GOROOT_BOOTSTRAP GO111MODULE=off GOENV=off GOOS=() GOARCH=() GOEXPERIMENT=() GOFLAGS=() $* 49} 50 51bootgo = 1.20.6 52GOROOT = `{cd .. && pwd} 53goroot_bootstrap_set = 'true' 54if(! ~ $#GOROOT_BOOTSTRAP 1){ 55 goroot_bootstrap_set = 'false' 56 GOROOT_BOOTSTRAP = $home/go1.4 57 for(d in sdk/go$bootgo go$bootgo) 58 if(test -d $home/$d) 59 GOROOT_BOOTSTRAP = $home/$d 60} 61for(p in $path){ 62 if(! test -x $GOROOT_BOOTSTRAP/bin/go){ 63 if(go_exe = `{path=$p whatis go}){ 64 goroot_bootstrap = $GOROOT_BOOTSTRAP 65 GOROOT_BOOTSTRAP = () 66 goroot = `{bootstrapenv $go_exe env GOROOT} 67 GOROOT_BOOTSTRAP = $goroot_bootstrap 68 if(! ~ $goroot $GOROOT){ 69 if(~ $goroot_bootstrap_set 'true'){ 70 echo 'WARNING: '$GOROOT_BOOTSTRAP'/bin/go does not exist, found '$go_exe' from env' >[1=2] 71 echo 'WARNING: set '$goroot' as GOROOT_BOOTSTRAP' >[1=2] 72 } 73 GOROOT_BOOTSTRAP = $goroot 74 } 75 } 76 } 77} 78if(! test -x $GOROOT_BOOTSTRAP/bin/go){ 79 echo 'ERROR: Cannot find '$GOROOT_BOOTSTRAP'/bin/go.' >[1=2] 80 echo 'Set $GOROOT_BOOTSTRAP to a working Go tree >= Go '$bootgo'.' >[1=2] 81 exit bootstrap 82} 83if(~ $GOROOT_BOOTSTRAP $GOROOT){ 84 echo 'ERROR: $GOROOT_BOOTSTRAP must not be set to $GOROOT' >[1=2] 85 echo 'Set $GOROOT_BOOTSTRAP to a working Go tree >= Go '$bootgo'.' >[1=2] 86 exit bootstrap 87} 88 89# Get the exact bootstrap toolchain version to help with debugging. 90# We clear GOOS and GOARCH to avoid an ominous but harmless warning if 91# the bootstrap doesn't support them. 92GOROOT_BOOTSTRAP_VERSION=`{bootstrapenv $GOROOT_BOOTSTRAP/bin/go version | sed 's/go version //'} 93echo 'Building Go cmd/dist using '$GOROOT_BOOTSTRAP'. ('$"GOROOT_BOOTSTRAP_VERSION')' 94if(~ $#vflag 1) 95 echo cmd/dist 96bootstrapenv $GOROOT_BOOTSTRAP/bin/go build -o cmd/dist/dist ./cmd/dist 97 98eval `{./cmd/dist/dist env -9} 99if(~ $#vflag 1) 100 echo 101 102if(~ $1 --dist-tool){ 103 # Stop after building dist tool. 104 mkdir -p $GOTOOLDIR 105 if(! ~ $2 '') 106 cp cmd/dist/dist $2 107 mv cmd/dist/dist $GOTOOLDIR/dist 108 exit 109} 110 111# Run dist bootstrap to complete make.bash. 112# Bootstrap installs a proper cmd/dist, built with the new toolchain. 113# Throw ours, built with the bootstrap toolchain, away after bootstrap. 114./cmd/dist/dist bootstrap -a $vflag $* 115rm -f ./cmd/dist/dist 116 117# DO NOT ADD ANY NEW CODE HERE. 118# The bootstrap+rm above are the final step of make.rc. 119# If something must be added, add it to cmd/dist's cmdbootstrap, 120# to avoid needing three copies in three different shell languages 121# (make.bash, make.bat, make.rc). 122