golang: split src into separate packages

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 <jeffery.to@gmail.com>
Signed-off-by: George Sapkin <george@sapk.in>
This commit is contained in:
George Sapkin
2026-01-29 02:17:26 +02:00
parent 6f4155c0a0
commit 5657eb0e2e
7 changed files with 158 additions and 31 deletions

16
lang/golang/go-strip-helper Executable file
View File

@@ -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
"$@"

View 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)

View 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/Misc
$(call GoCompiler/Default/Install/make-dirs,$(2),$(3))
$(call GoCompiler/Default/Install/install-lib-data,$(1),$(2),$(3),misc)
endef
# 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),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)
$(FIND) \
"$(2)/lib/go-$(3)/src/" \
\! -type d -a \( -name "*.bat" -o -name "*.rc" \) \
-delete
$(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)

View 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

View 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

View 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))

2
lang/golang/golang1.25/test.sh Normal file → Executable file
View File

@@ -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 "