[Buildroot] [PATCH 1/1] package/go-native: add a new download only package for go compilers

Charles Hardin ckhardin at gmail.com
Fri Jul 7 18:51:06 UTC 2023


The go-native is mainly for the aarch64 support since that was
added after the go-bootstrap written in C was dropped. So, to
get a cross compiler for go a host/native compiler needs to be
available to generate the setup for the needed target. This is
using the same go version as the expected cross-compiler to
keep the packages in sync. A specific version could be used.

Signed-off-by: Charles Hardin <ckhardin at gmail.com>
---
 package/Config.in.host           |  1 +
 package/go-native/Config.in.host | 12 ++++++++
 package/go-native/go-native.hash |  5 ++++
 package/go-native/go-native.mk   | 48 ++++++++++++++++++++++++++++++++
 package/go/Config.in.host        |  6 ++--
 package/go/go.mk                 | 12 +++++++-
 6 files changed, 81 insertions(+), 3 deletions(-)
 create mode 100644 package/go-native/Config.in.host
 create mode 100644 package/go-native/go-native.hash
 create mode 100644 package/go-native/go-native.mk

diff --git a/package/Config.in.host b/package/Config.in.host
index dcadbfdfc1..d7932f048b 100644
--- a/package/Config.in.host
+++ b/package/Config.in.host
@@ -41,6 +41,7 @@ menu "Host utilities"
 	source "package/gnupg/Config.in.host"
 	source "package/go/Config.in.host"
 	source "package/go-bootstrap/Config.in.host"
+	source "package/go-native/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-native/Config.in.host b/package/go-native/Config.in.host
new file mode 100644
index 0000000000..7e978e02b5
--- /dev/null
+++ b/package/go-native/Config.in.host
@@ -0,0 +1,12 @@
+config BR2_PACKAGE_HOST_GO_NATIVE_ARCH_SUPPORTS
+	bool
+	# See https://go.dev/dl/ for supported architecture downloads
+	default y if BR2_HOSTARCH = "x86"
+	default y if BR2_HOSTARCH = "x86_64"
+	default y if BR2_HOSTARCH = "arm"
+	default y if BR2_HOSTARCH = "aarch64"
+
+config BR2_PACKAGE_HOST_GO_NATIVE
+	bool "host go-native"
+	depends on BR2_PACKAGE_HOST_GO_NATIVE_ARCH_SUPPORTS
+	default y if !BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS
diff --git a/package/go-native/go-native.hash b/package/go-native/go-native.hash
new file mode 100644
index 0000000000..3af2f51abc
--- /dev/null
+++ b/package/go-native/go-native.hash
@@ -0,0 +1,5 @@
+# From https://go.dev/dl/
+sha256  45a34313664d66087d49b46ca63a3ecf292f56e9e63bd439829b5eaf0270586d  go1.19.10.linux-386.tar.gz
+sha256  8b045a483d3895c6edba2e90a9189262876190dbbd21756870cdd63821810677  go1.19.10.linux-amd64.tar.gz
+sha256  df98698821211c819e8b2420c77a0f802d989e377718578a31b1f91f6be2c5b4  go1.19.10.linux-arm64.tar.gz
+sha256  937f885c35f191be4c6a618868ae0dbbb15b0213925a1a104d122eba02622356  go1.19.10.linux-armv6l.tar.gz
diff --git a/package/go-native/go-native.mk b/package/go-native/go-native.mk
new file mode 100644
index 0000000000..4b541cce73
--- /dev/null
+++ b/package/go-native/go-native.mk
@@ -0,0 +1,48 @@
+################################################################################
+#
+# go-native
+#
+################################################################################
+
+# Fixup the host arch as needed
+ifeq ($(HOSTARCH),x86)
+GO_NATIVE_HOST_ARCH = 386
+else ifeq ($(HOSTARCH),x86_64)
+GO_NATIVE_HOST_ARCH = amd64
+else ifeq ($(HOSTARCH),arm)
+GO_NATIVE_HOST_ARCH = armv6l
+else ifeq ($(HOSTARCH),aarch64)
+GO_NATIVE_HOST_ARCH = arm64
+else
+GO_NATIVE_HOST_ARCH = $(HOSTARCH)
+endif
+
+# Download the native tools from as the same go version from golang
+GO_NATIVE_VERSION = $(GO_VERSION)
+GO_NATIVE_SITE = https://go.dev/dl
+GO_NATIVE_LICENSE = BSD-3-Clause
+GO_NATIVE_LICENSE_FILES = LICENSE
+
+HOST_GO_NATIVE_SOURCE = go$(GO_NATIVE_VERSION).linux-$(GO_NATIVE_HOST_ARCH).tar.gz
+
+# To build programs that need cgo support the toolchain needs to be
+# available, so the toolchain is not needed to build host-go-native
+# itself, but needed by other packages that depend on
+# host-go-native.
+HOST_GO_NATIVE_DEPENDENCIES = toolchain
+
+HOST_GO_NATIVE_ROOT = $(HOST_DIR)/lib/go-$(GO_NATIVE_VERSION)
+
+define HOST_GO_NATIVE_INSTALL_CMDS
+	$(INSTALL) -D -m 0755 $(@D)/bin/go $(HOST_GO_NATIVE_ROOT)/bin/go
+	$(INSTALL) -D -m 0755 $(@D)/bin/gofmt $(HOST_GO_NATIVE_ROOT)/bin/gofmt
+
+	cp -a $(@D)/lib $(HOST_GO_NATIVE_ROOT)/
+	cp -a $(@D)/pkg $(HOST_GO_NATIVE_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_NATIVE_ROOT)/
+endef
+
+$(eval $(host-generic-package))
diff --git a/package/go/Config.in.host b/package/go/Config.in.host
index ded02d3b3a..4dbbe9a221 100644
--- a/package/go/Config.in.host
+++ b/package/go/Config.in.host
@@ -2,7 +2,8 @@
 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_ARCH_SUPPORTS \
+		|| BR2_PACKAGE_HOST_GO_NATIVE_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 +29,5 @@ 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_ARCH_SUPPORTS \
+		|| BR2_PACKAGE_HOST_GO_NATIVE_ARCH_SUPPORTS
diff --git a/package/go/go.mk b/package/go/go.mk
index 545d2117b7..af2e3b2f74 100644
--- a/package/go/go.mk
+++ b/package/go/go.mk
@@ -12,7 +12,11 @@ GO_LICENSE = BSD-3-Clause
 GO_LICENSE_FILES = LICENSE
 GO_CPE_ID_VENDOR = golang
 
+ifeq ($(BR2_PACKAGE_HOST_GO_NATIVE),y)
+HOST_GO_DEPENDENCIES = host-go-native
+else
 HOST_GO_DEPENDENCIES = host-go-bootstrap
+endif
 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
@@ -123,10 +127,16 @@ HOST_GO_HOST_ENV = \
 
 # The go build system is not compatible with ccache, so use
 # HOSTCC_NOCCACHE.  See https://github.com/golang/go/issues/11685.
+ifeq ($(BR2_PACKAGE_HOST_GO_NATIVE),y)
 HOST_GO_MAKE_ENV = \
+	GOROOT_BOOTSTRAP=$(HOST_GO_NATIVE_ROOT)
+else
+HOST_GO_MAKE_ENV = \
+	GOROOT_BOOTSTRAP=$(HOST_GO_BOOTSTRAP_ROOT)
+endif
+HOST_GO_MAKE_ENV += \
 	GO111MODULE=off \
 	GOCACHE=$(HOST_GO_HOST_CACHE) \
-	GOROOT_BOOTSTRAP=$(HOST_GO_BOOTSTRAP_ROOT) \
 	GOROOT_FINAL=$(HOST_GO_ROOT) \
 	GOROOT="$(@D)" \
 	GOBIN="$(@D)/bin" \
-- 
2.39.2 (Apple Git-143)




More information about the buildroot mailing list