From: George Sapkin Date: Thu, 29 Jan 2026 00:17:26 +0000 (+0200) Subject: golang: split src into separate packages X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=5657eb0e2efb64e3f1001dd900310fbf0b488c20;p=openwrt-packages.git 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 Signed-off-by: George Sapkin --- diff --git a/lang/golang/go-strip-helper b/lang/golang/go-strip-helper new file mode 100755 index 000000000..e2351e1a6 --- /dev/null +++ b/lang/golang/go-strip-helper @@ -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 + +"$@" diff --git a/lang/golang/golang-bootstrap/Makefile b/lang/golang/golang-bootstrap/Makefile index 86677770c..391e2a256 100644 --- a/lang/golang/golang-bootstrap/Makefile +++ b/lang/golang/golang-bootstrap/Makefile @@ -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) diff --git a/lang/golang/golang-compiler.mk b/lang/golang/golang-compiler.mk index 43dc8a7f1..c304a8d41 100644 --- a/lang/golang/golang-compiler.mk +++ b/lang/golang/golang-compiler.mk @@ -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) diff --git a/lang/golang/golang-values.mk b/lang/golang/golang-values.mk index e47e1323b..64913f353 100644 --- a/lang/golang/golang-values.mk +++ b/lang/golang/golang-values.mk @@ -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 diff --git a/lang/golang/golang-version.mk b/lang/golang/golang-version.mk index 507c36126..db7627928 100644 --- a/lang/golang/golang-version.mk +++ b/lang/golang/golang-version.mk @@ -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 diff --git a/lang/golang/golang1.25/Makefile b/lang/golang/golang1.25/Makefile index ea3ee2685..700bd92c3 100644 --- a/lang/golang/golang1.25/Makefile +++ b/lang/golang/golang1.25/Makefile @@ -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)) diff --git a/lang/golang/golang1.25/test.sh b/lang/golang/golang1.25/test.sh old mode 100644 new mode 100755 index e7c4a8122..09d3e3fca --- a/lang/golang/golang1.25/test.sh +++ b/lang/golang/golang1.25/test.sh @@ -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 "