From 662972a252ed3772d11db39ccb3d39afa074fc6c Mon Sep 17 00:00:00 2001 From: George Sapkin Date: Thu, 1 Jan 2026 16:19:55 +0200 Subject: [PATCH] golang: split bootstrap into a separate package 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 --- lang/golang/{golang => }/Config.in | 0 lang/golang/{golang/files => }/go-gcc-helper | 0 lang/golang/golang-bootstrap/Makefile | 269 +++++++++++++++++++ lang/golang/golang-compiler.mk | 10 +- lang/golang/golang/Makefile | 183 ++----------- 5 files changed, 297 insertions(+), 165 deletions(-) rename lang/golang/{golang => }/Config.in (100%) rename lang/golang/{golang/files => }/go-gcc-helper (100%) create mode 100644 lang/golang/golang-bootstrap/Makefile diff --git a/lang/golang/golang/Config.in b/lang/golang/Config.in similarity index 100% rename from lang/golang/golang/Config.in rename to lang/golang/Config.in diff --git a/lang/golang/golang/files/go-gcc-helper b/lang/golang/go-gcc-helper similarity index 100% rename from lang/golang/golang/files/go-gcc-helper rename to lang/golang/go-gcc-helper diff --git a/lang/golang/golang-bootstrap/Makefile b/lang/golang/golang-bootstrap/Makefile new file mode 100644 index 0000000000..86677770c2 --- /dev/null +++ b/lang/golang/golang-bootstrap/Makefile @@ -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 +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)) diff --git a/lang/golang/golang-compiler.mk b/lang/golang/golang-compiler.mk index 1d6ecd161d..000a9ba6c8 100644 --- a/lang/golang/golang-compiler.mk +++ b/lang/golang/golang-compiler.mk @@ -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 diff --git a/lang/golang/golang/Makefile b/lang/golang/golang/Makefile index f4c2e82143..86b9d87744 100644 --- a/lang/golang/golang/Makefile +++ b/lang/golang/golang/Makefile @@ -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 +PKG_MAINTAINER:=George Sapkin 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))