go: Filter build paths on staticly linked arches

(From OE-Core rev: acd376324765e432f7c3895470ca46d2ce29287e)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2022-07-02 23:08:13 +01:00
parent 8d1977b2b6
commit 48b89b735d
2 changed files with 49 additions and 0 deletions

View File

@@ -13,5 +13,6 @@ SRC_URI += "\
file://0007-cmd-go-make-GOROOT-precious-by-default.patch \
file://0001-exec.go-do-not-write-linker-flags-into-buildids.patch \
file://0001-src-cmd-dist-buildgo.go-do-not-hardcode-host-compile.patch \
file://filter-build-paths.patch \
"
SRC_URI[main.sha256sum] = "0012386ddcbb5f3350e407c679923811dbd283fcdc421724931614a842ecbc2d"

View File

@@ -0,0 +1,48 @@
Filter out build time paths from ldflags and other flags variables when they're
embedded in the go binary so that builds are reproducible regardless of build
location. This codepath is hit for statically linked go binaries such as those
on mips/ppc.
Upstream-Status: Pending
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Index: go/src/cmd/go/internal/load/pkg.go
===================================================================
--- go.orig/src/cmd/go/internal/load/pkg.go
+++ go/src/cmd/go/internal/load/pkg.go
@@ -2225,6 +2225,17 @@ func (p *Package) collectDeps() {
// to their VCS information (vcsStatusError).
var vcsStatusCache par.Cache
+func filterCompilerFlags(flags string) string {
+ var newflags []string
+ for _, flag := range strings.Fields(flags) {
+ if strings.HasPrefix(flag, "--sysroot") || strings.HasPrefix(flag, "-fmacro-prefix-map") || strings.HasPrefix(flag, "-fdebug-prefix-map") {
+ continue
+ }
+ newflags = append(newflags, flag)
+ }
+ return strings.Join(newflags, " ")
+}
+
// setBuildInfo gathers build information, formats it as a string to be
// embedded in the binary, then sets p.Internal.BuildInfo to that string.
// setBuildInfo should only be called on a main package with no errors.
@@ -2329,7 +2340,7 @@ func (p *Package) setBuildInfo(includeVC
appendSetting("-gcflags", BuildGcflags.String())
}
if BuildLdflags.present {
- appendSetting("-ldflags", BuildLdflags.String())
+ appendSetting("-ldflags", filterCompilerFlags(BuildLdflags.String()))
}
if cfg.BuildMSan {
appendSetting("-msan", "true")
@@ -2347,7 +2358,7 @@ func (p *Package) setBuildInfo(includeVC
appendSetting("CGO_ENABLED", cgo)
if cfg.BuildContext.CgoEnabled {
for _, name := range []string{"CGO_CFLAGS", "CGO_CPPFLAGS", "CGO_CXXFLAGS", "CGO_LDFLAGS"} {
- appendSetting(name, cfg.Getenv(name))
+ appendSetting(name, filterCompilerFlags(cfg.Getenv(name)))
}
}
appendSetting("GOARCH", cfg.BuildContext.GOARCH)