* [Buildroot] [PATCH v7 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.10
@ 2023-07-11 22:08 Christian Stewart via buildroot
2023-07-11 22:08 ` [Buildroot] [PATCH v7 2/4] package/go: adjust comments Christian Stewart via buildroot
` (3 more replies)
0 siblings, 4 replies; 12+ messages in thread
From: Christian Stewart via buildroot @ 2023-07-11 22:08 UTC (permalink / raw)
To: buildroot; +Cc: Christian Stewart, Yann E . MORIN, Thomas Petazzoni
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.10 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
v5 -> v6:
- update stage2 to go1.19.10
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 0918e9f721..4a0a6844b7 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -558,6 +558,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..874737ea2d
--- /dev/null
+++ b/package/go-bootstrap-stage2/go-bootstrap-stage2.hash
@@ -0,0 +1,3 @@
+# From https://go.dev/dl
+sha256 13755bcce529747d5f2930dee034730c86d02bd3e521ab3e2bbede548d3b953f go1.19.10.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..d0ee86b84e
--- /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.10
+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 545d2117b7..a96c6ab5dd 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.41.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v7 2/4] package/go: adjust comments
2023-07-11 22:08 [Buildroot] [PATCH v7 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.10 Christian Stewart via buildroot
@ 2023-07-11 22:08 ` Christian Stewart via buildroot
2023-07-22 21:09 ` Thomas Petazzoni via buildroot
2023-07-11 22:08 ` [Buildroot] [PATCH v7 3/4] package/go: bump to version 1.20.6 Christian Stewart via buildroot
` (2 subsequent siblings)
3 siblings, 1 reply; 12+ messages in thread
From: Christian Stewart via buildroot @ 2023-07-11 22:08 UTC (permalink / raw)
To: buildroot; +Cc: Christian Stewart, Yann E . MORIN, Thomas Petazzoni
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 a96c6ab5dd..66af25db45 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.41.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v7 3/4] package/go: bump to version 1.20.6
2023-07-11 22:08 [Buildroot] [PATCH v7 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.10 Christian Stewart via buildroot
2023-07-11 22:08 ` [Buildroot] [PATCH v7 2/4] package/go: adjust comments Christian Stewart via buildroot
@ 2023-07-11 22:08 ` Christian Stewart via buildroot
2023-07-22 21:09 ` Thomas Petazzoni via buildroot
2023-07-11 22:08 ` [Buildroot] [PATCH v7 4/4] package/go: use host compiler when go-bootstrap unsupported Christian Stewart via buildroot
2023-07-22 21:08 ` [Buildroot] [PATCH v7 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.10 Thomas Petazzoni via buildroot
3 siblings, 1 reply; 12+ messages in thread
From: Christian Stewart via buildroot @ 2023-07-11 22:08 UTC (permalink / raw)
To: buildroot; +Cc: Christian Stewart, Yann E . MORIN, Thomas Petazzoni
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.6
https://github.com/golang/go/issues?q=milestone%3AGo1.20.6+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
v5 -> v6:
- security update to go 1.20.5
v6 -> v7:
- security update to go 1.20.6
- CVE-2023-29406
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 874737ea2d..135d1ad37b 100644
--- a/package/go/go.hash
+++ b/package/go/go.hash
@@ -1,3 +1,3 @@
# From https://go.dev/dl
-sha256 13755bcce529747d5f2930dee034730c86d02bd3e521ab3e2bbede548d3b953f go1.19.10.src.tar.gz
+sha256 62ee5bc6fb55b8bae8f705e0cb8df86d6453626b4ecf93279e2867092e0b7f70 go1.20.6.src.tar.gz
sha256 2d36597f7117c38b006835ae7f537487207d8ec407aa9d9980794b2030cbc067 LICENSE
diff --git a/package/go/go.mk b/package/go/go.mk
index 66af25db45..50e3e85cf5 100644
--- a/package/go/go.mk
+++ b/package/go/go.mk
@@ -4,7 +4,7 @@
#
################################################################################
-GO_VERSION = 1.19.10
+GO_VERSION = 1.20.6
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.41.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Buildroot] [PATCH v7 4/4] package/go: use host compiler when go-bootstrap unsupported
2023-07-11 22:08 [Buildroot] [PATCH v7 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.10 Christian Stewart via buildroot
2023-07-11 22:08 ` [Buildroot] [PATCH v7 2/4] package/go: adjust comments Christian Stewart via buildroot
2023-07-11 22:08 ` [Buildroot] [PATCH v7 3/4] package/go: bump to version 1.20.6 Christian Stewart via buildroot
@ 2023-07-11 22:08 ` Christian Stewart via buildroot
2023-07-22 21:13 ` Thomas Petazzoni via buildroot
2023-07-22 21:08 ` [Buildroot] [PATCH v7 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.10 Thomas Petazzoni via buildroot
3 siblings, 1 reply; 12+ messages in thread
From: Christian Stewart via buildroot @ 2023-07-11 22:08 UTC (permalink / raw)
To: buildroot; +Cc: Christian Stewart, Yann E . MORIN, Thomas Petazzoni
All Go compiler versions > 1.4.x (old) are written in Go, and require a existing
compiled Go version to use to build from source.
https://golang.org/doc/install/source#bootstrapFromSource
The process for "bootstrapping" the Go compiler in Buildroot is:
1. Compile a C/C++ cross-compiler (gcc) as the host toolchain.
2. Build go-bootstrap-stage1 (which is Go 1.4.x and written in C)
3. Build go-bootstrap-stage2 (which is Go 1.19.x and written in Go)
3. Build go 1.20 (written in Go) using go-bootstrap-stage2.
go-bootstrap-stage1 does not work on 64-bit arm. The Go 1.4.x bootstrap compiler
is compatible with x86, x86_64, and arm (32 bit) only.
This patch adds a fallback to require a host Go compiler to build host-go when
BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE2_ARCH_SUPPORTS is not set.
Signed-off-by: Christian Stewart <christian@aperture.us>
---
changes prior to inclusion in this series:
- thanks Thomas for the review & suggestions
- added NEEDS_HOST_GO boolean
- added dependency checks to support/dependencies/dependencies.sh
- removed unnecessary changes to go-bootstrap package
- add dependency on toolchain if Cgo is enabled
- updates for go1.20
- updates for go-bootstrap-stage{1,2}
changes from v1 -> v2:
- remove whitespace fix in bootstrap stage2
Signed-off-by: Christian Stewart <christian@aperture.us>
---
Config.in | 4 ++++
package/go/Config.in.host | 2 +-
package/go/go.mk | 14 ++++++++++++--
support/dependencies/dependencies.sh | 4 ++++
4 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/Config.in b/Config.in
index 0d7641633c..c70ce94d94 100644
--- a/Config.in
+++ b/Config.in
@@ -58,6 +58,10 @@ config BR2_HOST_GCC_AT_LEAST_9
# When adding new entries above, be sure to update
# the HOSTCC_MAX_VERSION variable in the Makefile.
+# Hidden boolean selected if bootstrapping Go w/ GCC is not supported.
+config BR2_NEEDS_HOST_GO
+ bool
+
# Hidden boolean selected by packages in need of Java in order to build
# (example: kodi)
config BR2_NEEDS_HOST_JAVA
diff --git a/package/go/Config.in.host b/package/go/Config.in.host
index b87b862cec..7f049ff1ae 100644
--- a/package/go/Config.in.host
+++ b/package/go/Config.in.host
@@ -30,4 +30,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_STAGE2_ARCH_SUPPORTS
+ select BR2_NEEDS_HOST_GO if !BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE2_ARCH_SUPPORTS
diff --git a/package/go/go.mk b/package/go/go.mk
index 50e3e85cf5..54b5d1fd97 100644
--- a/package/go/go.mk
+++ b/package/go/go.mk
@@ -12,7 +12,6 @@ GO_LICENSE = BSD-3-Clause
GO_LICENSE_FILES = LICENSE
GO_CPE_ID_VENDOR = golang
-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
@@ -109,6 +108,11 @@ else # !BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
HOST_GO_CGO_ENABLED = 1
endif # BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
+ifeq ($(HOST_GO_CGO_ENABLED),1)
+# For cgo support the toolchain needs to be available.
+HOST_GO_DEPENDENCIES += toolchain
+endif
+
# For the convenience of host golang packages
HOST_GO_HOST_ENV = \
$(HOST_GO_COMMON_ENV) \
@@ -126,7 +130,6 @@ HOST_GO_HOST_ENV = \
HOST_GO_MAKE_ENV = \
GO111MODULE=off \
GOCACHE=$(HOST_GO_HOST_CACHE) \
- GOROOT_BOOTSTRAP=$(HOST_GO_BOOTSTRAP_STAGE2_ROOT) \
GOROOT_FINAL=$(HOST_GO_ROOT) \
GOROOT="$(@D)" \
GOBIN="$(@D)/bin" \
@@ -136,6 +139,13 @@ HOST_GO_MAKE_ENV = \
CGO_ENABLED=$(HOST_GO_CGO_ENABLED) \
$(HOST_GO_CROSS_ENV)
+# Use the Go compiler bootstrapped by Buildroot if available.
+# Otherwise, use the host Go compiler.
+ifeq ($(BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE2_ARCH_SUPPORTS),y)
+HOST_GO_DEPENDENCIES += host-go-bootstrap-stage2
+HOST_GO_MAKE_ENV += GOROOT_BOOTSTRAP=$(HOST_GO_BOOTSTRAP_STAGE2_ROOT)
+endif
+
define HOST_GO_BUILD_CMDS
cd $(@D)/src && \
$(HOST_GO_MAKE_ENV) ./make.bash $(if $(VERBOSE),-v)
diff --git a/support/dependencies/dependencies.sh b/support/dependencies/dependencies.sh
index 58f44c8723..48ec3a2eb0 100755
--- a/support/dependencies/dependencies.sh
+++ b/support/dependencies/dependencies.sh
@@ -217,6 +217,10 @@ if grep -q ^BR2_NEEDS_HOST_UTF8_LOCALE=y $BR2_CONFIG ; then
fi
fi
+if grep -q ^BR2_NEEDS_HOST_GO=y $BR2_CONFIG ; then
+ check_prog_host "go"
+fi
+
if grep -q ^BR2_NEEDS_HOST_JAVA=y $BR2_CONFIG ; then
check_prog_host "java"
JAVA_GCJ=$(java -version 2>&1 | grep gcj)
--
2.41.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [Buildroot] [PATCH v7 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.10
2023-07-11 22:08 [Buildroot] [PATCH v7 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.10 Christian Stewart via buildroot
` (2 preceding siblings ...)
2023-07-11 22:08 ` [Buildroot] [PATCH v7 4/4] package/go: use host compiler when go-bootstrap unsupported Christian Stewart via buildroot
@ 2023-07-22 21:08 ` Thomas Petazzoni via buildroot
3 siblings, 0 replies; 12+ messages in thread
From: Thomas Petazzoni via buildroot @ 2023-07-22 21:08 UTC (permalink / raw)
To: Christian Stewart via buildroot; +Cc: Yann E . MORIN, Christian Stewart
Hello Christian,
On Tue, 11 Jul 2023 15:08:46 -0700
Christian Stewart via buildroot <buildroot@buildroot.org> wrote:
> +# The go build system is not compatable with ccache, so use HOSTCC_NOCCACHE.
^^^^^^^^^^ compatible
also, line was too long, so I rewrapped.
> +# The go build system is not compatible with ccache, so use HOSTCC_NOCCACHE.
Here as well.
Applied with those minor fixes.
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Buildroot] [PATCH v7 2/4] package/go: adjust comments
2023-07-11 22:08 ` [Buildroot] [PATCH v7 2/4] package/go: adjust comments Christian Stewart via buildroot
@ 2023-07-22 21:09 ` Thomas Petazzoni via buildroot
0 siblings, 0 replies; 12+ messages in thread
From: Thomas Petazzoni via buildroot @ 2023-07-22 21:09 UTC (permalink / raw)
To: Christian Stewart via buildroot; +Cc: Yann E . MORIN, Christian Stewart
On Tue, 11 Jul 2023 15:08:47 -0700
Christian Stewart via buildroot <buildroot@buildroot.org> wrote:
> -# 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.
I dropped this chunk, which isn't making any useful change, and
actually my text editor liked the previous wrapping better, so I left
it as-is.
Applied with this chunk reverted. Thanks!
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Buildroot] [PATCH v7 3/4] package/go: bump to version 1.20.6
2023-07-11 22:08 ` [Buildroot] [PATCH v7 3/4] package/go: bump to version 1.20.6 Christian Stewart via buildroot
@ 2023-07-22 21:09 ` Thomas Petazzoni via buildroot
0 siblings, 0 replies; 12+ messages in thread
From: Thomas Petazzoni via buildroot @ 2023-07-22 21:09 UTC (permalink / raw)
To: Christian Stewart via buildroot; +Cc: Yann E . MORIN, Christian Stewart
On Tue, 11 Jul 2023 15:08:48 -0700
Christian Stewart via buildroot <buildroot@buildroot.org> wrote:
> 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.6
> https://github.com/golang/go/issues?q=milestone%3AGo1.20.6+label%3ACherryPickApproved
>
> Signed-off-by: Christian Stewart <christian@aperture.us>
>
> ---
Applied to master after fixing the minor conflicts due to the bump of
go 1.19 that occurred in the mean time.
Thanks!
Thomas
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Buildroot] [PATCH v7 4/4] package/go: use host compiler when go-bootstrap unsupported
2023-07-11 22:08 ` [Buildroot] [PATCH v7 4/4] package/go: use host compiler when go-bootstrap unsupported Christian Stewart via buildroot
@ 2023-07-22 21:13 ` Thomas Petazzoni via buildroot
2023-07-22 22:01 ` Christian Stewart via buildroot
0 siblings, 1 reply; 12+ messages in thread
From: Thomas Petazzoni via buildroot @ 2023-07-22 21:13 UTC (permalink / raw)
To: Christian Stewart via buildroot; +Cc: Yann E . MORIN, Christian Stewart
Hello Christian,
On Tue, 11 Jul 2023 15:08:49 -0700
Christian Stewart via buildroot <buildroot@buildroot.org> wrote:
> All Go compiler versions > 1.4.x (old) are written in Go, and require a existing
> compiled Go version to use to build from source.
>
> https://golang.org/doc/install/source#bootstrapFromSource
>
> The process for "bootstrapping" the Go compiler in Buildroot is:
>
> 1. Compile a C/C++ cross-compiler (gcc) as the host toolchain.
> 2. Build go-bootstrap-stage1 (which is Go 1.4.x and written in C)
> 3. Build go-bootstrap-stage2 (which is Go 1.19.x and written in Go)
> 3. Build go 1.20 (written in Go) using go-bootstrap-stage2.
>
> go-bootstrap-stage1 does not work on 64-bit arm. The Go 1.4.x bootstrap compiler
> is compatible with x86, x86_64, and arm (32 bit) only.
>
> This patch adds a fallback to require a host Go compiler to build host-go when
> BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE2_ARCH_SUPPORTS is not set.
>
> Signed-off-by: Christian Stewart <christian@aperture.us>
I understand the need, but I'd like to explore other options, namely
using pre-compiled Go compilers, which we would also like to support in
order to have the ability to run "make legal-info", or build Go
packages without necessarily having to build a Go compiler from
scratch. Like what we do for Rust, where you can chose to either use a
pre-built Rust compiler, or build your own with Buildroot.
For Go, I think we could imagine two options:
(a) You use a pre-built Go compiler as a replacement for package/go.
This would work for architectures/configurations for which
pre-built Go compilers are available. We would then move package/go
as a virtual package, with package/go-src being the provider that
builds the Go compiler from source, and package/go-bin being the
provider that downloads/installs a pre-built Go compiler.
(b) You use a pre-built Go compiler as a replacement for
package/go-bootstrap-stage2, i.e you still build the final Go
compiler from source, but all the bootstrapping is skipped by using
a pre-built Go compiler for the host. Would this option also
resolve your use-case of building on ARM64? In other words, is
there a Go compiler available pre-built for ARM64?
Best regards,
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Buildroot] [PATCH v7 4/4] package/go: use host compiler when go-bootstrap unsupported
2023-07-22 21:13 ` Thomas Petazzoni via buildroot
@ 2023-07-22 22:01 ` Christian Stewart via buildroot
2023-07-22 22:28 ` Thomas Petazzoni via buildroot
0 siblings, 1 reply; 12+ messages in thread
From: Christian Stewart via buildroot @ 2023-07-22 22:01 UTC (permalink / raw)
To: Thomas Petazzoni; +Cc: Yann E . MORIN, Christian Stewart via buildroot
[-- Attachment #1.1: Type: text/plain, Size: 3829 bytes --]
Thomas,
On Sat, Jul 22, 2023, 2:13 PM Thomas Petazzoni <thomas.petazzoni@bootlin.com>
wrote:
> Hello Christian,
>
> On Tue, 11 Jul 2023 15:08:49 -0700
> Christian Stewart via buildroot <buildroot@buildroot.org> wrote:
>
> > All Go compiler versions > 1.4.x (old) are written in Go, and require a
> existing
> > compiled Go version to use to build from source.
> >
> > https://golang.org/doc/install/source#bootstrapFromSource
> >
> > The process for "bootstrapping" the Go compiler in Buildroot is:
> >
> > 1. Compile a C/C++ cross-compiler (gcc) as the host toolchain.
> > 2. Build go-bootstrap-stage1 (which is Go 1.4.x and written in C)
> > 3. Build go-bootstrap-stage2 (which is Go 1.19.x and written in Go)
> > 3. Build go 1.20 (written in Go) using go-bootstrap-stage2.
> >
> > go-bootstrap-stage1 does not work on 64-bit arm. The Go 1.4.x bootstrap
> compiler
> > is compatible with x86, x86_64, and arm (32 bit) only.
> >
> > This patch adds a fallback to require a host Go compiler to build
> host-go when
> > BR2_PACKAGE_HOST_GO_BOOTSTRAP_STAGE2_ARCH_SUPPORTS is not set.
> >
> > Signed-off-by: Christian Stewart <christian@aperture.us>
>
> I understand the need, but I'd like to explore other options, namely
> using pre-compiled Go compilers, which we would also like to support in
> order to have the ability to run "make legal-info", or build Go
> packages without necessarily having to build a Go compiler from
> scratch. Like what we do for Rust, where you can chose to either use a
> pre-built Rust compiler, or build your own with Buildroot.
>
The main difference is the Go compiler takes only a minute or so of build
time. Bootstrapping it is fast and produces reproducible results across any
of the architectures Buildroot supports, including those for which there
currently are not any binary Go releases.
Therefore I submit that it is always worth the extra build time to
bootstrap the Go compiler from source as part of the build as opposed to
using a precompiled binary. Also it is less maintenance overhead (updating
hashes for all the platforms) and as the one maintaining this process I
appreciate that.
Today we download an external toolchain but still depend on a gcc package
to be installed on the host as well. Depending on the host Go to be
installed or otherwise provided for the bootstrap process is a decent
approach for architectures that we can't bootstrap with the C compiler
alone.
I can see a way we could add an option to do the binary downloads but would
prefer to keep the logic to depend on the host compiler as a fallback to
use for bootstrapping as well.
This is fine for legal-info as the bootstrap process builds the compiler
with itself several times to ensure that only the version built from source
is used.
What do you think?
Thanks,
Christian
> For Go, I think we could imagine two options:
>
> (a) You use a pre-built Go compiler as a replacement for package/go.
> This would work for architectures/configurations for which
> pre-built Go compilers are available. We would then move package/go
> as a virtual package, with package/go-src being the provider that
> builds the Go compiler from source, and package/go-bin being the
> provider that downloads/installs a pre-built Go compiler.
>
> (b) You use a pre-built Go compiler as a replacement for
> package/go-bootstrap-stage2, i.e you still build the final Go
> compiler from source, but all the bootstrapping is skipped by using
> a pre-built Go compiler for the host. Would this option also
> resolve your use-case of building on ARM64? In other words, is
> there a Go compiler available pre-built for ARM64?
>
> Best regards,
>
> Thomas
> --
> Thomas Petazzoni, co-owner and CEO, Bootlin
> Embedded Linux and Kernel engineering and training
> https://bootlin.com
>
[-- Attachment #1.2: Type: text/html, Size: 5313 bytes --]
[-- Attachment #2: Type: text/plain, Size: 150 bytes --]
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Buildroot] [PATCH v7 4/4] package/go: use host compiler when go-bootstrap unsupported
2023-07-22 22:01 ` Christian Stewart via buildroot
@ 2023-07-22 22:28 ` Thomas Petazzoni via buildroot
2023-07-23 3:22 ` Christian Stewart via buildroot
0 siblings, 1 reply; 12+ messages in thread
From: Thomas Petazzoni via buildroot @ 2023-07-22 22:28 UTC (permalink / raw)
To: Christian Stewart; +Cc: Yann E . MORIN, Christian Stewart via buildroot
Hello Christian,
On Sat, 22 Jul 2023 15:01:05 -0700
Christian Stewart <christian@aperture.us> wrote:
> The main difference is the Go compiler takes only a minute or so of build
> time. Bootstrapping it is fast and produces reproducible results across any
> of the architectures Buildroot supports, including those for which there
> currently are not any binary Go releases.
>
> Therefore I submit that it is always worth the extra build time to
> bootstrap the Go compiler from source as part of the build as opposed to
> using a precompiled binary. Also it is less maintenance overhead (updating
> hashes for all the platforms) and as the one maintaining this process I
> appreciate that.
>
> Today we download an external toolchain but still depend on a gcc package
> to be installed on the host as well. Depending on the host Go to be
> installed or otherwise provided for the bootstrap process is a decent
> approach for architectures that we can't bootstrap with the C compiler
> alone.
>
> I can see a way we could add an option to do the binary downloads but would
> prefer to keep the logic to depend on the host compiler as a fallback to
> use for bootstrapping as well.
>
> This is fine for legal-info as the bootstrap process builds the compiler
> with itself several times to ensure that only the version built from source
> is used.
Thanks for your feedback. What I meant by "legal-info" probably was
misunderstood. I very commonly run "make <foo>-legal-info" after
merging a version bump of a package. For 99% of our packages, this is a
trivial operation: it downloads the new tarball, extracts it, and
checks the hashes. For golang-package, it is a non-trivial operation as
it requires building go-bootstrap-stage1, go-bootstrap-stage2 and go,
before the package can be downloaded and vendored using "go".
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Buildroot] [PATCH v7 4/4] package/go: use host compiler when go-bootstrap unsupported
2023-07-22 22:28 ` Thomas Petazzoni via buildroot
@ 2023-07-23 3:22 ` Christian Stewart via buildroot
2023-07-25 16:48 ` Thomas Petazzoni via buildroot
0 siblings, 1 reply; 12+ messages in thread
From: Christian Stewart via buildroot @ 2023-07-23 3:22 UTC (permalink / raw)
To: Thomas Petazzoni; +Cc: Yann E . MORIN, Christian Stewart via buildroot
[-- Attachment #1.1: Type: text/plain, Size: 2434 bytes --]
Thomas,
On Sat, Jul 22, 2023, 3:28 PM Thomas Petazzoni <thomas.petazzoni@bootlin.com>
wrote:
> Hello Christian,
>
> On Sat, 22 Jul 2023 15:01:05 -0700
> Christian Stewart <christian@aperture.us> wrote:
>
> > The main difference is the Go compiler takes only a minute or so of build
> > time. Bootstrapping it is fast and produces reproducible results across
> any
> > of the architectures Buildroot supports, including those for which there
> > currently are not any binary Go releases.
> >
> > Therefore I submit that it is always worth the extra build time to
> > bootstrap the Go compiler from source as part of the build as opposed to
> > using a precompiled binary. Also it is less maintenance overhead
> (updating
> > hashes for all the platforms) and as the one maintaining this process I
> > appreciate that.
> >
> > Today we download an external toolchain but still depend on a gcc package
> > to be installed on the host as well. Depending on the host Go to be
> > installed or otherwise provided for the bootstrap process is a decent
> > approach for architectures that we can't bootstrap with the C compiler
> > alone.
> >
> > I can see a way we could add an option to do the binary downloads but
> would
> > prefer to keep the logic to depend on the host compiler as a fallback to
> > use for bootstrapping as well.
> >
> > This is fine for legal-info as the bootstrap process builds the compiler
> > with itself several times to ensure that only the version built from
> source
> > is used.
>
> Thanks for your feedback. What I meant by "legal-info" probably was
> misunderstood. I very commonly run "make <foo>-legal-info" after
> merging a version bump of a package. For 99% of our packages, this is a
> trivial operation: it downloads the new tarball, extracts it, and
> checks the hashes. For golang-package, it is a non-trivial operation as
> it requires building go-bootstrap-stage1, go-bootstrap-stage2 and go,
> before the package can be downloaded and vendored using "go".
>
Okay, I understand your use case.
What if we do the following:
1. Merge this patch which enables using the host Go compiler on
architectures that aren't supported by host go bootstrap.
2. Author and merge another series which adds the binary version of
host-go, still falling back on #1 when neither the bootstrap nor the binary
download (external toolchain) is supported.
I am willing to work on #2 as well.
Best,
Christian
[-- Attachment #1.2: Type: text/html, Size: 3373 bytes --]
[-- Attachment #2: Type: text/plain, Size: 150 bytes --]
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [Buildroot] [PATCH v7 4/4] package/go: use host compiler when go-bootstrap unsupported
2023-07-23 3:22 ` Christian Stewart via buildroot
@ 2023-07-25 16:48 ` Thomas Petazzoni via buildroot
0 siblings, 0 replies; 12+ messages in thread
From: Thomas Petazzoni via buildroot @ 2023-07-25 16:48 UTC (permalink / raw)
To: Christian Stewart; +Cc: Yann E . MORIN, Christian Stewart via buildroot
On Sat, 22 Jul 2023 20:22:18 -0700
Christian Stewart <christian@aperture.us> wrote:
> What if we do the following:
>
> 1. Merge this patch which enables using the host Go compiler on
> architectures that aren't supported by host go bootstrap.
> 2. Author and merge another series which adds the binary version of
> host-go, still falling back on #1 when neither the bootstrap nor the binary
> download (external toolchain) is supported.
I think like we do for Rust, we want to give the user the choice of
using a Go compiler built from source, or a pre-compiled Go compiler.
Other than that, your plan looks OK to me!
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2023-07-25 16:48 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-11 22:08 [Buildroot] [PATCH v7 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.10 Christian Stewart via buildroot
2023-07-11 22:08 ` [Buildroot] [PATCH v7 2/4] package/go: adjust comments Christian Stewart via buildroot
2023-07-22 21:09 ` Thomas Petazzoni via buildroot
2023-07-11 22:08 ` [Buildroot] [PATCH v7 3/4] package/go: bump to version 1.20.6 Christian Stewart via buildroot
2023-07-22 21:09 ` Thomas Petazzoni via buildroot
2023-07-11 22:08 ` [Buildroot] [PATCH v7 4/4] package/go: use host compiler when go-bootstrap unsupported Christian Stewart via buildroot
2023-07-22 21:13 ` Thomas Petazzoni via buildroot
2023-07-22 22:01 ` Christian Stewart via buildroot
2023-07-22 22:28 ` Thomas Petazzoni via buildroot
2023-07-23 3:22 ` Christian Stewart via buildroot
2023-07-25 16:48 ` Thomas Petazzoni via buildroot
2023-07-22 21:08 ` [Buildroot] [PATCH v7 1/4] package/go-bootstrap: split into two stages: go1.4 and go1.19.10 Thomas Petazzoni via buildroot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox