Github messages for voidlinux
 help / color / mirror / Atom feed
From: arp242 <arp242@users.noreply.github.com>
To: ml@inbox.vuxu.org
Subject: [PR PATCH] go: reduce package size by stripping binaries and removing pkg
Date: Sat, 17 Jul 2021 06:59:12 +0200	[thread overview]
Message-ID: <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-32016@inbox.vuxu.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 3042 bytes --]

There is a new pull request by arp242 against master on the void-packages repository

https://github.com/arp242/void-packages gosize
https://github.com/void-linux/void-packages/pull/32016

go: reduce package size by stripping binaries and removing pkg
A very long time ago strip didn't always work well on Go binaries, but this has
been fixed for almost a decade[1], so there is no need to keep this.

Just the standard strip hook won't work, as it will try (and fail) to strip
files in testdata and some other things. You can add nostrip_files, but that
would be a long list.

[1]: http://dominik.honnef.co/posts/2016/10/go-and-strip/

---

This also removes the pkg/linux_arch directory from the installation. This is a
pre-compiled cache of the standard library, and isn't really needed. The only
downside of not installing it is that the first compile will take a few seconds
longer (after which it's in the cache), and since the Go compiler is fairly fast
it's not a big deal IMO.

Alternatively, only pkg/cmd could be removed. This contains the cache for the go
command and "go tool [..]" commands, but you can never import this as it's all
"package main", so it's a useless cache AFAIK. It's also the biggest contributor
to the size.

---

Comparison of sizes (each one relative to the previous one):

	current       Package:   111M         Installed: 369M
	rm pkg/cmd    Package:    90M (-21M)  Installed: 268M (-101M)
	strip         Package:    62M (-28M)  Installed: 236M (-32M)
	rm pkg        Package:    45M (-17M)  Installed: 158M (-78M)

So that's a total saving of 66M in the package size, and 211M for the installed
size.

<!-- Mark items with [x] where applicable -->

#### General
- [ ] This is a new package and it conforms to the [quality requirements](https://github.com/void-linux/void-packages/blob/master/Manual.md#quality-requirements)

#### Have the results of the proposed changes been tested?
- [ ] I use the packages affected by the proposed changes on a regular basis and confirm this PR works for me
- [ ] I generally don't use the affected packages but briefly tested this PR

<!--
If GitHub CI cannot be used to validate the build result (for example, if the
build is likely to take several hours), make sure to
[skip CI](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration).
When skipping CI, uncomment and fill out the following section.
Note: for builds that are likely to complete in less than 2 hours, it is not
acceptable to skip CI.
-->
<!-- 
#### Does it build and run successfully? 
(Please choose at least one native build and, if supported, at least one cross build. More are better.)
- [ ] I built this PR locally for my native architecture, (ARCH-LIBC)
- [ ] I built this PR locally for these architectures (if supported. mark crossbuilds):
  - [ ] aarch64-musl
  - [ ] armv7l
  - [ ] armv6l-musl
-->


A patch file from https://github.com/void-linux/void-packages/pull/32016.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-gosize-32016.patch --]
[-- Type: text/x-diff, Size: 2705 bytes --]

From 2f92f90f8311826f696207a1490d5f72f5efdee2 Mon Sep 17 00:00:00 2001
From: Martin Tournoij <martin@arp242.net>
Date: Sat, 17 Jul 2021 12:52:50 +0800
Subject: [PATCH] go: reduce package size by stripping binaries and removing
 pkg

A very long time ago strip didn't always work well on Go binaries, but this has
been fixed for almost a decade[1], so there is no need to keep this.

Just the standard strip hook won't work, as it will try (and fail) to strip
files in testdata and some other things. You can add nostrip_files, but that
would be a long list.

[1]: http://dominik.honnef.co/posts/2016/10/go-and-strip/

---

This also removes the pkg/linux_arch directory from the installation. This is a
pre-compiled cache of the standard library, and isn't really needed. The only
downside of not installing it is that the first compile will take a few seconds
longer (after which it's in the cache), and since the Go compiler is fairly fast
it's not a big deal IMO.

Alternatively, only pkg/cmd could be removed. This contains the cache for the go
command and "go tool [..]" commands, but you can never import this as it's all
"package main", so it's a useless cache AFAIK. It's also the biggest contributor
to the size.

---

Comparison of sizes (each one relative to the previous one):

	current       Package:   111M         Installed: 369M
	rm pkg/cmd    Package:    90M (-21M)  Installed: 268M (-101M)
	strip         Package:    62M (-28M)  Installed: 236M (-32M)
	rm pkg        Package:    45M (-17M)  Installed: 158M (-78M)

So that's a total saving of 66M in the package size, and 211M for the installed
size.
---
 srcpkgs/go/template | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/srcpkgs/go/template b/srcpkgs/go/template
index 6ac24704525d..62ca10cb0224 100644
--- a/srcpkgs/go/template
+++ b/srcpkgs/go/template
@@ -1,7 +1,7 @@
 # Template file for 'go'
 pkgname=go
 version=1.16.5
-revision=1
+revision=2
 create_wrksrc=yes
 build_wrksrc=go
 hostmakedepends="go1.12-bootstrap"
@@ -64,6 +64,14 @@ do_install() {
 	cp -r doc misc -t ${DESTDIR}/usr/share/go
 	ln -s /usr/share/go/doc ${DESTDIR}/usr/lib/go/doc
 
+
+    if [ -z "$XBPS_DEBUG_PKGS" ]; then
+		/usr/bin/$STRIP \
+			${DESTDIR}/usr/bin/go \
+			${DESTDIR}/usr/bin/gofmt \
+			${DESTDIR}/usr/lib/go/pkg/tool/linux_${_goarch}/*
+	fi
+
 	# This is to make go get code.google.com/p/go-tour/gotour and
 	# then running the gotour executable work out of the box.
 	#
@@ -81,6 +89,7 @@ do_install() {
 	rm -f ${DESTDIR}/usr/lib/go/pkg/tool/*/api
 	rm -rf ${DESTDIR}/usr/lib/go/pkg/bootstrap
 	rm -rf ${DESTDIR}/usr/lib/go/pkg/obj
+	rm -rf ${DESTDIR}/usr/lib/go/pkg/linux_${_goarch}
 
 	vlicense LICENSE
 }

             reply	other threads:[~2021-07-17  4:59 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-17  4:59 arp242 [this message]
2021-07-17  5:00 ` arp242
2021-07-17  5:06 ` [PR PATCH] [Updated] " arp242
2021-07-17 19:41 ` arp242
2021-07-17 20:36 ` ericonr
2021-07-18  5:56 ` [PR PATCH] [Updated] " arp242
2021-07-18  6:07 ` arp242
2021-07-18 21:27 ` ericonr
2021-07-19  6:31 ` arp242
2021-07-20 19:00 ` [PR PATCH] [Updated] " arp242
2021-10-12  1:07 ` [PR PATCH] [Closed]: " arp242

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-32016@inbox.vuxu.org \
    --to=arp242@users.noreply.github.com \
    --cc=ml@inbox.vuxu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).