[1/1] pkg-golang: add strip, asmflags, gcflags support

Message ID 20190124081834.17534-1-christian@paral.in
State New
Headers show
Series
  • [1/1] pkg-golang: add strip, asmflags, gcflags support
Related show

Commit Message

Christian Stewart Jan. 24, 2019, 8:18 a.m.
Adding package-level variables to set asmflags, gcflags.

Conditionally sets ldflags -s -w when buildroot is configured to strip binaries.

Signed-off-by: Christian Stewart <christian@paral.in>
---
 package/pkg-golang.mk | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Anisse Astier Jan. 24, 2019, 9:08 a.m. | #1
On Thu, Jan 24, 2019 at 12:18:34AM -0800, Christian Stewart wrote:
> Adding package-level variables to set asmflags, gcflags.
> 
> Conditionally sets ldflags -s -w when buildroot is configured to strip binaries.
> 
> Signed-off-by: Christian Stewart <christian@paral.in>
> ---
>  package/pkg-golang.mk | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/package/pkg-golang.mk b/package/pkg-golang.mk
> index 4f2c7e77e1..79ebec94be 100644
> --- a/package/pkg-golang.mk
> +++ b/package/pkg-golang.mk
> @@ -55,7 +55,15 @@ ifeq ($(BR2_STATIC_LIBS),y)
>  $(2)_LDFLAGS += -extldflags '-static'
>  endif
>  
> +ifeq ($(BR2_STRIP_strip),y)
> +$(2)_LDFLAGS += -s -w
> +endif
> +
> +$(2)_ASMFLAGS += -trimpath=$(BUILD_DIR)
> +$(2)_GCFLAGS  += -trimpath=$(BUILD_DIR)

I see that you added trimpath here, which is useful for removing the
build path from the binaries, (and having reproducible builds), but it
isn't mentionned in the commit message.

As a sidenote, it seems that this option is broken when building a
package with go modules:
https://github.com/golang/go/issues/28008

Regards,

Anisse
Christian Stewart Jan. 25, 2019, 2:16 a.m. | #2
Anisse,

Anisse Astier <anisse@astier.eu> writes:
> I see that you added trimpath here, which is useful for removing the
> build path from the binaries, (and having reproducible builds), but it
> isn't mentionned in the commit message.

Yes, I had originally intended for this to be a separate commit, but the
functionality works as intended and I am happy to keep it as part of
this commmit.

> As a sidenote, it seems that this option is broken when building a
> package with go modules:
> https://github.com/golang/go/issues/28008

There will never be a Buildroot core package with Go modules in use nor
enabled, as this would imply a separate network resource fetching
mechanism from the core Buildroot tarball download + hash cycle.

Even so, the option would then not break the build, but would merely
fail to trim the paths in the output binary.

Best,
Christian

Patch

diff --git a/package/pkg-golang.mk b/package/pkg-golang.mk
index 4f2c7e77e1..79ebec94be 100644
--- a/package/pkg-golang.mk
+++ b/package/pkg-golang.mk
@@ -55,7 +55,15 @@  ifeq ($(BR2_STATIC_LIBS),y)
 $(2)_LDFLAGS += -extldflags '-static'
 endif
 
+ifeq ($(BR2_STRIP_strip),y)
+$(2)_LDFLAGS += -s -w
+endif
+
+$(2)_ASMFLAGS += -trimpath=$(BUILD_DIR)
+$(2)_GCFLAGS  += -trimpath=$(BUILD_DIR)
 $(2)_BUILD_OPTS += \
+	-asmflags "$$($(2)_ASMFLAGS)" \
+	-gcflags "$$($(2)_GCFLAGS)" \
 	-ldflags "$$($(2)_LDFLAGS)" \
 	-tags "$$($(2)_TAGS)" \
 	-p $(PARALLEL_JOBS)