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
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" {