[release-branch.go1.21] cmd/cgo/internal/swig: force use of lld for LTO tests on the builders

For whatever reason, on the builders, when using /usr/bin/ld (the
default linker) with -flto we end up with problems. Specifically, the
linker seems to require LLVMgold.so and can't find it. I'm not really
sure why, but what definitely seems to work is forcing use of lld, which
ships with our clang installation on the builders.

Just enforce this on the builders for now; I've actually had very few
problems running this locally (and I think I'm also mixing and matching
linkers and toolchains too...), so it may be related to the version of
clang we're testing with.

For #67698.
For #67714.

Change-Id: I3bfbcd609e7d0fd70e52ac7e2a0817db95664f20
Cq-Include-Trybots: luci.golang.try:go1.21-linux-amd64-clang15,go1.21-linux-386-clang15
Reviewed-on: https://go-review.googlesource.com/c/go/+/589296
Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-on: https://go-review.googlesource.com/c/go/+/591377
This commit is contained in:
Michael Anthony Knyszek 2024-05-30 03:36:41 +00:00 committed by Joedian Reid
parent dfb0067018
commit 537ec6f21e
1 changed files with 8 additions and 1 deletions

View File

@ -44,11 +44,18 @@ func run(t *testing.T, dir string, lto bool, args ...string) {
cmd := exec.Command("go", runArgs...)
cmd.Dir = dir
if lto {
// On the builders we're using the default /usr/bin/ld, but
// that has problems when asking for LTO in particular. Force
// use of lld, which ships with our clang installation.
extraLDFlags := ""
if strings.Contains(testenv.Builder(), "clang") {
extraLDFlags += " -fuse-ld=lld"
}
const cflags = "-flto -Wno-lto-type-mismatch -Wno-unknown-warning-option"
cmd.Env = append(cmd.Environ(),
"CGO_CFLAGS="+cflags,
"CGO_CXXFLAGS="+cflags,
"CGO_LDFLAGS="+cflags)
"CGO_LDFLAGS="+cflags+extraLDFlags)
}
out, err := cmd.CombinedOutput()
if string(out) != "OK\n" {