* [Buildroot] [PATCH v5 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.9
@ 2023-05-03 2:23 Christian Stewart
2023-05-03 2:23 ` [Buildroot] [PATCH v5 2/4] package/go: adjust comments Christian Stewart
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Christian Stewart @ 2023-05-03 2:23 UTC (permalink / raw)
To: buildroot
Cc: Christian Stewart, Yann E . MORIN, Thomas Petazzoni, Anisse Astier
Go 1.20 requires a minimum version of go 1.17.13 to bootstrap.
https://go.dev/doc/go1.20#bootstrap
As Go 1.4 was the previous version that could be compiled with C, there is now
no way to bootstrap go with a C compiler, unless we use a two-stage bootstrap:
- build host-go-bootstrap-1.4-20170531
- build host-go-bootstrap-1.19.9 with host-go-bootstrap-1.4-20170531
- build host-go-1.20 with host-go-bootstrap-1.19.9
This is implemented in this commit first, before upgrading host-go to 1.20.
Note: the .patch files from package/go version 1.19.x are not necessary for
package/go-bootstrap-stage2 and have not been included there.
Previous discussion of possible alternatives:
https://lore.kernel.org/all/CA+h8R2rtcynkCBsz=_9yANOEguyPCOcQDj8_ns+cv8RS8+8t9A@mail.gmail.com/
https://lore.kernel.org/all/20220525234312.643dfc03@windsurf/T/
Signed-off-by: Christian Stewart <christian@aperture.us>
---
v1 -> v2:
- fix indentation of GOROOT_BOOTSTRAP in stage2 MAKE_ENV
- adjust commit description
- remove duplicate MAKE_ENV declaration line
- reorder depends on lines in config.in.host
v3 -> v4:
- Fixed typo compatable -> compatible
- Dropped dependency on toolchain in go-bootstrap-stage1
- Dropped updating sources timestamps in go-bootstrap-stage{1,2}
- Update go-bootstrap-stage2 to 1.19.7
- Drop these comments and move to separate patch:
- Fix typo in comments.
- Adjusted comment built in -> built-in.
- Adjust comments relating to copying src/ to host/
- Dropped outdated comment referring to issue 2775.
- Thanks Thomas for the review.
v4 -> v5:
- update stage2 to go1.19.9
Signed-off-by: Christian Stewart <christian@aperture.us>
---
DEVELOPERS | 2 +
package/Config.in.host | 3 +-
package/go-bootstrap-stage1/Config.in.host | 6 +++
.../go-bootstrap-stage1.hash} | 0
.../go-bootstrap-stage1.mk | 43 +++++++++++++++
package/go-bootstrap-stage2/Config.in.host | 4 ++
.../go-bootstrap-stage2.hash | 3 ++
.../go-bootstrap-stage2.mk | 53 +++++++++++++++++++
package/go-bootstrap/Config.in.host | 7 ---
package/go-bootstrap/go-bootstrap.mk | 50 -----------------
package/go/Config.in.host | 4 +-
package/go/go.mk | 4 +-
12 files changed, 117 insertions(+), 62 deletions(-)
create mode 100644 package/go-bootstrap-stage1/Config.in.host
rename package/{go-bootstrap/go-bootstrap.hash => go-bootstrap-stage1/go-bootstrap-stage1.hash} (100%)
create mode 100644 package/go-bootstrap-stage1/go-bootstrap-stage1.mk
create mode 100644 package/go-bootstrap-stage2/Config.in.host
create mode 100644 package/go-bootstrap-stage2/go-bootstrap-stage2.hash
create mode 100644 package/go-bootstrap-stage2/go-bootstrap-stage2.mk
delete mode 100644 package/go-bootstrap/Config.in.host
delete mode 100644 package/go-bootstrap/go-bootstrap.mk
diff --git a/DEVELOPERS b/DEVELOPERS
index d9e95a3d05..55fad59ddb 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -552,6 +552,8 @@ F: package/docker-engine/
F: package/embiggen-disk/
F: package/fuse-overlayfs/
F: package/go/
+F: package/go-bootstrap-stage1/
+F: package/go-bootstrap-stage2/
F: package/gocryptfs/
F: package/mbpfan/
F: package/moby-buildkit/
diff --git a/package/Config.in.host b/package/Config.in.host
index dcadbfdfc1..fff75cd165 100644
--- a/package/Config.in.host
+++ b/package/Config.in.host
@@ -40,7 +40,8 @@ menu "Host utilities"
source "package/genpart/Config.in.host"
source "package/gnupg/Config.in.host"
source "package/go/Config.in.host"
- source "package/go-bootstrap/Config.in.host"
+ source "package/go-bootstrap-stage1/Config.in.host"
+ source "package/go-bootstrap-stage2/Config.in.host"
source "package/google-breakpad/Config.in.host"
source "package/gptfdisk/Config.in.host"
source "package/imagemagick/Config.in.host"
diff --git a/package/go-bootstrap-stage1/Config.in.host b/package/go-bootstrap-stage1/Config.in.host
new file mode 100644
index 0000000000..56a743caf9
--- /dev/null
+++ b/package/go-bootstrap-stage1/Config.in.host
@@ -0,0 +1,6 @@
+config BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE1_ARCH_SUPPORTS
+ bool
+ # See src/cmd/dist/unix.c for the list of supported architectures
+ default y if BR2_HOSTARCH = "x86"
+ default y if BR2_HOSTARCH = "x86_64"
+ default y if BR2_HOSTARCH = "arm"
diff --git a/package/go-bootstrap/go-bootstrap.hash b/package/go-bootstrap-stage1/go-bootstrap-stage1.hash
similarity index 100%
rename from package/go-bootstrap/go-bootstrap.hash
rename to package/go-bootstrap-stage1/go-bootstrap-stage1.hash
diff --git a/package/go-bootstrap-stage1/go-bootstrap-stage1.mk b/package/go-bootstrap-stage1/go-bootstrap-stage1.mk
new file mode 100644
index 0000000000..dba18e86e9
--- /dev/null
+++ b/package/go-bootstrap-stage1/go-bootstrap-stage1.mk
@@ -0,0 +1,43 @@
+################################################################################
+#
+# go-bootstrap-stage1
+#
+################################################################################
+
+# Use last C-based Go compiler: v1.4.x
+# See https://golang.org/doc/install/source#bootstrapFromSource
+GO_BOOTSTRAP_STAGE1_VERSION = 1.4-bootstrap-20171003
+GO_BOOTSTRAP_STAGE1_SITE = https://dl.google.com/go
+GO_BOOTSTRAP_STAGE1_SOURCE = go$(GO_BOOTSTRAP_STAGE1_VERSION).tar.gz
+
+GO_BOOTSTRAP_STAGE1_LICENSE = BSD-3-Clause
+GO_BOOTSTRAP_STAGE1_LICENSE_FILES = LICENSE
+
+HOST_GO_BOOTSTRAP_STAGE1_ROOT = $(HOST_DIR)/lib/go-$(GO_BOOTSTRAP_STAGE1_VERSION)
+
+# The go build system is not compatable with ccache, so use HOSTCC_NOCCACHE.
+# See https://github.com/golang/go/issues/11685.
+HOST_GO_BOOTSTRAP_STAGE1_MAKE_ENV = \
+ GOOS=linux \
+ GOROOT_FINAL="$(HOST_GO_BOOTSTRAP_STAGE1_ROOT)" \
+ GOROOT="$(@D)" \
+ GOBIN="$(@D)/bin" \
+ CC=$(HOSTCC_NOCCACHE) \
+ CGO_ENABLED=0
+
+define HOST_GO_BOOTSTRAP_STAGE1_BUILD_CMDS
+ cd $(@D)/src && $(HOST_GO_BOOTSTRAP_STAGE1_MAKE_ENV) ./make.bash
+endef
+
+define HOST_GO_BOOTSTRAP_STAGE1_INSTALL_CMDS
+ $(INSTALL) -D -m 0755 $(@D)/bin/go $(HOST_GO_BOOTSTRAP_STAGE1_ROOT)/bin/go
+ $(INSTALL) -D -m 0755 $(@D)/bin/gofmt $(HOST_GO_BOOTSTRAP_STAGE1_ROOT)/bin/gofmt
+
+ cp -a $(@D)/lib $(HOST_GO_BOOTSTRAP_STAGE1_ROOT)/
+ cp -a $(@D)/pkg $(HOST_GO_BOOTSTRAP_STAGE1_ROOT)/
+
+ # The Go sources must be installed to the host/ tree for the Go stdlib.
+ cp -a $(@D)/src $(HOST_GO_BOOTSTRAP_STAGE1_ROOT)/
+endef
+
+$(eval $(host-generic-package))
diff --git a/package/go-bootstrap-stage2/Config.in.host b/package/go-bootstrap-stage2/Config.in.host
new file mode 100644
index 0000000000..967ddaed1d
--- /dev/null
+++ b/package/go-bootstrap-stage2/Config.in.host
@@ -0,0 +1,4 @@
+config BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE2_ARCH_SUPPORTS
+ bool
+ default y
+ depends on BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE1_ARCH_SUPPORTS
diff --git a/package/go-bootstrap-stage2/go-bootstrap-stage2.hash b/package/go-bootstrap-stage2/go-bootstrap-stage2.hash
new file mode 100644
index 0000000000..ffe42bf395
--- /dev/null
+++ b/package/go-bootstrap-stage2/go-bootstrap-stage2.hash
@@ -0,0 +1,3 @@
+# From https://go.dev/dl
+sha256 131190a4697a70c5b1d232df5d3f55a3f9ec0e78e40516196ffb3f09ae6a5744 go1.19.9.src.tar.gz
+sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 LICENSE
diff --git a/package/go-bootstrap-stage2/go-bootstrap-stage2.mk b/package/go-bootstrap-stage2/go-bootstrap-stage2.mk
new file mode 100644
index 0000000000..78ef61a657
--- /dev/null
+++ b/package/go-bootstrap-stage2/go-bootstrap-stage2.mk
@@ -0,0 +1,53 @@
+################################################################################
+#
+# go-bootstrap-stage2
+#
+################################################################################
+
+# Use last Go version that go-bootstrap-stage1 can build: v1.19.x
+# See https://golang.org/doc/install/source#bootstrapFromSource
+GO_BOOTSTRAP_STAGE2_VERSION = 1.19.9
+GO_BOOTSTRAP_STAGE2_SITE = https://storage.googleapis.com/golang
+GO_BOOTSTRAP_STAGE2_SOURCE = go$(GO_BOOTSTRAP_STAGE2_VERSION).src.tar.gz
+
+GO_BOOTSTRAP_STAGE2_LICENSE = BSD-3-Clause
+GO_BOOTSTRAP_STAGE2_LICENSE_FILES = LICENSE
+
+# Use go-bootstrap-stage1 to bootstrap.
+HOST_GO_BOOTSTRAP_STAGE2_DEPENDENCIES = host-go-bootstrap-stage1
+
+HOST_GO_BOOTSTRAP_STAGE2_ROOT = $(HOST_DIR)/lib/go-$(GO_BOOTSTRAP_STAGE2_VERSION)
+
+# The go build system is not compatible with ccache, so use HOSTCC_NOCCACHE.
+# See https://github.com/golang/go/issues/11685.
+HOST_GO_BOOTSTRAP_STAGE2_MAKE_ENV = \
+ GO111MODULE=off \
+ GOROOT_BOOTSTRAP=$(HOST_GO_BOOTSTRAP_STAGE1_ROOT) \
+ GOROOT_FINAL=$(HOST_GO_BOOTSTRAP_STAGE2_ROOT) \
+ GOROOT="$(@D)" \
+ GOBIN="$(@D)/bin" \
+ GOOS=linux \
+ CC=$(HOSTCC_NOCCACHE) \
+ CXX=$(HOSTCXX_NOCCACHE) \
+ CGO_ENABLED=0
+
+define HOST_GO_BOOTSTRAP_STAGE2_BUILD_CMDS
+ cd $(@D)/src && \
+ $(HOST_GO_BOOTSTRAP_STAGE2_MAKE_ENV) ./make.bash $(if $(VERBOSE),-v)
+endef
+
+define HOST_GO_BOOTSTRAP_STAGE2_INSTALL_CMDS
+ $(INSTALL) -D -m 0755 $(@D)/bin/go $(HOST_GO_BOOTSTRAP_STAGE2_ROOT)/bin/go
+ $(INSTALL) -D -m 0755 $(@D)/bin/gofmt $(HOST_GO_BOOTSTRAP_STAGE2_ROOT)/bin/gofmt
+
+ cp -a $(@D)/lib $(HOST_GO_BOOTSTRAP_STAGE2_ROOT)/
+
+ mkdir -p $(HOST_GO_BOOTSTRAP_STAGE2_ROOT)/pkg
+ cp -a $(@D)/pkg/include $(@D)/pkg/linux_* $(HOST_GO_BOOTSTRAP_STAGE2_ROOT)/pkg/
+ cp -a $(@D)/pkg/tool $(HOST_GO_BOOTSTRAP_STAGE2_ROOT)/pkg/
+
+ # The Go sources must be installed to the host/ tree for the Go stdlib.
+ cp -a $(@D)/src $(HOST_GO_BOOTSTRAP_STAGE2_ROOT)/
+endef
+
+$(eval $(host-generic-package))
diff --git a/package/go-bootstrap/Config.in.host b/package/go-bootstrap/Config.in.host
deleted file mode 100644
index fab80d24b4..0000000000
--- a/package/go-bootstrap/Config.in.host
+++ /dev/null
@@ -1,7 +0,0 @@
-config BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS
- bool
- # See src/cmd/dist/unix.c for the list of support
- # architectures
- default y if BR2_HOSTARCH = "x86"
- default y if BR2_HOSTARCH = "x86_64"
- default y if BR2_HOSTARCH = "arm"
diff --git a/package/go-bootstrap/go-bootstrap.mk b/package/go-bootstrap/go-bootstrap.mk
deleted file mode 100644
index 71696a1540..0000000000
--- a/package/go-bootstrap/go-bootstrap.mk
+++ /dev/null
@@ -1,50 +0,0 @@
-################################################################################
-#
-# go-bootstrap
-#
-################################################################################
-
-# Use last C-based Go compiler: v1.4.x
-# See https://golang.org/doc/install/source#bootstrapFromSource
-GO_BOOTSTRAP_VERSION = 1.4-bootstrap-20171003
-GO_BOOTSTRAP_SITE = https://dl.google.com/go
-GO_BOOTSTRAP_SOURCE = go$(GO_BOOTSTRAP_VERSION).tar.gz
-
-GO_BOOTSTRAP_LICENSE = BSD-3-Clause
-GO_BOOTSTRAP_LICENSE_FILES = LICENSE
-
-# To build programs that need cgo support the toolchain needs to be
-# available, so the toolchain is not needed to build host-go-bootstrap
-# itself, but needed by other packages that depend on
-# host-go-bootstrap.
-HOST_GO_BOOTSTRAP_DEPENDENCIES = toolchain
-
-HOST_GO_BOOTSTRAP_ROOT = $(HOST_DIR)/lib/go-$(GO_BOOTSTRAP_VERSION)
-
-# The go build system is not compatable with ccache, so use HOSTCC_NOCCACHE
-# here. See https://github.com/golang/go/issues/11685.
-HOST_GO_BOOTSTRAP_MAKE_ENV = \
- GOOS=linux \
- GOROOT_FINAL="$(HOST_GO_BOOTSTRAP_ROOT)" \
- GOROOT="$(@D)" \
- GOBIN="$(@D)/bin" \
- CC=$(HOSTCC_NOCCACHE) \
- CGO_ENABLED=0
-
-define HOST_GO_BOOTSTRAP_BUILD_CMDS
- cd $(@D)/src && $(HOST_GO_BOOTSTRAP_MAKE_ENV) ./make.bash
-endef
-
-define HOST_GO_BOOTSTRAP_INSTALL_CMDS
- $(INSTALL) -D -m 0755 $(@D)/bin/go $(HOST_GO_BOOTSTRAP_ROOT)/bin/go
- $(INSTALL) -D -m 0755 $(@D)/bin/gofmt $(HOST_GO_BOOTSTRAP_ROOT)/bin/gofmt
-
- cp -a $(@D)/lib $(HOST_GO_BOOTSTRAP_ROOT)/
- cp -a $(@D)/pkg $(HOST_GO_BOOTSTRAP_ROOT)/
-
- # There is a known issue which requires the go sources to be installed
- # https://golang.org/issue/2775
- cp -a $(@D)/src $(HOST_GO_BOOTSTRAP_ROOT)/
-endef
-
-$(eval $(host-generic-package))
diff --git a/package/go/Config.in.host b/package/go/Config.in.host
index ded02d3b3a..90a54f0da6 100644
--- a/package/go/Config.in.host
+++ b/package/go/Config.in.host
@@ -2,7 +2,7 @@
config BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
bool
default y
- depends on BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS
+ depends on BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE2_ARCH_SUPPORTS
depends on (BR2_arm && BR2_TOOLCHAIN_SUPPORTS_PIE) || BR2_aarch64 \
|| BR2_i386 || BR2_x86_64 || BR2_powerpc64le \
|| BR2_mips64 || BR2_mips64el || BR2_riscv || BR2_s390x
@@ -28,4 +28,4 @@ config BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS
config BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS
bool
default y
- depends on BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS
+ depends on BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE2_ARCH_SUPPORTS
diff --git a/package/go/go.mk b/package/go/go.mk
index 37554ddf86..bcf9677133 100644
--- a/package/go/go.mk
+++ b/package/go/go.mk
@@ -12,7 +12,7 @@ GO_LICENSE = BSD-3-Clause
GO_LICENSE_FILES = LICENSE
GO_CPE_ID_VENDOR = golang
-HOST_GO_DEPENDENCIES = host-go-bootstrap
+HOST_GO_DEPENDENCIES = host-go-bootstrap-stage2
HOST_GO_GOPATH = $(HOST_DIR)/share/go-path
HOST_GO_HOST_CACHE = $(HOST_DIR)/share/host-go-cache
HOST_GO_ROOT = $(HOST_DIR)/lib/go
@@ -126,7 +126,7 @@ HOST_GO_HOST_ENV = \
HOST_GO_MAKE_ENV = \
GO111MODULE=off \
GOCACHE=$(HOST_GO_HOST_CACHE) \
- GOROOT_BOOTSTRAP=$(HOST_GO_BOOTSTRAP_ROOT) \
+ GOROOT_BOOTSTRAP=$(HOST_GO_BOOTSTRAP_STAGE2_ROOT) \
GOROOT_FINAL=$(HOST_GO_ROOT) \
GOROOT="$(@D)" \
GOBIN="$(@D)/bin" \
--
2.40.1
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH v5 2/4] package/go: adjust comments
2023-05-03 2:23 [Buildroot] [PATCH v5 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.9 Christian Stewart
@ 2023-05-03 2:23 ` Christian Stewart
2023-05-03 2:23 ` [Buildroot] [PATCH v5 3/4] package/go: bump to version 1.20.4 Christian Stewart
2023-05-17 3:08 ` [Buildroot] [PATCH v5 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.9 Christian Stewart via buildroot
2 siblings, 0 replies; 4+ messages in thread
From: Christian Stewart @ 2023-05-03 2:23 UTC (permalink / raw)
To: buildroot
Cc: Christian Stewart, Yann E . MORIN, Thomas Petazzoni, Anisse Astier
Adjust comments in the Go package to improve clarity:
Config.in.host:
- Add comment mentioning list of supported architectures.
go.mk:
- Improve formatting of comment about NOCCACHE
- Reword comment re: copying src/ to host/
- the previously linked issue is not relevant.
- instead: mention that src/ is needed for stdlib.
- Adjust comment re: adjusting file timestamps.
- mention this is needed to avoid rebuilding stdlib
Signed-off-by: Christian Stewart <christian@aperture.us>
---
v3 -> v4:
- move these comments to a separate patch
- Thanks Thomas for the review.
Signed-off-by: Christian Stewart <christian@aperture.us>
---
package/go/Config.in.host | 2 ++
package/go/go.mk | 11 +++++------
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/package/go/Config.in.host b/package/go/Config.in.host
index 90a54f0da6..b87b862cec 100644
--- a/package/go/Config.in.host
+++ b/package/go/Config.in.host
@@ -3,6 +3,8 @@ config BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
bool
default y
depends on BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE2_ARCH_SUPPORTS
+ # See https://go.dev/doc/install/source#environment
+ # See src/go/build/syslist.go for the list of supported architectures
depends on (BR2_arm && BR2_TOOLCHAIN_SUPPORTS_PIE) || BR2_aarch64 \
|| BR2_i386 || BR2_x86_64 || BR2_powerpc64le \
|| BR2_mips64 || BR2_mips64el || BR2_riscv || BR2_s390x
diff --git a/package/go/go.mk b/package/go/go.mk
index bcf9677133..c8ad1a8dc6 100644
--- a/package/go/go.mk
+++ b/package/go/go.mk
@@ -121,8 +121,8 @@ HOST_GO_HOST_ENV = \
CGO_CXXFLAGS="$(HOST_CXXFLAGS)" \
CGO_LDFLAGS="$(HOST_LDFLAGS)"
-# The go build system is not compatible with ccache, so use
-# HOSTCC_NOCCACHE. See https://github.com/golang/go/issues/11685.
+# The go build system is not compatible with ccache, so use HOSTCC_NOCCACHE.
+# See https://github.com/golang/go/issues/11685.
HOST_GO_MAKE_ENV = \
GO111MODULE=off \
GOCACHE=$(HOST_GO_HOST_CACHE) \
@@ -154,12 +154,11 @@ define HOST_GO_INSTALL_CMDS
cp -a $(@D)/pkg/include $(@D)/pkg/linux_* $(HOST_GO_ROOT)/pkg/
cp -a $(@D)/pkg/tool $(HOST_GO_ROOT)/pkg/
- # There is a known issue which requires the go sources to be installed
- # https://golang.org/issue/2775
+ # The Go sources must be installed to the host/ tree for the Go stdlib.
cp -a $(@D)/src $(HOST_GO_ROOT)/
- # Set all file timestamps to prevent the go compiler from rebuilding any
- # built in packages when programs are built.
+ # Set file timestamps to prevent the Go compiler from rebuilding the stdlib
+ # when compiling other programs.
find $(HOST_GO_ROOT) -type f -exec touch -r $(@D)/bin/go {} \;
endef
--
2.40.1
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH v5 3/4] package/go: bump to version 1.20.4
2023-05-03 2:23 [Buildroot] [PATCH v5 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.9 Christian Stewart
2023-05-03 2:23 ` [Buildroot] [PATCH v5 2/4] package/go: adjust comments Christian Stewart
@ 2023-05-03 2:23 ` Christian Stewart
2023-05-17 3:08 ` [Buildroot] [PATCH v5 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.9 Christian Stewart via buildroot
2 siblings, 0 replies; 4+ messages in thread
From: Christian Stewart @ 2023-05-03 2:23 UTC (permalink / raw)
To: buildroot
Cc: Christian Stewart, Yann E . MORIN, Thomas Petazzoni, Anisse Astier
The latest Go release, version 1.20, arrives six months after Go 1.19. Most of
its changes are in the implementation of the toolchain, runtime, and libraries.
https://go.dev/doc/go1.20
https://go.dev/doc/devel/release#go1.20.4
https://github.com/golang/go/issues?q=milestone%3AGo1.20.4+label%3ACherryPickApproved
Signed-off-by: Christian Stewart <christian@aperture.us>
---
v1 -> v2:
- drop unnecessary change to config.in.host
v2 -> v3:
- bump to go 1.20.1
- add note about fixed cves
v3 -> v4:
- rebase on updated go1.19.x version
- remove notes about cves (fixed in previous 1.19.x version)
- update to go 1.20.2
v4 -> v5:
- security update to go 1.20.4
Signed-off-by: Christian Stewart <christian@aperture.us>
---
...03-runtime-support-riscv64-SV57-mode.patch | 65 -------------------
package/go/go.hash | 2 +-
package/go/go.mk | 4 +-
3 files changed, 3 insertions(+), 68 deletions(-)
delete mode 100644 package/go/0003-runtime-support-riscv64-SV57-mode.patch
diff --git a/package/go/0003-runtime-support-riscv64-SV57-mode.patch b/package/go/0003-runtime-support-riscv64-SV57-mode.patch
deleted file mode 100644
index f51c2ca093..0000000000
--- a/package/go/0003-runtime-support-riscv64-SV57-mode.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 6618c7af436488fa12018cdcd31eeedb3a698745 Mon Sep 17 00:00:00 2001
-From: Dmitry Vyukov <dvyukov@google.com>
-Date: Fri, 27 May 2022 18:55:35 +0200
-Subject: [PATCH] runtime: support riscv64 SV57 mode
-
-Riscv64 has SV57 mode when user-space VA is 56 bits.
-Linux kernel recently got support for this mode and Go binaries started crashing as:
-
-runtime: lfstack.push invalid packing: node=0xffffff5908a940 cnt=0x1
-packed=0xffff5908a9400001 -> node=0xffff5908a940
-
-Adjust lfstack code to use only 8 top bits of pointers on riscv64.
-
-For context see:
-https://groups.google.com/g/syzkaller-bugs/c/lU0GQTZoNQQ/m/O_c3vmE3AAAJ
-
-Update #54104
-
-Change-Id: Ib5d3d6a79c0c6eddf11618d73fcc8bc1832a9c25
-Signed-off-by: Christian Stewart <christian@paral.in>
----
-
-Upstream: https://go-review.googlesource.com/c/go/+/409055/4
----
- src/runtime/lfstack_64bit.go | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/src/runtime/lfstack_64bit.go b/src/runtime/lfstack_64bit.go
-index 154130cf63..39fa647b9e 100644
---- a/src/runtime/lfstack_64bit.go
-+++ b/src/runtime/lfstack_64bit.go
-@@ -36,12 +36,21 @@ const (
- // We use one bit to distinguish between the two ranges.
- aixAddrBits = 57
- aixCntBits = 64 - aixAddrBits + 3
-+
-+ // Riscv64 SV57 mode gives 56 bits of userspace VA.
-+ // lfstack code supports it, but broader support for SV57 mode is incomplete,
-+ // and there may be other issues (see #54104).
-+ riscv64AddrBits = 56
-+ riscv64CntBits = 64 - riscv64AddrBits + 3
- )
-
- func lfstackPack(node *lfnode, cnt uintptr) uint64 {
- if GOARCH == "ppc64" && GOOS == "aix" {
- return uint64(uintptr(unsafe.Pointer(node)))<<(64-aixAddrBits) | uint64(cnt&(1<<aixCntBits-1))
- }
-+ if GOARCH == "riscv64" {
-+ return uint64(uintptr(unsafe.Pointer(node)))<<(64-riscv64AddrBits) | uint64(cnt&(1<<riscv64CntBits-1))
-+ }
- return uint64(uintptr(unsafe.Pointer(node)))<<(64-addrBits) | uint64(cnt&(1<<cntBits-1))
- }
-
-@@ -54,5 +63,8 @@ func lfstackUnpack(val uint64) *lfnode {
- if GOARCH == "ppc64" && GOOS == "aix" {
- return (*lfnode)(unsafe.Pointer(uintptr((val >> aixCntBits << 3) | 0xa<<56)))
- }
-+ if GOARCH == "riscv64" {
-+ return (*lfnode)(unsafe.Pointer(uintptr(val >> riscv64CntBits << 3)))
-+ }
- return (*lfnode)(unsafe.Pointer(uintptr(val >> cntBits << 3)))
- }
---
-2.35.1
-
diff --git a/package/go/go.hash b/package/go/go.hash
index 5488ed9710..3167ccc523 100644
--- a/package/go/go.hash
+++ b/package/go/go.hash
@@ -1,3 +1,3 @@
# From https://go.dev/dl
-sha256 1d7a67929dccafeaf8a29e55985bc2b789e0499cb1a17100039f084e3238da2f go1.19.8.src.tar.gz
+sha256 9f34ace128764b7a3a4b238b805856cc1b2184304df9e5690825b0710f4202d6 go1.20.4.src.tar.gz
sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 LICENSE
diff --git a/package/go/go.mk b/package/go/go.mk
index c8ad1a8dc6..c1c088a81d 100644
--- a/package/go/go.mk
+++ b/package/go/go.mk
@@ -4,7 +4,7 @@
#
################################################################################
-GO_VERSION = 1.19.8
+GO_VERSION = 1.20.4
GO_SITE = https://storage.googleapis.com/golang
GO_SOURCE = go$(GO_VERSION).src.tar.gz
@@ -151,7 +151,7 @@ define HOST_GO_INSTALL_CMDS
cp -a $(@D)/lib $(HOST_GO_ROOT)/
mkdir -p $(HOST_GO_ROOT)/pkg
- cp -a $(@D)/pkg/include $(@D)/pkg/linux_* $(HOST_GO_ROOT)/pkg/
+ cp -a $(@D)/pkg/include $(HOST_GO_ROOT)/pkg/
cp -a $(@D)/pkg/tool $(HOST_GO_ROOT)/pkg/
# The Go sources must be installed to the host/ tree for the Go stdlib.
--
2.40.1
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Buildroot] [PATCH v5 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.9
2023-05-03 2:23 [Buildroot] [PATCH v5 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.9 Christian Stewart
2023-05-03 2:23 ` [Buildroot] [PATCH v5 2/4] package/go: adjust comments Christian Stewart
2023-05-03 2:23 ` [Buildroot] [PATCH v5 3/4] package/go: bump to version 1.20.4 Christian Stewart
@ 2023-05-17 3:08 ` Christian Stewart via buildroot
2 siblings, 0 replies; 4+ messages in thread
From: Christian Stewart via buildroot @ 2023-05-17 3:08 UTC (permalink / raw)
To: buildroot; +Cc: Yann E . MORIN, Thomas Petazzoni, Anisse Astier
Hi all,
On Tue, May 2, 2023 at 7:23 PM Christian Stewart <christian@aperture.us> wrote:
> Go 1.20 requires a minimum version of go 1.17.13 to bootstrap.
>
> https://go.dev/doc/go1.20#bootstrap
>
> As Go 1.4 was the previous version that could be compiled with C, there is now
> no way to bootstrap go with a C compiler, unless we use a two-stage bootstrap:
>
> - build host-go-bootstrap-1.4-20170531
> - build host-go-bootstrap-1.19.9 with host-go-bootstrap-1.4-20170531
> - build host-go-1.20 with host-go-bootstrap-1.19.9
>
> This is implemented in this commit first, before upgrading host-go to 1.20.
>
> Note: the .patch files from package/go version 1.19.x are not necessary for
> package/go-bootstrap-stage2 and have not been included there.
>
> Previous discussion of possible alternatives:
>
> https://lore.kernel.org/all/CA+h8R2rtcynkCBsz=_9yANOEguyPCOcQDj8_ns+cv8RS8+8t9A@mail.gmail.com/
> https://lore.kernel.org/all/20220525234312.643dfc03@windsurf/T/
>
> Signed-off-by: Christian Stewart <christian@aperture.us>
>
> ---
>
> v1 -> v2:
>
> - fix indentation of GOROOT_BOOTSTRAP in stage2 MAKE_ENV
> - adjust commit description
> - remove duplicate MAKE_ENV declaration line
> - reorder depends on lines in config.in.host
>
> v3 -> v4:
>
> - Fixed typo compatable -> compatible
> - Dropped dependency on toolchain in go-bootstrap-stage1
> - Dropped updating sources timestamps in go-bootstrap-stage{1,2}
> - Update go-bootstrap-stage2 to 1.19.7
> - Drop these comments and move to separate patch:
> - Fix typo in comments.
> - Adjusted comment built in -> built-in.
> - Adjust comments relating to copying src/ to host/
> - Dropped outdated comment referring to issue 2775.
> - Thanks Thomas for the review.
>
> v4 -> v5:
>
> - update stage2 to go1.19.9
Is anything else needed to merge this series?
All of the patch comments have been addressed, and I've been using
this in production for a few months.
Best regards,
Christian Stewart
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-05-17 3:08 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-03 2:23 [Buildroot] [PATCH v5 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.9 Christian Stewart
2023-05-03 2:23 ` [Buildroot] [PATCH v5 2/4] package/go: adjust comments Christian Stewart
2023-05-03 2:23 ` [Buildroot] [PATCH v5 3/4] package/go: bump to version 1.20.4 Christian Stewart
2023-05-17 3:08 ` [Buildroot] [PATCH v5 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.9 Christian Stewart via buildroot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.