Skip to content

Commit

Permalink
cmd/dist: build exec wrappers during bootstrap
Browse files Browse the repository at this point in the history
The androidtest.bash script encodes the additional steps to build
Go and run tests on Android. In order to add sharded builders and
trybots, Android needs to fit into the usual make.bash + cmd/dist test
pattern.

This change moves building the exec wrapper into cmd/dist bootstrap.

Do the same for iOS while we're here.

Updates #23824

Change-Id: I58a1b0679c3a6c92fdc7fff464b469641f1fee74
Reviewed-on: https://go-review.googlesource.com/c/163618
Run-TryBot: Elias Naur <mail@eliasnaur.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
  • Loading branch information
eliasnaur authored and bradfitz committed Feb 26, 2019
1 parent 42a82ce commit da2d02a
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 10 deletions.
5 changes: 1 addition & 4 deletions src/androidtest.bash
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,11 @@ fi
export CGO_ENABLED=1
unset GOBIN

# Do the build first, so we can build go_android_exec and cleaner.
# Do the build first, so we can build the 'cleaner' binary.
# Also lets us fail early before the (slow) adb push if the build is broken.
. ./make.bash --no-banner
export GOROOT=$(dirname $(pwd))
export PATH=$GOROOT/bin:$PATH
GOOS=$GOHOSTOS GOARCH=$GOHOSTARCH go build \
-o ../bin/go_android_${GOARCH}_exec \
../misc/android/go_android_exec.go

export pkgdir=$(dirname $(go list -f '{{.Target}}' runtime))
if [ "$pkgdir" = "" ]; then
Expand Down
30 changes: 29 additions & 1 deletion src/cmd/dist/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -1366,14 +1366,42 @@ func cmdbootstrap() {
// Remove go_bootstrap now that we're done.
xremove(pathf("%s/go_bootstrap", tooldir))

// Build the exec wrapper if necessary.
if wrapperPath := wrapperPathFor(goos, goarch); wrapperPath != "" {
oldcc := os.Getenv("CC")
os.Setenv("GOOS", gohostos)
os.Setenv("GOARCH", gohostarch)
os.Setenv("CC", compilerEnvLookup(defaultcc, gohostos, gohostarch))
goCmd(cmdGo, "build", "-o", pathf("%s/go_%s_%s_exec%s", gobin, goos, goarch, exe), wrapperPath)
// Restore environment.
// TODO(elias.naur): support environment variables in goCmd?
os.Setenv("GOOS", goos)
os.Setenv("GOARCH", goarch)
os.Setenv("CC", oldcc)
}

// Print trailing banner unless instructed otherwise.
if !noBanner {
banner()
}
}

func wrapperPathFor(goos, goarch string) string {
switch {
case goos == "android":
return pathf("%s/misc/android/go_android_exec.go", goroot)
case goos == "darwin" && (goarch == "arm" || goarch == "arm64"):
return pathf("%s/misc/ios/go_darwin_arm_exec.go", goroot)
}
return ""
}

func goInstall(goBinary string, args ...string) {
installCmd := []string{goBinary, "install", "-gcflags=all=" + gogcflags, "-ldflags=all=" + goldflags}
goCmd(goBinary, "install", args...)
}

func goCmd(goBinary string, cmd string, args ...string) {
installCmd := []string{goBinary, cmd, "-gcflags=all=" + gogcflags, "-ldflags=all=" + goldflags}
if vflag > 0 {
installCmd = append(installCmd, "-v")
}
Expand Down
6 changes: 1 addition & 5 deletions src/iostest.bash
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,10 @@ export PATH=$GOROOT/bin:$PATH
export CGO_ENABLED=1
export CC_FOR_TARGET=$GOROOT/misc/ios/clangwrap.sh

# Run the build for the host bootstrap, so we can build go_darwin_arm_exec.
# Run the build for the host bootstrap, so we can build detect.go.
# Also lets us fail early before the (slow) ios-deploy if the build is broken.
./make.bash

GOOS=$GOHOSTOS GOARCH=$GOHOSTARCH go build \
-o ../bin/go_darwin_${GOARCH}_exec \
../misc/ios/go_darwin_arm_exec.go

if [ "$GOIOS_DEV_ID" = "" ]; then
echo "detecting iOS development identity"
eval $(GOOS=$GOHOSTOS GOARCH=$GOHOSTARCH go run ../misc/ios/detect.go)
Expand Down

0 comments on commit da2d02a

Please sign in to comment.