From 7f255ba065ee7bd41da806b297cd643e3ead3fee Mon Sep 17 00:00:00 2001 From: Michael Matloob Date: Wed, 28 Sep 2022 11:50:41 -0400 Subject: [PATCH] cmd/dist: produce intermedate .a files in a temporary location Before this change, the .a files for the intermediate go toolchains were produced in the same location as the install target. This change has them produced in a temporary location instead. This change, combined with go install not producing .a files for most stdlib packages by default results in a build of the distribution only producing .a's for the five packages in std that require cgo. (Before this change, the .a's for the final build were not being produced, but stale ones from the intermediate builds were left behind.) For #47257 Change-Id: I91b826cd1ce9aad9c492fb865e36d34dc8bb188e Reviewed-on: https://go-review.googlesource.com/c/go/+/436135 TryBot-Result: Gopher Robot Run-TryBot: Michael Matloob Reviewed-by: Bryan Mills Reviewed-by: Michael Matloob --- src/cmd/dist/build.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go index b51f56dc44..605ef52e96 100644 --- a/src/cmd/dist/build.go +++ b/src/cmd/dist/build.go @@ -488,6 +488,16 @@ func setup() { xmkdirall(p) xatexit(func() { xremoveall(p) }) + // Create alternate driectory for intermediate + // standard library .a's to be placed rather than + // the final build's install locations. + p = pathf("%s/pkg/obj/go-bootstrap", goroot) + if rebuildall { + xremoveall(p) + } + xmkdirall(p) + xatexit(func() { xremoveall(p) }) + // Create tool directory. // We keep it in pkg/, just like the object directory above. if rebuildall { @@ -651,6 +661,7 @@ func runInstall(pkg string, ch chan struct{}) { link = append(link, goldflags) } link = append(link, "-extld="+compilerEnvLookup(defaultcc, goos, goarch)) + link = append(link, "-L="+pathf("%s/pkg/obj/go-bootstrap/%s_%s", goroot, goos, goarch)) link = append(link, "-o", pathf("%s/%s%s", tooldir, elem, exe)) targ = len(link) - 1 } @@ -934,7 +945,7 @@ func runInstall(pkg string, ch chan struct{}) { // packagefile returns the path to a compiled .a file for the given package // path. Paths may need to be resolved with resolveVendor first. func packagefile(pkg string) string { - return pathf("%s/pkg/%s_%s/%s.a", goroot, goos, goarch, pkg) + return pathf("%s/pkg/obj/go-bootstrap/%s_%s/%s.a", goroot, goos, goarch, pkg) } // unixOS is the set of GOOS values matched by the "unix" build tag. -- 2.48.1