git.iko.soy/typeable/nixpkgs
on master help sign in
buildGoModule/buildGoPackage: Introduce ldflags argument

Previously it was not possible to define multiple ldflags, since only the last definition applies, and there's some quoting issues with `buildFlagsArray`. With the new `ldflags` argument it's possible to do this, e.g. ldflags = drv.ldflags or [] ++ [ "-X main.Version=1.0" ] can now properly append a flag without clearing all previous ldflags.

commit155ae682a5122960aed61724b4ed8c9711b53e99 authorSilvan Mosberger <contact@infinisil.com> dateThu 3 Jun 2021, 17:45 (5 years ago) parent99697d8
3 files changed+19−10
doc/languages-frameworks/go.section.md+11−8 pkgs/development/go-modules/generic/default.nix+4−1 pkgs/development/go-packages/generic/default.nix+4−1
doc/languages-frameworks/go.section.md+11−8
@@ -114,21 +114,24 @@ Both `buildGoModule` and `buildGoPackage` can be tweaked to behave slightly diff
114114
115115### `buildFlagsArray` and `buildFlags`: {#ex-goBuildFlags-noarray}
116116
117−These attributes set build flags supported by `go build`. We recommend using `buildFlagsArray`. The most common use case of these attributes is to make the resulting executable aware of its own version. For example:
117+These attributes set build flags supported by `go build`. We recommend using `buildFlagsArray`.
118118
119119```nix
120120 buildFlagsArray = [
121− # Note: single quotes are not needed.
122− "-ldflags=-X main.Version=${version} -X main.Commit=${version}"
121+ "-tags=release"
123122 ];
124123```
125124
125+### `ldflags` {#var-go-ldflags}
126+
127+Arguments to pass to the Go linker tool via the `-ldflags` argument of `go build`. The most common use case for this argument is to make the resulting executable aware of its own version. For example:
128+
126129```nix
127− buildFlagsArray = ''
128− -ldflags=
129− -X main.Version=${version}
130− -X main.Commit=${version}
131− '';
130+ ldflags = [
131+ "-s" "-w"
132+ "-X main.Version=${version}"
133+ "-X main.Commit=${version}"
134+ ];
132135```
133136
134137### `deleteVendor` {#var-go-deleteVendor}
pkgs/development/go-modules/generic/default.nix+4−1
@@ -7,6 +7,9 @@
77, passthru ? {}
88, patches ? []
99
10+# Go linker flags, passed to go via -ldflags
11+, ldflags ? []
12+
1013# A function to override the go-modules derivation
1114, overrideModAttrs ? (_oldAttrs : {})
1215
@@ -153,7 +156,7 @@ let
153156 echo "$d" | grep -q "\(/_\|examples\|Godeps\|testdata\)" && return 0
154157 [ -n "$excludedPackages" ] && echo "$d" | grep -q "$excludedPackages" && return 0
155158 local OUT
156− if ! OUT="$(go $cmd $buildFlags "''${buildFlagsArray[@]}" -v -p $NIX_BUILD_CORES $d 2>&1)"; then
159+ if ! OUT="$(go $cmd $buildFlags "''${buildFlagsArray[@]}" ''${ldflags:+-ldflags="$ldflags"} -v -p $NIX_BUILD_CORES $d 2>&1)"; then
157160 if ! echo "$OUT" | grep -qE '(no( buildable| non-test)?|build constraints exclude all) Go (source )?files'; then
158161 echo "$OUT" >&2
159162 return 1
pkgs/development/go-packages/generic/default.nix+4−1
@@ -7,6 +7,9 @@
77, preFixup ? ""
88, shellHook ? ""
99
10+# Go linker flags, passed to go via -ldflags
11+, ldflags ? []
12+
1013# We want parallel builds by default
1114, enableParallelBuilding ? true
1215
@@ -148,7 +151,7 @@ let
148151 echo "$d" | grep -q "\(/_\|examples\|Godeps\)" && return 0
149152 [ -n "$excludedPackages" ] && echo "$d" | grep -q "$excludedPackages" && return 0
150153 local OUT
151− if ! OUT="$(go $cmd $buildFlags "''${buildFlagsArray[@]}" -v -p $NIX_BUILD_CORES $d 2>&1)"; then
154+ if ! OUT="$(go $cmd $buildFlags "''${buildFlagsArray[@]}" ''${ldflags:+-ldflags="$ldflags"} -v -p $NIX_BUILD_CORES $d 2>&1)"; then
152155 if ! echo "$OUT" | grep -qE '(no( buildable| non-test)?|build constraints exclude all) Go (source )?files'; then
153156 echo "$OUT" >&2
154157 return 1