Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] go: reduce package size by stripping binaries and removing pkg
@ 2021-07-17  4:59 arp242
  2021-07-17  5:00 ` arp242
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: arp242 @ 2021-07-17  4:59 UTC (permalink / raw)
  To: ml

[-- 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
 }

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: go: reduce package size by stripping binaries and removing pkg
  2021-07-17  4:59 [PR PATCH] go: reduce package size by stripping binaries and removing pkg arp242
@ 2021-07-17  5:00 ` arp242
  2021-07-17  5:06 ` [PR PATCH] [Updated] " arp242
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: arp242 @ 2021-07-17  5:00 UTC (permalink / raw)
  To: ml

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

New comment by arp242 on void-packages repository

https://github.com/void-linux/void-packages/pull/32016#issuecomment-881829046

Comment:
@the-maldridge 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PR PATCH] [Updated] go: reduce package size by stripping binaries and removing pkg
  2021-07-17  4:59 [PR PATCH] go: reduce package size by stripping binaries and removing pkg arp242
  2021-07-17  5:00 ` arp242
@ 2021-07-17  5:06 ` arp242
  2021-07-17 19:41 ` arp242
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: arp242 @ 2021-07-17  5:06 UTC (permalink / raw)
  To: ml

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

There is an updated 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?
- [x] 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: 2698 bytes --]

From a507048471cf2865ccce800b2a5d2a4e59dc7063 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 | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/srcpkgs/go/template b/srcpkgs/go/template
index 6ac24704525d..3964e616d32d 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,13 @@ 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 +88,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
 }

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: go: reduce package size by stripping binaries and removing pkg
  2021-07-17  4:59 [PR PATCH] go: reduce package size by stripping binaries and removing pkg arp242
  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
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: arp242 @ 2021-07-17 19:41 UTC (permalink / raw)
  To: ml

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

New comment by arp242 on void-packages repository

https://github.com/void-linux/void-packages/pull/32016#issuecomment-881950114

Comment:
Another thing that could potentially be done is removing the test data:

```
$ cd /usr/lib/go/src
$ du -h | tail -1
91M

$ find . -name '*_test.go' -delete
$ du -h | tail -1
78M

$ find . -name 'testdata' -exec rm -rf {} \+
$ du -h | tail -1
62M
```

Bringing the total down a further 29M to 182M. I think we also don't need the source for `cmd` for the reasons outlined above (which is 27M), but I'll have to test in the morning to make sure.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: go: reduce package size by stripping binaries and removing pkg
  2021-07-17  4:59 [PR PATCH] go: reduce package size by stripping binaries and removing pkg arp242
                   ` (2 preceding siblings ...)
  2021-07-17 19:41 ` arp242
@ 2021-07-17 20:36 ` ericonr
  2021-07-18  5:56 ` [PR PATCH] [Updated] " arp242
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: ericonr @ 2021-07-17 20:36 UTC (permalink / raw)
  To: ml

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

New comment by ericonr on void-packages repository

https://github.com/void-linux/void-packages/pull/32016#issuecomment-881956642

Comment:
Thanks for the reference.

I think removing the testdata, thus allowing `nostrip=yes` to be removed from the template, is a good idea. Avoids manually calling `$STRIP`.

Your commit should document that Go 1.12, which we use for bootstrap and therefore matters re. what options the compiler can be built with, is from 2019 and new enough.

You should also remove `nostrip=yes` from the `go` build style (if the compiler can be stripped, so should the resulting binaries). The build style change should be a separate commit.

I'm not sure how I feel about removing the pre-built standard library... @Vaelatern and @Gottox might have thoughts on that idea, but I would initially be weakly against it. Removing `/usr/lib/go/pkg/linux_$arch/cmd/` sounds more reasonable; I don't think it can be imported either.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PR PATCH] [Updated] go: reduce package size by stripping binaries and removing pkg
  2021-07-17  4:59 [PR PATCH] go: reduce package size by stripping binaries and removing pkg arp242
                   ` (3 preceding siblings ...)
  2021-07-17 20:36 ` ericonr
@ 2021-07-18  5:56 ` arp242
  2021-07-18  6:07 ` arp242
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: arp242 @ 2021-07-18  5:56 UTC (permalink / raw)
  To: ml

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

There is an updated 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?
- [x] 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: 4853 bytes --]

From a507048471cf2865ccce800b2a5d2a4e59dc7063 Mon Sep 17 00:00:00 2001
From: Martin Tournoij <martin@arp242.net>
Date: Sat, 17 Jul 2021 12:52:50 +0800
Subject: [PATCH 1/2] 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 | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/srcpkgs/go/template b/srcpkgs/go/template
index 6ac24704525d..3964e616d32d 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,13 @@ 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 +88,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
 }

From ecda54ff8a59bfc292e5acc806d1754868339460 Mon Sep 17 00:00:00 2001
From: Martin Tournoij <martin@arp242.net>
Date: Sun, 18 Jul 2021 13:53:44 +0800
Subject: [PATCH 2/2] Also remove some stuff from src

Don't really need _test.go files or testdata

The cmd package is only useful for "go doc cmd/.."; which is referenced
in various places in "go help [..]". We can't really remove all of that
without breaking it, but we can at least remove the internal and
vendored stuff, which is quite a lot of data.
---
 srcpkgs/go/template | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/go/template b/srcpkgs/go/template
index 3964e616d32d..80ff8c94d1b6 100644
--- a/srcpkgs/go/template
+++ b/srcpkgs/go/template
@@ -12,7 +12,7 @@ homepage="http://golang.org/"
 changelog="https://golang.org/doc/devel/release.html"
 distfiles="https://golang.org/dl/go${version}.src.tar.gz"
 checksum=7bfa7e5908c7cc9e75da5ddf3066d7cbcf3fd9fa51945851325eebc17f50ba80
-nostrip=yes
+nopie=yes
 noverifyrdeps=yes
 
 case "${XBPS_TARGET_MACHINE}" in
@@ -64,12 +64,12 @@ 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
+	# Remove things from src that we don't need.
+	find ${DESTDIR}/usr/lib/go/src -name '*_test.go' -o -name 'testdata' -exec rm -rf {} \+
+	rm ${DESTDIR}/usr/lib/go/src/*.{bash,rc,bat,dist}
+
+	# cmd source is only useful for "go doc cmd/...".
+	find ${DESTDIR}/usr/lib/go/src/cmd -name 'internal' -o -name 'vendor' -exec rm -rf {} \+
 
 	# This is to make go get code.google.com/p/go-tour/gotour and
 	# then running the gotour executable work out of the box.
@@ -77,7 +77,6 @@ do_install() {
 	# Also, /usr/bin is the place for system-wide executables,
 	# not /usr/lib/go/bin. Users should use different paths by
 	# setting the appropriate environment variables.
-	#
 	ln -sf /usr/bin ${DESTDIR}/usr/lib/go/bin
 
 	# <dominikh> sigh. well, someone fix the template and add

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: go: reduce package size by stripping binaries and removing pkg
  2021-07-17  4:59 [PR PATCH] go: reduce package size by stripping binaries and removing pkg arp242
                   ` (4 preceding siblings ...)
  2021-07-18  5:56 ` [PR PATCH] [Updated] " arp242
@ 2021-07-18  6:07 ` arp242
  2021-07-18 21:27 ` ericonr
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: arp242 @ 2021-07-18  6:07 UTC (permalink / raw)
  To: ml

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

New comment by arp242 on void-packages repository

https://github.com/void-linux/void-packages/pull/32016#issuecomment-882004814

Comment:
> Your commit should document that Go 1.12, which we use for bootstrap and therefore matters re. what options the compiler can be built with, is from 2019 and new enough.

I don't really follow what you mean with that? As in, I understand the go-bootstrap package, but I don't follow how this relates to this change/commit? We don't really build anything with Go directly, it just uses the `make.bash` script (which assumes Go 1.4).

As for the pre-built stdlib, personally I don't really see a reason to ship it; especially for containers etc. it's comparatively large, and unlike Python's .pyc files they can just be generated as-needed, which also keeps all the Go cache in one place which is kinda nice IMO.

We'd have to add back `nostrip` back with the manual strip call if we do decide to add it btw, as the strip hook will try and fail to strip those `.a` files.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: go: reduce package size by stripping binaries and removing pkg
  2021-07-17  4:59 [PR PATCH] go: reduce package size by stripping binaries and removing pkg arp242
                   ` (5 preceding siblings ...)
  2021-07-18  6:07 ` arp242
@ 2021-07-18 21:27 ` ericonr
  2021-07-19  6:31 ` arp242
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: ericonr @ 2021-07-18 21:27 UTC (permalink / raw)
  To: ml

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

New comment by ericonr on void-packages repository

https://github.com/void-linux/void-packages/pull/32016#issuecomment-882118894

Comment:
 > I don't really follow what you mean with that? As in, I understand the go-bootstrap package, but I don't follow how this relates to this change/commit? We don't really build anything with Go directly, it just uses the make.bash script (which assumes Go 1.4).

This matters because the Go binaries would have been built with the old toolchain, so its runtime also needs to support stripped binaries. But I think we do a double bootstrap, so it might not matter after all. Would have to check.

> As for the pre-built stdlib, personally I don't really see a reason to ship it; especially for containers etc. it's comparatively large, and unlike Python's .pyc files they can just be generated as-needed, which also keeps all the Go cache in one place which is kinda nice IMO.

It's bigger for a container, but it's a "time saver", possibly... I'd like to have thoughts from other before merging that part.

> We'd have to add back nostrip back with the manual strip call if we do decide to add it btw, as the strip hook will try and fail to strip those .a files.

Ugh :/ That's a reasonable reason for it, unfortunately.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: go: reduce package size by stripping binaries and removing pkg
  2021-07-17  4:59 [PR PATCH] go: reduce package size by stripping binaries and removing pkg arp242
                   ` (6 preceding siblings ...)
  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
  9 siblings, 0 replies; 11+ messages in thread
From: arp242 @ 2021-07-19  6:31 UTC (permalink / raw)
  To: ml

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

New comment by arp242 on void-packages repository

https://github.com/void-linux/void-packages/pull/32016#issuecomment-882278456

Comment:
> This matters because the Go binaries would have been built with the old toolchain, so its runtime also needs to support stripped binaries. But I think we do a double bootstrap, so it might not matter after all. Would have to check.

Oh right; yeah, that's not an issue: the bootstrap Go is used to build a temporary Go compiler, which is then used to produce the resulting `/bin/go` etc, so Go 1.16.5 is compiled by Go 1.16.5. See https://golang.org/s/go15bootstrap

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PR PATCH] [Updated] go: reduce package size by stripping binaries and removing pkg
  2021-07-17  4:59 [PR PATCH] go: reduce package size by stripping binaries and removing pkg arp242
                   ` (7 preceding siblings ...)
  2021-07-19  6:31 ` arp242
@ 2021-07-20 19:00 ` arp242
  2021-10-12  1:07 ` [PR PATCH] [Closed]: " arp242
  9 siblings, 0 replies; 11+ messages in thread
From: arp242 @ 2021-07-20 19:00 UTC (permalink / raw)
  To: ml

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

There is an updated 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?
- [x] 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: 4853 bytes --]

From 66b8464642c1c27f9b4fdeb08a93e774e8a16a2b Mon Sep 17 00:00:00 2001
From: Martin Tournoij <martin@arp242.net>
Date: Sat, 17 Jul 2021 12:52:50 +0800
Subject: [PATCH 1/2] 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 | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/srcpkgs/go/template b/srcpkgs/go/template
index d9e2c5a9ba69..8a496fd23e84 100644
--- a/srcpkgs/go/template
+++ b/srcpkgs/go/template
@@ -1,7 +1,7 @@
 # Template file for 'go'
 pkgname=go
 version=1.16.6
-revision=1
+revision=2
 create_wrksrc=yes
 build_wrksrc=go
 hostmakedepends="go1.12-bootstrap"
@@ -64,6 +64,13 @@ 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 +88,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
 }

From 80cede50f4a6b0ff94d2103620b7cb20d3fe2b64 Mon Sep 17 00:00:00 2001
From: Martin Tournoij <martin@arp242.net>
Date: Sun, 18 Jul 2021 13:53:44 +0800
Subject: [PATCH 2/2] Also remove some stuff from src

Don't really need _test.go files or testdata

The cmd package is only useful for "go doc cmd/.."; which is referenced
in various places in "go help [..]". We can't really remove all of that
without breaking it, but we can at least remove the internal and
vendored stuff, which is quite a lot of data.
---
 srcpkgs/go/template | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/go/template b/srcpkgs/go/template
index 8a496fd23e84..55c9bde0e1a4 100644
--- a/srcpkgs/go/template
+++ b/srcpkgs/go/template
@@ -12,7 +12,7 @@ homepage="http://golang.org/"
 changelog="https://golang.org/doc/devel/release.html"
 distfiles="https://golang.org/dl/go${version}.src.tar.gz"
 checksum=a3a5d4bc401b51db065e4f93b523347a4d343ae0c0b08a65c3423b05a138037d
-nostrip=yes
+nopie=yes
 noverifyrdeps=yes
 
 case "${XBPS_TARGET_MACHINE}" in
@@ -64,12 +64,12 @@ 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
+	# Remove things from src that we don't need.
+	find ${DESTDIR}/usr/lib/go/src -name '*_test.go' -o -name 'testdata' -exec rm -rf {} \+
+	rm ${DESTDIR}/usr/lib/go/src/*.{bash,rc,bat,dist}
+
+	# cmd source is only useful for "go doc cmd/...".
+	find ${DESTDIR}/usr/lib/go/src/cmd -name 'internal' -o -name 'vendor' -exec rm -rf {} \+
 
 	# This is to make go get code.google.com/p/go-tour/gotour and
 	# then running the gotour executable work out of the box.
@@ -77,7 +77,6 @@ do_install() {
 	# Also, /usr/bin is the place for system-wide executables,
 	# not /usr/lib/go/bin. Users should use different paths by
 	# setting the appropriate environment variables.
-	#
 	ln -sf /usr/bin ${DESTDIR}/usr/lib/go/bin
 
 	# <dominikh> sigh. well, someone fix the template and add

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PR PATCH] [Closed]: go: reduce package size by stripping binaries and removing pkg
  2021-07-17  4:59 [PR PATCH] go: reduce package size by stripping binaries and removing pkg arp242
                   ` (8 preceding siblings ...)
  2021-07-20 19:00 ` [PR PATCH] [Updated] " arp242
@ 2021-10-12  1:07 ` arp242
  9 siblings, 0 replies; 11+ messages in thread
From: arp242 @ 2021-10-12  1:07 UTC (permalink / raw)
  To: ml

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

There's a closed pull request on the void-packages repository

go: reduce package size by stripping binaries and removing pkg
https://github.com/void-linux/void-packages/pull/32016

Description:
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?
- [x] 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
-->


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-10-12  1:07 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-17  4:59 [PR PATCH] go: reduce package size by stripping binaries and removing pkg arp242
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

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