--- /dev/null
+#!/bin/sh
+#
+# Copyright (C) 2026 George Sapkin
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+for last; do :; done
+
+case "$last" in
+ *-doc|*-misc|*-src|*-tests)
+ echo "Not stripping: $last"
+ exit 0
+ ;;
+esac
+
+"$@"
#
-# Copyright (C) 2018-2023, Jeffery To
-# Copyright (C) 2025-2026, George Sapkin
+# Copyright (C) 2018-2023 Jeffery To
+# Copyright (C) 2025-2026 George Sapkin
#
# SPDX-License-Identifier: GPL-2.0-only
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
+# Don't strip ELF executables in test data
RSTRIP:=:
-STRIP:=:
ifeq ($(GO_TARGET_SPECTRE_SUPPORTED),1)
PKG_CONFIG_DEPENDS+=CONFIG_GOLANG_SPECTRE
rm -rf "$(HOST_GO_ROOT)/pkg/$(GO_HOST_OS_ARCH)"
+ $(INSTALL_DIR) "$(STAGING_DIR_HOSTPKG)/bin"
+ $(INSTALL_BIN) ../go-strip-helper "$(STAGING_DIR_HOSTPKG)/bin"
+
$(INSTALL_DIR) "$(HOST_GO_ROOT)/openwrt"
- $(INSTALL_BIN) ../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
define Host/Uninstall
+ rm -f "$(STAGING_DIR_HOSTPKG)/bin/go-strip-helper"
rm -rf "$(HOST_GO_ROOT)/openwrt"
$(call GoCompiler/Host/Uninstall)
# 2: destination prefix
# 3: go version id
# 4: file/directory name
+# 5: filter (optional)
define GoCompiler/Default/Install/install-lib-data
+
+ ifeq ($(5),)
$(CP) "$(1)/$(4)" "$(2)/lib/go-$(3)/"
+ else
+ $(INSTALL_DIR) "$(2)/lib/go-$(3)/$(4)"; \
+ cd "$(1)/$(4)" && \
+ $(FIND) . ! -type d -a \( $(5) \) -print0 | \
+ cpio \
+ --make-directories \
+ --null \
+ --pass-through \
+ --unconditional \
+ "$(2)/lib/go-$(3)/$(4)/"
+ endif
endef
# 1: source go root
# 3: go version id
# 4: GOOS_GOARCH
# 5: install suffix (optional)
+# 6: if target, package architecture-specific sources
define GoCompiler/Default/Install/Bin
$(call GoCompiler/Default/Install/make-dirs,$(2),$(3))
$(INSTALL_DATA) -p "$(1)/go.env" "$(2)/lib/go-$(3)/"
$(INSTALL_DATA) -p "$(1)/VERSION" "$(2)/lib/go-$(3)/"
- for file in CONTRIBUTING.md LICENSE PATENTS README.md SECURITY.md; do \
+ for file in $(strip $(if $(filter target,$(6)),$(GO_BIN_FILES),$(GO_LEGAL_FILES))); do \
if [ -f "$(1)/$$$$file" ]; then \
$(INSTALL_DATA) -p "$(1)/$$$$file" "$(2)/lib/go-$(3)/" ; \
fi ; \
# 1: source go root
# 2: destination prefix
# 3: go version id
-define GoCompiler/Default/Install/Src
+define GoCompiler/Default/Install/Misc
$(call GoCompiler/Default/Install/make-dirs,$(2),$(3))
-
- $(call GoCompiler/Default/Install/install-lib-data,$(1),$(2),$(3),lib)
$(call GoCompiler/Default/Install/install-lib-data,$(1),$(2),$(3),misc)
- $(call GoCompiler/Default/Install/install-lib-data,$(1),$(2),$(3),src)
- $(call GoCompiler/Default/Install/install-lib-data,$(1),$(2),$(3),test)
+endef
- $(FIND) \
- "$(2)/lib/go-$(3)/src/" \
- \! -type d -a \( -name "*.bat" -o -name "*.rc" \) \
- -delete
+# 1: source go root
+# 2: destination prefix
+# 3: go version id
+# 4: if target, package architecture-specific sources
+define GoCompiler/Default/Install/Src
+ $(call GoCompiler/Default/Install/make-dirs,$(2),$(3))
+ $(call GoCompiler/Default/Install/install-lib-data,$(1),$(2),$(3),src,$(strip \
+ $(if $(filter target,$(4)), \
+ $(GO_TARGET_SRC_FILTERS), \
+ $(GO_HOST_SRC_FILTERS) \
+ ) \
+ ))
if [ -d "$(1)/pkg/include" ]; then \
$(INSTALL_DIR) "$(2)/lib/go-$(3)/pkg" ; \
fi
endef
+# 1: source go root
+# 2: destination prefix
+# 3: go version id
+define GoCompiler/Default/Install/Tests
+ $(call GoCompiler/Default/Install/make-dirs,$(2),$(3))
+ $(call GoCompiler/Default/Install/install-lib-data,$(1),$(2),$(3),lib)
+ $(call GoCompiler/Default/Install/install-lib-data,$(1),$(2),$(3),src,$(GO_TARGET_TEST_FILTERS))
+ $(call GoCompiler/Default/Install/install-lib-data,$(1),$(2),$(3),test)
+endef
+
# 1: destination prefix
# 2: go version id
define GoCompiler/Default/Uninstall
endef
# 1: override install prefix (optional)
+ # 2: if target, package architecture-specific sources
define GoCompiler/$(1)/Install/Bin
- $$(call GoCompiler/Default/Install/Bin,$(2),$$(or $$(1),$(3)),$(4),$(5),$(6))
+ $$(call GoCompiler/Default/Install/Bin,$(2),$$(or $$(1),$(3)),$(4),$(5),$(6),$$(2))
endef
# 1: override install prefix (optional)
endef
# 1: override install prefix (optional)
+ define GoCompiler/$(1)/Install/Misc
+ $$(call GoCompiler/Default/Install/Misc,$(2),$$(or $$(1),$(3)),$(4))
+ endef
+
+ # 1: override install prefix (optional)
+ # 2: if target, package architecture-specific sources
define GoCompiler/$(1)/Install/Src
- $$(call GoCompiler/Default/Install/Src,$(2),$$(or $$(1),$(3)),$(4))
+ $$(call GoCompiler/Default/Install/Src,$(2),$$(or $$(1),$(3)),$(4),$$(2))
+ endef
+
+ # 1: override install prefix (optional)
+ define GoCompiler/$(1)/Install/Tests
+ $$(call GoCompiler/Default/Install/Tests,$(2),$$(or $$(1),$(3)),$(4),$$(2))
endef
# 1: override install prefix (optional)
#
# Copyright (C) 2018-2023 Jeffery To
+# Copyright (C) 2025-2026 George Sapkin
#
# SPDX-License-Identifier: GPL-2.0-only
endif
+GO_GENERATED_FILES := \
+ src/cmd/cgo/zdefaultcc.go \
+ src/cmd/go/internal/cfg/zdefaultcc.go \
+ src/cmd/internal/objabi/zbootstrap.go \
+ src/go/build/zcgo.go \
+ src/internal/buildcfg/zbootstrap.go \
+ src/internal/runtime/sys/zversion.go \
+ src/time/tzdata/zzipdata.go
+
+GO_LEGAL_FILES := \
+ CONTRIBUTING.md \
+ LICENSE \
+ PATENTS \
+ README.md \
+ SECURITY.md
+
+GO_BIN_FILES := \
+ $(GO_GENERATED_FILES) \
+ $(GO_LEGAL_FILES)
+
+GO_HOST_SRC_FILTERS := ! -name '*.bat' -a ! -name '*.rc'
+GO_TARGET_SRC_FILTERS := ! -ipath '*/testdata/*' -a ! -name '*_test.go' -a ! -name '*.bat' -a ! -name '*.rc'
+GO_TARGET_TEST_FILTERS := -ipath '*/testdata/*' -o -name '*_test.go'
+
# Target Go
#
-# Copyright (C) 2018-2023, Jeffery To
-# Copyright (C) 2025-2026, George Sapkin
+# Copyright (C) 2018-2023 Jeffery To
+# Copyright (C) 2025-2026 George Sapkin
#
# SPDX-License-Identifier: GPL-2.0-only
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)"
-# don't strip ELF executables in test data
-RSTRIP:=:
-STRIP:=:
+# Don't strip ELF executables in test data
+RSTRIP:=$(subst $(SCRIPT_DIR)/rstrip.sh,go-strip-helper $(SCRIPT_DIR)/rstrip.sh,$(RSTRIP))
ifeq ($(GO_TARGET_SPECTRE_SUPPORTED),1)
PKG_CONFIG_DEPENDS+=CONFIG_GOLANG_SPECTRE
define Package/$(PKG_NAME)-doc
$(call Package/$(PKG_NAME)/Default)
TITLE+= (documentation)
+ PKGARCH:=all
PROVIDES:=@golang-doc
$(if $(filter $(GO_DEFAULT_VERSION),$(GO_VERSION_MAJOR_MINOR)),DEFAULT_VARIANT:=1)
endef
This package provides the documentation for the Go programming language.
endef
+define Package/$(PKG_NAME)-misc
+ $(call Package/$(PKG_NAME)/Default)
+ TITLE+= (misc source files)
+ PKGARCH:=all
+ PROVIDES:=@golang-misc
+ $(if $(filter $(GO_DEFAULT_VERSION),$(GO_VERSION_MAJOR_MINOR)),DEFAULT_VARIANT:=1)
+endef
+
+define Package/$(PKG_NAME)-misc/description
+ $(call Package/$(PKG_NAME)/Default/description)
+
+ This package provides the Go compiler miscellaneous sources.
+endef
+
define Package/$(PKG_NAME)-src
$(call Package/$(PKG_NAME)/Default)
TITLE+= (source files)
+ PKGARCH:=all
PROVIDES:=@golang-src
$(if $(filter $(GO_DEFAULT_VERSION),$(GO_VERSION_MAJOR_MINOR)),DEFAULT_VARIANT:=1)
endef
cross-compilation.
endef
+define Package/$(PKG_NAME)-tests
+ $(call Package/$(PKG_NAME)/Default)
+ TITLE+= (compiler tests)
+ DEPENDS+= +golang$(GO_VERSION_MAJOR_MINOR)-src
+ EXTRA_DEPENDS:=golang$(GO_VERSION_MAJOR_MINOR)-src (=$(PKG_VERSION)-r$(PKG_RELEASE))
+ PKGARCH:=all
+ PROVIDES:=@golang-tests
+ $(if $(filter $(GO_DEFAULT_VERSION),$(GO_VERSION_MAJOR_MINOR)),DEFAULT_VARIANT:=1)
+endef
+
+define Package/$(PKG_NAME)-tests/description
+ $(call Package/$(PKG_NAME)/Default/description)
+
+ This package provides the Go compiler tests for stdlib.
+endef
+
# Host
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/"
+ $(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
endef
define Package/$(PKG_NAME)/install
- $(call GoCompiler/Package/Install/Bin,$(1)$(PKG_GO_PREFIX))
+ $(call GoCompiler/Package/Install/Bin,$(1)$(PKG_GO_PREFIX),target)
endef
define Package/$(PKG_NAME)-doc/install
$(call GoCompiler/Package/Install/Doc,$(1)$(PKG_GO_PREFIX))
endef
+define Package/$(PKG_NAME)-misc/install
+ $(call GoCompiler/Package/Install/Misc,$(1)$(PKG_GO_PREFIX))
+endef
+
define Package/$(PKG_NAME)-src/install
- $(call GoCompiler/Package/Install/Src,$(1)$(PKG_GO_PREFIX))
+ $(call GoCompiler/Package/Install/Src,$(1)$(PKG_GO_PREFIX),target)
+endef
+
+define Package/$(PKG_NAME)-tests/install
+ $(call GoCompiler/Package/Install/Tests,$(1)$(PKG_GO_PREFIX))
endef
# src/debug contains ELF executables as test data and they reference these
# libraries we need to call this to pass CheckDependencies in package-pack.mk
-define Package/$(PKG_NAME)-src/extra_provides
+define Package/$(PKG_NAME)-tests/extra_provides
echo 'libc.so.6' libstdc++.so.6' libtiff.so.6' | tr ' ' '\n'
endef
#
-# Copyright (C) 2018-2023, Jeffery To
-# Copyright (C) 2025-2026, George Sapkin
+# Copyright (C) 2018-2023 Jeffery To
+# Copyright (C) 2025-2026 George Sapkin
#
# SPDX-License-Identifier: GPL-2.0-only
PKG_HASH:=58cbf771e44d76de6f56d19e33b77d745a1e489340922875e46585b975c2b059
PKG_VERSION:=$(GO_VERSION_MAJOR_MINOR)$(if $(GO_VERSION_PATCH),.$(GO_VERSION_PATCH))
-PKG_RELEASE:=1
+PKG_RELEASE:=2
GO_SOURCE_URLS:=https://go.dev/dl/ \
https://dl.google.com/go/ \
$(eval $(call HostBuild))
$(eval $(call BuildPackage,$(PKG_NAME)))
$(eval $(call BuildPackage,$(PKG_NAME)-doc))
+$(eval $(call BuildPackage,$(PKG_NAME)-misc))
$(eval $(call BuildPackage,$(PKG_NAME)-src))
+$(eval $(call BuildPackage,$(PKG_NAME)-tests))
# SPDX-License-Identifier: GPL-2.0-only
case "$1" in
- golang*doc|golang*src) exit ;;
+ golang*doc|golang*misc|golang*src|golang*tests) exit ;;
esac
go version | grep -F " go$PKG_VERSION "