]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
go: filter out build specific path from the linker flags
authorChangqing Li <changqing.li@windriver.com>
Thu, 7 Mar 2024 06:49:08 +0000 (22:49 -0800)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 7 Mar 2024 12:12:58 +0000 (12:12 +0000)
patch 0007-exec.go-do-not-write-linker-flags-into-buildids.patch
removes linker flags from buildids for not breaking reproducibility,
but it seems that this will make go not rebuild when linker flag
changes, Refer [1]. So remove this oe-specific patch, and change to
filter out build specific path from the linker flags

[1] https://github.com/golang/go/issues/63760

Signed-off-by: Changqing Li <changqing.li@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-devtools/go/go-1.22.0.inc
meta/recipes-devtools/go/go/0001-exec.go-filter-out-build-specific-paths-from-linker-.patch [new file with mode: 0644]

index 230ada5e4b22b3b701b2f68af0e23ee8ff11df9f..5b94051fc270e391b5a96cfd15ac02874c602095 100644 (file)
@@ -11,8 +11,8 @@ SRC_URI += "\
     file://0004-make.bash-override-CC-when-building-dist-and-go_boot.patch \
     file://0005-cmd-dist-separate-host-and-target-builds.patch \
     file://0006-cmd-go-make-GOROOT-precious-by-default.patch \
-    file://0007-exec.go-do-not-write-linker-flags-into-buildids.patch \
     file://0008-src-cmd-dist-buildgo.go-do-not-hardcode-host-compile.patch \
     file://0009-go-Filter-build-paths-on-staticly-linked-arches.patch \
+    file://0001-exec.go-filter-out-build-specific-paths-from-linker-.patch \
 "
 SRC_URI[main.sha256sum] = "4d196c3d41a0d6c1dfc64d04e3cc1f608b0c436bd87b7060ce3e23234e1f4d5c"
diff --git a/meta/recipes-devtools/go/go/0001-exec.go-filter-out-build-specific-paths-from-linker-.patch b/meta/recipes-devtools/go/go/0001-exec.go-filter-out-build-specific-paths-from-linker-.patch
new file mode 100644 (file)
index 0000000..c5bf28f
--- /dev/null
@@ -0,0 +1,61 @@
+From 083b5c74b12a1abeb11dd7f58a1cb1593d0000c0 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Tue, 27 Feb 2024 18:06:51 +0800
+Subject: [PATCH] exec.go: filter out build-specific paths from linker flags
+
+The flags can contain build-specific paths, breaking reproducibility.
+Filter out options that have build-specific paths.
+
+Upstream-Status: Inappropriate [ Not perfect for upstream ]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ src/cmd/go/internal/work/exec.go | 25 ++++++++++++++++++++++++-
+ 1 file changed, 24 insertions(+), 1 deletion(-)
+
+diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go
+index cde867b..e3ce17d 100644
+--- a/src/cmd/go/internal/work/exec.go
++++ b/src/cmd/go/internal/work/exec.go
+@@ -1358,6 +1358,29 @@ func (b *Builder) linkActionID(a *Action) cache.ActionID {
+       return h.Sum()
+ }
++func filterLinkerFlags(flags []string) []string {
++      var newflags []string
++      var skipflag bool
++      skipflag = false
++      for i, flag := range flags {
++              if skipflag == true {
++                      skipflag = false
++                      continue
++              }
++              if strings.HasPrefix(flag, "--sysroot") || strings.HasPrefix(flag, "-fmacro-prefix-map") || strings.HasPrefix(flag, "-fdebug-prefix-map") || strings.HasPrefix(flag, "-ffile-prefix-map") || strings.HasPrefix(flag, "-fcanon-prefix-map") || strings.HasPrefix(flag, "-fprofile-prefix-map") || strings.HasPrefix(flag, "-Wl,-rpath-link"){
++                      continue
++              } else if strings.HasPrefix(flag, "-extldflags") {
++                      skipflag = true
++                      newflags = append(newflags, flag)
++                      var filterd_Extldflags []string = filterLinkerFlags(strings.Split(flags[i+1], " "))
++                      newflags = append(newflags, strings.Join(filterd_Extldflags, " "))
++              } else {
++                      newflags = append(newflags, flag)
++              }
++      }
++      return newflags
++}
++
+ // printLinkerConfig prints the linker config into the hash h,
+ // as part of the computation of a linker-related action ID.
+ func (b *Builder) printLinkerConfig(h io.Writer, p *load.Package) {
+@@ -1368,7 +1391,7 @@ func (b *Builder) printLinkerConfig(h io.Writer, p *load.Package) {
+       case "gc":
+               fmt.Fprintf(h, "link %s %q %s\n", b.toolID("link"), forcedLdflags, ldBuildmode)
+               if p != nil {
+-                      fmt.Fprintf(h, "linkflags %q\n", p.Internal.Ldflags)
++                      fmt.Fprintf(h, "linkflags %q\n", filterLinkerFlags(p.Internal.Ldflags))
+               }
+               // GOARM, GOMIPS, etc.
+-- 
+2.25.1
+