golang: split bootstrap into a separate package
authorGeorge Sapkin <redacted>
Thu, 1 Jan 2026 14:19:55 +0000 (16:19 +0200)
committerGeorge Sapkin <redacted>
Sun, 25 Jan 2026 17:23:45 +0000 (19:23 +0200)
Split bootstrap into a new package to enable multiple versions of go to
reuse the same bootstrap.

Add more source mirrors.

Link: https://github.com/openwrt/packages/pull/28309
Signed-off-by: George Sapkin <redacted>
lang/golang/Config.in [moved from lang/golang/golang/Config.in with 100% similarity]
lang/golang/go-gcc-helper [moved from lang/golang/golang/files/go-gcc-helper with 100% similarity]
lang/golang/golang-bootstrap/Makefile [new file with mode: 0644]
lang/golang/golang-compiler.mk
lang/golang/golang/Makefile

diff --git a/lang/golang/golang-bootstrap/Makefile b/lang/golang/golang-bootstrap/Makefile
new file mode 100644 (file)
index 0000000..8667777
--- /dev/null
@@ -0,0 +1,269 @@
+#
+# Copyright (C) 2018-2023, Jeffery To
+# Copyright (C) 2025-2026, George Sapkin
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+include $(TOPDIR)/rules.mk
+
+GO_VERSION_MAJOR_MINOR:=1.22
+GO_VERSION_PATCH:=12
+PKG_HASH:=012a7e1f37f362c0918c1dfa3334458ac2da1628c4b9cf4d9ca02db986e17d71
+
+PKG_NAME:=golang-bootstrap
+PKG_VERSION:=$(GO_VERSION_MAJOR_MINOR)$(if $(GO_VERSION_PATCH),.$(GO_VERSION_PATCH))
+PKG_RELEASE:=1
+
+GO_SOURCE_URLS:=https://go.dev/dl/ \
+                https://dl.google.com/go/ \
+                https://golang.google.cn/dl/ \
+                https://mirrors.nju.edu.cn/golang/ \
+                https://mirrors.ustc.edu.cn/golang/
+
+PKG_SOURCE:=go$(PKG_VERSION).src.tar.gz
+PKG_SOURCE_URL:=$(GO_SOURCE_URLS)
+
+PKG_MAINTAINER:=George Sapkin <george@sapk.in>
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=LICENSE
+PKG_CPE_ID:=cpe:/a:golang:go
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/go-$(PKG_VERSION)
+PKG_BUILD_PARALLEL:=1
+PKG_BUILD_FLAGS:=no-mips16
+
+PKG_HOST_ONLY:=1
+
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/go-$(PKG_VERSION)
+HOST_BUILD_PARALLEL:=1
+
+HOST_GO_PREFIX:=$(STAGING_DIR_HOSTPKG)
+HOST_GO_VERSION_ID:=bootstrap
+HOST_GO_ROOT:=$(HOST_GO_PREFIX)/lib/go-$(HOST_GO_VERSION_ID)
+
+HOST_GO_VALID_OS_ARCH:= \
+  android_386  android_amd64  android_arm  android_arm64 \
+  freebsd_386  freebsd_amd64  freebsd_arm  freebsd_arm64 \
+  linux_386    linux_amd64    linux_arm    linux_arm64 \
+  openbsd_386  openbsd_amd64  openbsd_arm  openbsd_arm64 \
+  netbsd_386   netbsd_amd64   netbsd_arm   netbsd_arm64 \
+  windows_386  windows_amd64  windows_arm  windows_arm64 \
+  \
+  plan9_386    plan9_amd64    plan9_arm \
+  \
+  darwin_amd64 darwin_arm64 \
+  ios_amd64    ios_arm64 \
+  \
+  dragonfly_amd64 \
+  illumos_amd64 \
+  solaris_amd64 \
+  \
+  aix_ppc64 \
+  js_wasm \
+  wasip1_wasm \
+  \
+  freebsd_riscv64 \
+  openbsd_riscv64 \
+  \
+  linux_ppc64 linux_ppc64le \
+  linux_mips linux_mipsle linux_mips64 linux_mips64le \
+  linux_loong64 linux_riscv64 linux_s390x \
+  \
+  openbsd_mips64
+
+BOOTSTRAP_SOURCE:=go1.4-bootstrap-20171003.tar.gz
+BOOTSTRAP_SOURCE_URL:=$(GO_SOURCE_URLS)
+BOOTSTRAP_HASH:=f4ff5b5eb3a3cae1c993723f3eab519c5bae18866b5e5f96fe1102f0cb5c3e52
+
+BOOTSTRAP_BUILD_DIR:=$(HOST_BUILD_DIR)/.go_bootstrap
+
+BOOTSTRAP_GO_VALID_OS_ARCH:= \
+  darwin_386     darwin_amd64 \
+  dragonfly_386  dragonfly_amd64 \
+  freebsd_386    freebsd_amd64    freebsd_arm \
+  linux_386      linux_amd64      linux_arm \
+  netbsd_386     netbsd_amd64     netbsd_arm \
+  openbsd_386    openbsd_amd64 \
+  plan9_386      plan9_amd64 \
+                 solaris_amd64 \
+  windows_386    windows_amd64
+
+BOOTSTRAP_1_17_SOURCE:=go1.17.13.src.tar.gz
+BOOTSTRAP_1_17_SOURCE_URL:=$(GO_SOURCE_URLS)
+BOOTSTRAP_1_17_HASH:=a1a48b23afb206f95e7bbaa9b898d965f90826f6f1d1fc0c1d784ada0cd300fd
+
+BOOTSTRAP_1_17_BUILD_DIR:=$(HOST_BUILD_DIR)/.go_bootstrap_1.17
+
+BOOTSTRAP_1_20_SOURCE:=go1.20.14.src.tar.gz
+BOOTSTRAP_1_20_SOURCE_URL:=$(GO_SOURCE_URLS)
+BOOTSTRAP_1_20_HASH:=1aef321a0e3e38b7e91d2d7eb64040666cabdcc77d383de3c9522d0d69b67f4e
+
+BOOTSTRAP_1_20_BUILD_DIR:=$(HOST_BUILD_DIR)/.go_bootstrap_1.20
+
+include $(INCLUDE_DIR)/host-build.mk
+include $(INCLUDE_DIR)/package.mk
+include ../golang-compiler.mk
+include ../golang-package.mk
+
+PKG_UNPACK:=$(HOST_TAR) -C "$(PKG_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(PKG_SOURCE)"
+HOST_UNPACK:=$(HOST_TAR) -C "$(HOST_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(PKG_SOURCE)"
+BOOTSTRAP_UNPACK:=$(HOST_TAR) -C "$(BOOTSTRAP_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(BOOTSTRAP_SOURCE)"
+BOOTSTRAP_1_17_UNPACK:=$(HOST_TAR) -C "$(BOOTSTRAP_1_17_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(BOOTSTRAP_1_17_SOURCE)"
+BOOTSTRAP_1_20_UNPACK:=$(HOST_TAR) -C "$(BOOTSTRAP_1_20_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(BOOTSTRAP_1_20_SOURCE)"
+
+# don't strip ELF executables in test data
+RSTRIP:=:
+STRIP:=:
+
+ifeq ($(GO_TARGET_SPECTRE_SUPPORTED),1)
+  PKG_CONFIG_DEPENDS+=CONFIG_GOLANG_SPECTRE
+endif
+
+define Package/golang-bootstrap
+  TITLE:=Go programming language (bootstrap)
+  DEPENDS:=$(GO_ARCH_DEPENDS)
+  HIDDEN:=1
+endef
+
+define Package/golang-bootstrap/description
+  The Go programming language is an open source project to make programmers more
+  productive.
+
+  Go is expressive, concise, clean, and efficient. Its concurrency mechanisms
+  make it easy to write programs that get the most out of multicore and
+  networked machines, while its novel type system enables flexible and modular
+  program construction. Go compiles quickly to machine code yet has the
+  convenience of garbage collection and the power of run-time reflection. It's a
+  fast, statically typed, compiled language that feels like a dynamically typed,
+  interpreted language.
+endef
+
+define Package/golang-bootstrap/config
+  source "$(SOURCE)/../Config.in"
+endef
+
+BOOTSTRAP_ROOT_DIR:=$(call qstrip,$(CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT))
+
+ifeq ($(BOOTSTRAP_ROOT_DIR),)
+  BOOTSTRAP_ROOT_DIR:=$(BOOTSTRAP_BUILD_DIR)
+
+  define Download/golang-bootstrap
+    FILE:=$(BOOTSTRAP_SOURCE)
+    URL:=$(BOOTSTRAP_SOURCE_URL)
+    HASH:=$(BOOTSTRAP_HASH)
+  endef
+  $(eval $(call Download,golang-bootstrap))
+
+  define Bootstrap/Prepare
+       mkdir -p "$(BOOTSTRAP_BUILD_DIR)" && $(BOOTSTRAP_UNPACK) ;
+  endef
+  Hooks/HostPrepare/Post+=Bootstrap/Prepare
+
+  $(eval $(call GoCompiler/AddProfile,Bootstrap,$(BOOTSTRAP_BUILD_DIR),,bootstrap,$(GO_HOST_OS_ARCH)))
+endif
+
+# Bootstrap 1.17
+
+define Download/golang-bootstrap-1.17
+  FILE:=$(BOOTSTRAP_1_17_SOURCE)
+  URL:=$(BOOTSTRAP_1_17_SOURCE_URL)
+  HASH:=$(BOOTSTRAP_1_17_HASH)
+endef
+$(eval $(call Download,golang-bootstrap-1.17))
+
+define Bootstrap-1.17/Prepare
+       mkdir -p "$(BOOTSTRAP_1_17_BUILD_DIR)" && $(BOOTSTRAP_1_17_UNPACK) ;
+endef
+Hooks/HostPrepare/Post+=Bootstrap-1.17/Prepare
+
+$(eval $(call GoCompiler/AddProfile,Bootstrap-1.17,$(BOOTSTRAP_1_17_BUILD_DIR),,bootstrap-1.17,$(GO_HOST_OS_ARCH)))
+
+# Bootstrap 1.20
+
+define Download/golang-bootstrap-1.20
+  FILE:=$(BOOTSTRAP_1_20_SOURCE)
+  URL:=$(BOOTSTRAP_1_20_SOURCE_URL)
+  HASH:=$(BOOTSTRAP_1_20_HASH)
+endef
+$(eval $(call Download,golang-bootstrap-1.20))
+
+define Bootstrap-1.20/Prepare
+       mkdir -p "$(BOOTSTRAP_1_20_BUILD_DIR)" && $(BOOTSTRAP_1_20_UNPACK) ;
+endef
+Hooks/HostPrepare/Post+=Bootstrap-1.20/Prepare
+
+$(eval $(call GoCompiler/AddProfile,Bootstrap-1.20,$(BOOTSTRAP_1_20_BUILD_DIR),,bootstrap-1.20,$(GO_HOST_OS_ARCH)))
+
+# Host
+
+ifeq ($(GO_HOST_PIE_SUPPORTED),1)
+  HOST_GO_ENABLE_PIE:=1
+endif
+
+# When using GO_LDFLAGS to set buildmode=pie, the PIE install suffix does not
+# apply (we also delete the std lib during Host/Install)
+
+$(eval $(call GoCompiler/AddProfile,Host,$(HOST_BUILD_DIR),$(HOST_GO_PREFIX),$(HOST_GO_VERSION_ID),$(GO_HOST_OS_ARCH)))
+
+HOST_GO_VARS= \
+       GOHOSTARCH="$(GO_HOST_ARCH)" \
+       GOCACHE="$(GO_BUILD_CACHE_DIR)" \
+       GOENV=off \
+       CC="$(HOSTCC_NOCACHE)" \
+       CXX="$(HOSTCXX_NOCACHE)"
+
+define Host/Configure
+       $(call GoCompiler/Bootstrap/CheckHost,$(BOOTSTRAP_GO_VALID_OS_ARCH))
+       $(call GoCompiler/Host/CheckHost,$(HOST_GO_VALID_OS_ARCH))
+
+       mkdir -p "$(GO_BUILD_CACHE_DIR)"
+endef
+
+define Host/Compile
+       $(call GoCompiler/Bootstrap/Make, \
+               $(HOST_GO_VARS) \
+               CC="$(HOSTCC_NOCACHE) -std=gnu17" \
+       )
+
+       $(call GoCompiler/Bootstrap-1.17/Make, \
+               GOROOT_BOOTSTRAP="$(BOOTSTRAP_ROOT_DIR)" \
+               $(HOST_GO_VARS) \
+       )
+
+       $(call GoCompiler/Bootstrap-1.20/Make, \
+               GOROOT_BOOTSTRAP="$(BOOTSTRAP_1_17_BUILD_DIR)" \
+               $(HOST_GO_VARS) \
+       )
+
+       $(call GoCompiler/Host/Make, \
+               GOROOT_BOOTSTRAP="$(BOOTSTRAP_1_20_BUILD_DIR)" \
+               $(if $(HOST_GO_ENABLE_PIE),GO_LDFLAGS="-buildmode pie") \
+               $(HOST_GO_VARS) \
+       )
+endef
+
+# If host and target OS/arch are the same, # when go compiles a program, it will
+# use the host std lib, so remove it now and force go to rebuild std for target
+# later
+define Host/Install
+       $(call Host/Uninstall)
+
+       $(call GoCompiler/Host/Install/Bin)
+       $(call GoCompiler/Host/Install/Src)
+
+       rm -rf "$(HOST_GO_ROOT)/pkg/$(GO_HOST_OS_ARCH)"
+
+       $(INSTALL_DIR) "$(HOST_GO_ROOT)/openwrt"
+       $(INSTALL_BIN) ../go-gcc-helper "$(HOST_GO_ROOT)/openwrt/"
+       $(LN) go-gcc-helper "$(HOST_GO_ROOT)/openwrt/gcc"
+       $(LN) go-gcc-helper "$(HOST_GO_ROOT)/openwrt/g++"
+endef
+
+define Host/Uninstall
+       rm -rf "$(HOST_GO_ROOT)/openwrt"
+
+       $(call GoCompiler/Host/Uninstall)
+endef
+
+$(eval $(call HostBuild))
+$(eval $(call BuildPackage,golang-bootstrap))
index 1d6ecd161dadf0b741ecd4ba34155d1363787b25..000a9ba6c8d15bd705636fd584b7cc5cf24df3f6 100644 (file)
@@ -19,14 +19,10 @@ endef
 # $(1) source go root
 # $(2) additional environment variables (optional)
 define GoCompiler/Default/Make
-       ( \
-               cd "$(1)/src" ; \
-               $(2) \
-               $(BASH) make.bash \
+       cd "$(1)/src" ; \
+       $(2) $(BASH) make.bash \
                $(if $(findstring s,$(OPENWRT_VERBOSE)),-v) \
-               --no-banner \
-               ; \
-       )
+               --no-banner
 endef
 
 # $(1) destination prefix
index f4c2e8214389ed9a77507f58b43b841cf7a448ff..86b9d877443dc8014f6b8b0d58d13a62b87d6432 100644 (file)
@@ -10,22 +10,24 @@ GO_VERSION_PATCH:=6
 
 PKG_NAME:=golang
 PKG_VERSION:=$(GO_VERSION_MAJOR_MINOR)$(if $(GO_VERSION_PATCH),.$(GO_VERSION_PATCH))
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
-GO_SOURCE_URLS:=https://dl.google.com/go/ \
-                https://mirrors.ustc.edu.cn/golang/ \
-                https://mirrors.nju.edu.cn/golang/
+GO_SOURCE_URLS:=https://go.dev/dl/ \
+                https://dl.google.com/go/ \
+                https://golang.google.cn/dl/ \
+                https://mirrors.nju.edu.cn/golang/ \
+                https://mirrors.ustc.edu.cn/golang/
 
 PKG_SOURCE:=go$(PKG_VERSION).src.tar.gz
 PKG_SOURCE_URL:=$(GO_SOURCE_URLS)
 PKG_HASH:=58cbf771e44d76de6f56d19e33b77d745a1e489340922875e46585b975c2b059
 
-PKG_MAINTAINER:=Jeffery To <jeffery.to@gmail.com>
+PKG_MAINTAINER:=George Sapkin <george@sapk.in>
 PKG_LICENSE:=BSD-3-Clause
 PKG_LICENSE_FILES:=LICENSE
 PKG_CPE_ID:=cpe:/a:golang:go
 
-PKG_BUILD_DEPENDS:=golang/host
+PKG_BUILD_DEPENDS:=$(PKG_NAME)/host
 PKG_BUILD_DIR:=$(BUILD_DIR)/go-$(PKG_VERSION)
 PKG_BUILD_PARALLEL:=1
 PKG_BUILD_FLAGS:=no-mips16
@@ -33,11 +35,12 @@ PKG_BUILD_FLAGS:=no-mips16
 PKG_GO_PREFIX:=/usr
 PKG_GO_VERSION_ID:=$(GO_VERSION_MAJOR_MINOR)
 
+HOST_BUILD_DEPENDS:=golang-bootstrap/host
 HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/go-$(PKG_VERSION)
 HOST_BUILD_PARALLEL:=1
 
 HOST_GO_PREFIX:=$(STAGING_DIR_HOSTPKG)
-HOST_GO_VERSION_ID:=cross
+HOST_GO_VERSION_ID:=$(GO_VERSION_MAJOR_MINOR)
 HOST_GO_ROOT:=$(HOST_GO_PREFIX)/lib/go-$(HOST_GO_VERSION_ID)
 
 HOST_GO_VALID_OS_ARCH:= \
@@ -70,40 +73,7 @@ HOST_GO_VALID_OS_ARCH:= \
   \
   openbsd_mips64
 
-BOOTSTRAP_SOURCE:=go1.4-bootstrap-20171003.tar.gz
-BOOTSTRAP_SOURCE_URL:=$(GO_SOURCE_URLS)
-BOOTSTRAP_HASH:=f4ff5b5eb3a3cae1c993723f3eab519c5bae18866b5e5f96fe1102f0cb5c3e52
-
-BOOTSTRAP_BUILD_DIR:=$(HOST_BUILD_DIR)/.go_bootstrap
-
-BOOTSTRAP_GO_VALID_OS_ARCH:= \
-  darwin_386     darwin_amd64 \
-  dragonfly_386  dragonfly_amd64 \
-  freebsd_386    freebsd_amd64    freebsd_arm \
-  linux_386      linux_amd64      linux_arm \
-  netbsd_386     netbsd_amd64     netbsd_arm \
-  openbsd_386    openbsd_amd64 \
-  plan9_386      plan9_amd64 \
-                 solaris_amd64 \
-  windows_386    windows_amd64
-
-BOOTSTRAP_1_17_SOURCE:=go1.17.13.src.tar.gz
-BOOTSTRAP_1_17_SOURCE_URL:=$(GO_SOURCE_URLS)
-BOOTSTRAP_1_17_HASH:=a1a48b23afb206f95e7bbaa9b898d965f90826f6f1d1fc0c1d784ada0cd300fd
-
-BOOTSTRAP_1_17_BUILD_DIR:=$(HOST_BUILD_DIR)/.go_bootstrap_1.17
-
-BOOTSTRAP_1_20_SOURCE:=go1.20.14.src.tar.gz
-BOOTSTRAP_1_20_SOURCE_URL:=$(GO_SOURCE_URLS)
-BOOTSTRAP_1_20_HASH:=1aef321a0e3e38b7e91d2d7eb64040666cabdcc77d383de3c9522d0d69b67f4e
-
-BOOTSTRAP_1_20_BUILD_DIR:=$(HOST_BUILD_DIR)/.go_bootstrap_1.20
-
-BOOTSTRAP_1_22_SOURCE:=go1.22.6.src.tar.gz
-BOOTSTRAP_1_22_SOURCE_URL:=$(GO_SOURCE_URLS)
-BOOTSTRAP_1_22_HASH:=9e48d99d519882579917d8189c17e98c373ce25abaebb98772e2927088992a51
-
-BOOTSTRAP_1_22_BUILD_DIR:=$(HOST_BUILD_DIR)/.go_bootstrap_1.22
+BOOTSTRAP_DIR:=$(HOST_GO_PREFIX)/lib/go-bootstrap
 
 include $(INCLUDE_DIR)/host-build.mk
 include $(INCLUDE_DIR)/package.mk
@@ -112,10 +82,6 @@ include ../golang-package.mk
 
 PKG_UNPACK:=$(HOST_TAR) -C "$(PKG_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(PKG_SOURCE)"
 HOST_UNPACK:=$(HOST_TAR) -C "$(HOST_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(PKG_SOURCE)"
-BOOTSTRAP_UNPACK:=$(HOST_TAR) -C "$(BOOTSTRAP_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(BOOTSTRAP_SOURCE)"
-BOOTSTRAP_1_17_UNPACK:=$(HOST_TAR) -C "$(BOOTSTRAP_1_17_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(BOOTSTRAP_1_17_SOURCE)"
-BOOTSTRAP_1_20_UNPACK:=$(HOST_TAR) -C "$(BOOTSTRAP_1_20_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(BOOTSTRAP_1_20_SOURCE)"
-BOOTSTRAP_1_22_UNPACK:=$(HOST_TAR) -C "$(BOOTSTRAP_1_22_BUILD_DIR)" --strip-components=1 -xzf "$(DL_DIR)/$(BOOTSTRAP_1_22_SOURCE)"
 
 # don't strip ELF executables in test data
 RSTRIP:=:
@@ -161,7 +127,7 @@ libraries for the Go programming language.
 endef
 
 define Package/golang/config
-  source "$(SOURCE)/Config.in"
+  source "$(SOURCE)/../Config.in"
 endef
 
 define Package/golang-doc
@@ -188,88 +154,14 @@ This package provides the Go programming language source files needed
 for cross-compilation.
 endef
 
-
-# Bootstrap
-
-BOOTSTRAP_ROOT_DIR:=$(call qstrip,$(CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT))
-
-ifeq ($(BOOTSTRAP_ROOT_DIR),)
-  BOOTSTRAP_ROOT_DIR:=$(BOOTSTRAP_BUILD_DIR)
-
-  define Download/golang-bootstrap
-    FILE:=$(BOOTSTRAP_SOURCE)
-    URL:=$(BOOTSTRAP_SOURCE_URL)
-    HASH:=$(BOOTSTRAP_HASH)
-  endef
-  $(eval $(call Download,golang-bootstrap))
-
-  define Bootstrap/Prepare
-       mkdir -p "$(BOOTSTRAP_BUILD_DIR)" && $(BOOTSTRAP_UNPACK) ;
-  endef
-  Hooks/HostPrepare/Post+=Bootstrap/Prepare
-
-  $(eval $(call GoCompiler/AddProfile,Bootstrap,$(BOOTSTRAP_BUILD_DIR),,bootstrap,$(GO_HOST_OS_ARCH)))
-endif
-
-
-# Bootstrap 1.17
-
-define Download/golang-bootstrap-1.17
-  FILE:=$(BOOTSTRAP_1_17_SOURCE)
-  URL:=$(BOOTSTRAP_1_17_SOURCE_URL)
-  HASH:=$(BOOTSTRAP_1_17_HASH)
-endef
-$(eval $(call Download,golang-bootstrap-1.17))
-
-define Bootstrap-1.17/Prepare
-       mkdir -p "$(BOOTSTRAP_1_17_BUILD_DIR)" && $(BOOTSTRAP_1_17_UNPACK) ;
-endef
-Hooks/HostPrepare/Post+=Bootstrap-1.17/Prepare
-
-$(eval $(call GoCompiler/AddProfile,Bootstrap-1.17,$(BOOTSTRAP_1_17_BUILD_DIR),,bootstrap-1.17,$(GO_HOST_OS_ARCH)))
-
-
-# Bootstrap 1.20
-
-define Download/golang-bootstrap-1.20
-  FILE:=$(BOOTSTRAP_1_20_SOURCE)
-  URL:=$(BOOTSTRAP_1_20_SOURCE_URL)
-  HASH:=$(BOOTSTRAP_1_20_HASH)
-endef
-$(eval $(call Download,golang-bootstrap-1.20))
-
-define Bootstrap-1.20/Prepare
-       mkdir -p "$(BOOTSTRAP_1_20_BUILD_DIR)" && $(BOOTSTRAP_1_20_UNPACK) ;
-endef
-Hooks/HostPrepare/Post+=Bootstrap-1.20/Prepare
-
-$(eval $(call GoCompiler/AddProfile,Bootstrap-1.20,$(BOOTSTRAP_1_20_BUILD_DIR),,bootstrap-1.20,$(GO_HOST_OS_ARCH)))
-
-
-# Bootstrap 1.22
-
-define Download/golang-bootstrap-1.22
-  FILE:=$(BOOTSTRAP_1_22_SOURCE)
-  URL:=$(BOOTSTRAP_1_22_SOURCE_URL)
-  HASH:=$(BOOTSTRAP_1_22_HASH)
-endef
-$(eval $(call Download,golang-bootstrap-1.22))
-
-define Bootstrap-1.22/Prepare
-       mkdir -p "$(BOOTSTRAP_1_22_BUILD_DIR)" && $(BOOTSTRAP_1_22_UNPACK) ;
-endef
-Hooks/HostPrepare/Post+=Bootstrap-1.22/Prepare
-
-$(eval $(call GoCompiler/AddProfile,Bootstrap-1.22,$(BOOTSTRAP_1_22_BUILD_DIR),,bootstrap-1.22,$(GO_HOST_OS_ARCH)))
-
 # Host
 
 ifeq ($(GO_HOST_PIE_SUPPORTED),1)
   HOST_GO_ENABLE_PIE:=1
 endif
 
-# when using GO_LDFLAGS to set buildmode=pie, the PIE install suffix
-# does not apply (we also delete the std lib during Host/Install)
+# When using GO_LDFLAGS to set buildmode=pie, the PIE install suffix does not
+# apply (we also delete the std lib during Host/Install)
 
 $(eval $(call GoCompiler/AddProfile,Host,$(HOST_BUILD_DIR),$(HOST_GO_PREFIX),$(HOST_GO_VERSION_ID),$(GO_HOST_OS_ARCH),$(HOST_GO_INSTALL_SUFFIX)))
 
@@ -281,55 +173,33 @@ HOST_GO_VARS= \
        CXX="$(HOSTCXX_NOCACHE)"
 
 define Host/Configure
-       $(call GoCompiler/Bootstrap/CheckHost,$(BOOTSTRAP_GO_VALID_OS_ARCH))
        $(call GoCompiler/Host/CheckHost,$(HOST_GO_VALID_OS_ARCH))
 
        mkdir -p "$(GO_BUILD_CACHE_DIR)"
 endef
 
 define Host/Compile
-       $(call GoCompiler/Bootstrap/Make, \
-               $(HOST_GO_VARS) \
-               CC="$(HOSTCC_NOCACHE) -std=gnu17" \
-       )
-
-       $(call GoCompiler/Bootstrap-1.17/Make, \
-               GOROOT_BOOTSTRAP="$(BOOTSTRAP_ROOT_DIR)" \
-               $(HOST_GO_VARS) \
-       )
-
-       $(call GoCompiler/Bootstrap-1.20/Make, \
-               GOROOT_BOOTSTRAP="$(BOOTSTRAP_1_17_BUILD_DIR)" \
-               $(HOST_GO_VARS) \
-       )
-
-       $(call GoCompiler/Bootstrap-1.22/Make, \
-               GOROOT_BOOTSTRAP="$(BOOTSTRAP_1_20_BUILD_DIR)" \
-               $(HOST_GO_VARS) \
-       )
-
        $(call GoCompiler/Host/Make, \
-               GOROOT_BOOTSTRAP="$(BOOTSTRAP_1_22_BUILD_DIR)" \
+               GOROOT_BOOTSTRAP="$(BOOTSTRAP_DIR)" \
                $(if $(HOST_GO_ENABLE_PIE),GO_LDFLAGS="-buildmode pie") \
                $(HOST_GO_VARS) \
        )
 endef
 
-# if host and target os/arch are the same,
-# when go compiles a program, it will use the host std lib
-# so remove it now and force go to rebuild std for target later
+# If host and target OS/arch are the same, # when go compiles a program, it will
+# use the host std lib, so remove it now and force go to rebuild std for target
+# later
 define Host/Install
        $(call Host/Uninstall)
 
-       $(call GoCompiler/Host/Install/Bin,)
-       $(call GoCompiler/Host/Install/Src,)
-
-       $(call GoCompiler/Host/Install/BinLinks,)
+       $(call GoCompiler/Host/Install/Bin)
+       $(call GoCompiler/Host/Install/Src)
+       $(call GoCompiler/Host/Install/BinLinks)
 
        rm -rf "$(HOST_GO_ROOT)/pkg/$(GO_HOST_OS_ARCH)$(if $(HOST_GO_INSTALL_SUFFIX),_$(HOST_GO_INSTALL_SUFFIX))"
 
        $(INSTALL_DIR) "$(HOST_GO_ROOT)/openwrt"
-       $(INSTALL_BIN) ./files/go-gcc-helper "$(HOST_GO_ROOT)/openwrt/"
+       $(INSTALL_BIN) ../go-gcc-helper "$(HOST_GO_ROOT)/openwrt/"
        $(LN) go-gcc-helper "$(HOST_GO_ROOT)/openwrt/gcc"
        $(LN) go-gcc-helper "$(HOST_GO_ROOT)/openwrt/g++"
 endef
@@ -337,12 +207,10 @@ endef
 define Host/Uninstall
        rm -rf "$(HOST_GO_ROOT)/openwrt"
 
-       $(call GoCompiler/Host/Uninstall/BinLinks,)
-
-       $(call GoCompiler/Host/Uninstall,)
+       $(call GoCompiler/Host/Uninstall/BinLinks)
+       $(call GoCompiler/Host/Uninstall)
 endef
 
-
 # Target
 
 ifeq ($(GO_PKG_ENABLE_PIE),1)
@@ -450,12 +318,11 @@ endef
 # src/debug contains ELF executables as test data
 # and they reference these libraries
 # we need to call this in Package/$(1)/extra_provides
-# to pass CheckDependencies in include/package-ipkg.mk
+# to pass CheckDependencies in include/package-pack.mk
 define Package/golang-src/extra_provides
        echo 'libc.so.6'
 endef
 
-
 $(eval $(call HostBuild))
 $(eval $(call BuildPackage,golang))
 $(eval $(call BuildPackage,golang-doc))
git clone https://git.99rst.org/PROJECT