From 4d43f7c4dd06e6f62be446996019d4505af54764 Mon Sep 17 00:00:00 2001 From: Christian Stewart Date: Thu, 14 Apr 2022 13:34:26 -0700 Subject: [PATCH] build: bootstrap: set environment before generating buildcfg The GOOS and GOARCH environment variables should be unset before calling mkbuildcfg. This change fixes a build failure when GOARCH=riscv64. Building Go toolchain1 using go-1.4-bootstrap-20171003. src/cmd/compile/internal/ssa/rewriteRISCV64.go:4814 invalid operation: y << x (shift count type int64, must be unsigned integer) There is a build issue with go1.4 with the riscv64 code: however, why is the riscv64 code being compiled at all? GOARCH is set when calling mkbuildcfg, so go1.4 is trying to compile riscv64. [Buildroot]: submitted to upstream: - https://github.com/golang/go/issues/52583 - https://go-review.googlesource.com/c/go/+/400376 - GitHub-Pull-Request: golang/go#52362 Signed-off-by: Christian Stewart --- src/cmd/dist/buildtool.go | 56 ++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/src/cmd/dist/buildtool.go b/src/cmd/dist/buildtool.go index f1f3d50b6f..dabf01cf84 100644 --- a/src/cmd/dist/buildtool.go +++ b/src/cmd/dist/buildtool.go @@ -116,9 +116,6 @@ func bootstrapBuildTools() { } xprintf("Building Go toolchain1 using %s.\n", goroot_bootstrap) - mkbuildcfg(pathf("%s/src/internal/buildcfg/zbootstrap.go", goroot)) - mkobjabi(pathf("%s/src/cmd/internal/objabi/zbootstrap.go", goroot)) - // Use $GOROOT/pkg/bootstrap as the bootstrap workspace root. // We use a subdirectory of $GOROOT/pkg because that's the // space within $GOROOT where we store all generated objects. @@ -130,6 +127,34 @@ func bootstrapBuildTools() { base := pathf("%s/src/bootstrap", workspace) xmkdirall(base) + // Set up environment for invoking Go 1.4 go command. + // GOROOT points at Go 1.4 GOROOT, + // GOPATH points at our bootstrap workspace, + // GOBIN is empty, so that binaries are installed to GOPATH/bin, + // and GOOS, GOHOSTOS, GOARCH, and GOHOSTOS are empty, + // so that Go 1.4 builds whatever kind of binary it knows how to build. + // Restore GOROOT, GOPATH, and GOBIN when done. + // Don't bother with GOOS, GOHOSTOS, GOARCH, and GOHOSTARCH, + // because setup will take care of those when bootstrapBuildTools returns. + + defer os.Setenv("GOROOT", os.Getenv("GOROOT")) + os.Setenv("GOROOT", goroot_bootstrap) + + defer os.Setenv("GOPATH", os.Getenv("GOPATH")) + os.Setenv("GOPATH", workspace) + + defer os.Setenv("GOBIN", os.Getenv("GOBIN")) + os.Setenv("GOBIN", "") + + os.Setenv("GOOS", "") + os.Setenv("GOHOSTOS", "") + os.Setenv("GOARCH", "") + os.Setenv("GOHOSTARCH", "") + + // Create the build config files. + mkbuildcfg(pathf("%s/src/internal/buildcfg/zbootstrap.go", goroot)) + mkobjabi(pathf("%s/src/cmd/internal/objabi/zbootstrap.go", goroot)) + // Copy source code into $GOROOT/pkg/bootstrap and rewrite import paths. writefile("module bootstrap\n", pathf("%s/%s", base, "go.mod"), 0) for _, dir := range bootstrapDirs { @@ -176,30 +201,6 @@ func bootstrapBuildTools() { }) } - // Set up environment for invoking Go 1.4 go command. - // GOROOT points at Go 1.4 GOROOT, - // GOPATH points at our bootstrap workspace, - // GOBIN is empty, so that binaries are installed to GOPATH/bin, - // and GOOS, GOHOSTOS, GOARCH, and GOHOSTOS are empty, - // so that Go 1.4 builds whatever kind of binary it knows how to build. - // Restore GOROOT, GOPATH, and GOBIN when done. - // Don't bother with GOOS, GOHOSTOS, GOARCH, and GOHOSTARCH, - // because setup will take care of those when bootstrapBuildTools returns. - - defer os.Setenv("GOROOT", os.Getenv("GOROOT")) - os.Setenv("GOROOT", goroot_bootstrap) - - defer os.Setenv("GOPATH", os.Getenv("GOPATH")) - os.Setenv("GOPATH", workspace) - - defer os.Setenv("GOBIN", os.Getenv("GOBIN")) - os.Setenv("GOBIN", "") - - os.Setenv("GOOS", "") - os.Setenv("GOHOSTOS", "") - os.Setenv("GOARCH", "") - os.Setenv("GOHOSTARCH", "") - // Run Go 1.4 to build binaries. Use -gcflags=-l to disable inlining to // workaround bugs in Go 1.4's compiler. See discussion thread: // https://groups.google.com/d/msg/golang-dev/Ss7mCKsvk8w/Gsq7VYI0AwAJ @@ -221,6 +222,7 @@ func bootstrapBuildTools() { cmd = append(cmd, "-toolexec="+tool) } cmd = append(cmd, "bootstrap/cmd/...") + run(base, ShowOutput|CheckExit, cmd...) // Copy binaries into tool binary directory. -- 2.35.1