golang: split src into separate packages
authorGeorge Sapkin <redacted>
Thu, 29 Jan 2026 00:17:26 +0000 (02:17 +0200)
committerGeorge Sapkin <redacted>
Mon, 2 Feb 2026 08:10:03 +0000 (10:10 +0200)
Split misc sources and test data into separate packages. Reduces target
src package size by a third.

Move architecture-dependent generated source from src to the main
package.

Mark doc, misc, src and tests packages with PKGARCH:=all as they don't
have any architecture-specific files.

Fix stripping and strip compiler only.

Fixes: c137c382 ("golang: new packages")
Link: https://github.com/openwrt/packages/pull/28445
Suggested-by: Jeffery To <redacted>
Signed-off-by: George Sapkin <redacted>
lang/golang/go-strip-helper [new file with mode: 0755]
lang/golang/golang-bootstrap/Makefile
lang/golang/golang-compiler.mk
lang/golang/golang-values.mk
lang/golang/golang-version.mk
lang/golang/golang1.25/Makefile
lang/golang/golang1.25/test.sh [changed mode: 0644->0755]

diff --git a/lang/golang/go-strip-helper b/lang/golang/go-strip-helper
new file mode 100755 (executable)
index 0000000..e2351e1
--- /dev/null
@@ -0,0 +1,16 @@
+#!/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
+
+"$@"
index 86677770c253c32a1fabe9c45a6b1bf38f4dc5cc..391e2a2564c1a336adaf9b2cb2aa02fd2ddbcb37 100644 (file)
@@ -1,6 +1,6 @@
 #
-# 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
 
@@ -111,9 +111,8 @@ BOOTSTRAP_UNPACK:=$(HOST_TAR) -C "$(BOOTSTRAP_BUILD_DIR)" --strip-components=1 -
 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
@@ -253,13 +252,17 @@ define Host/Install
 
        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)
index 43dc8a7f135feffbbcb2f13893aba7bb7bae4371..c304a8d41d7cfb9cf7d015508695338be93a2490 100644 (file)
@@ -36,8 +36,22 @@ endef
 # 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
@@ -45,6 +59,7 @@ endef
 # 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))
 
@@ -53,7 +68,7 @@ define GoCompiler/Default/Install/Bin
        $(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 ; \
@@ -96,18 +111,23 @@ endef
 # 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" ; \
@@ -115,6 +135,16 @@ define GoCompiler/Default/Install/Src
        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
@@ -148,8 +178,9 @@ define GoCompiler/AddProfile
   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)
@@ -163,8 +194,19 @@ define GoCompiler/AddProfile
   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)
index e47e1323b9c31d3c085be91b8ae4f70bdc964510..64913f353481b0fb79bb567926f7fc1e69b4b20d 100644 (file)
@@ -1,5 +1,6 @@
 #
 # Copyright (C) 2018-2023 Jeffery To
+# Copyright (C) 2025-2026 George Sapkin
 #
 # SPDX-License-Identifier: GPL-2.0-only
 
@@ -250,6 +251,30 @@ else ifeq ($(GO_ARCH),ppc64)
 
 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
 
index 507c36126cc9cdf6946eaf34613a7ce7ea7c8aaf..db76279281eb14f98987caf7c521f238ba344dc1 100644 (file)
@@ -1,6 +1,6 @@
 #
-# 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
 
@@ -17,9 +17,8 @@ include ../golang-values.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)"
 
-# 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
@@ -79,6 +78,7 @@ endef
 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
@@ -89,9 +89,24 @@ define Package/$(PKG_NAME)-doc/description
   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
@@ -103,6 +118,22 @@ define Package/$(PKG_NAME)-src/description
   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
 
@@ -149,7 +180,7 @@ define Host/Install
        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
@@ -242,19 +273,27 @@ define Build/Compile
 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
index ea3ee26857831fdd1146d326be690f47d201c21d..700bd92c3e7f1cff6778c67b80e5c68df210d08c 100644 (file)
@@ -1,6 +1,6 @@
 #
-# 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
 
@@ -13,7 +13,7 @@ GO_BOOTSTRAP_VERSION:=bootstrap
 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/ \
@@ -78,4 +78,6 @@ include ../golang-version.mk
 $(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))
old mode 100644 (file)
new mode 100755 (executable)
index e7c4a81..09d3e3f
@@ -3,7 +3,7 @@
 # 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 "
git clone https://git.99rst.org/PROJECT