1
0
mirror of https://github.com/golang/go synced 2024-11-17 19:54:45 -07:00

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 <gobot@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
This commit is contained in:
Michael Matloob 2022-09-28 11:50:41 -04:00
parent 0156b797e6
commit 7f255ba065

13
src/cmd/dist/build.go vendored
View File

@ -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.