|
|
@@ -46,6 +46,7 @@ var (
|
|
|
extraTags string
|
|
|
installSuffix string
|
|
|
pkgdir string
|
|
|
+ debugBinary bool
|
|
|
)
|
|
|
|
|
|
type target struct {
|
|
|
@@ -358,6 +359,7 @@ func parseFlags() {
|
|
|
flag.StringVar(&extraTags, "tags", extraTags, "Extra tags, space separated")
|
|
|
flag.StringVar(&installSuffix, "installsuffix", installSuffix, "Install suffix, optional")
|
|
|
flag.StringVar(&pkgdir, "pkgdir", "", "Set -pkgdir parameter for `go build`")
|
|
|
+ flag.BoolVar(&debugBinary, "debug-binary", debugBinary, "Create unoptimized binary to use with delve, set -gcflags='-N -l' and omit -ldflags")
|
|
|
flag.Parse()
|
|
|
}
|
|
|
|
|
|
@@ -419,20 +421,9 @@ func install(target target, tags []string) {
|
|
|
log.Fatal(err)
|
|
|
}
|
|
|
os.Setenv("GOBIN", filepath.Join(cwd, "bin"))
|
|
|
- args := []string{"install", "-v", "-ldflags", ldflags()}
|
|
|
- if pkgdir != "" {
|
|
|
- args = append(args, "-pkgdir", pkgdir)
|
|
|
- }
|
|
|
- if len(tags) > 0 {
|
|
|
- args = append(args, "-tags", strings.Join(tags, " "))
|
|
|
- }
|
|
|
- if installSuffix != "" {
|
|
|
- args = append(args, "-installsuffix", installSuffix)
|
|
|
- }
|
|
|
- if race {
|
|
|
- args = append(args, "-race")
|
|
|
- }
|
|
|
- args = append(args, target.buildPkg)
|
|
|
+
|
|
|
+ args := []string{"install", "-v"}
|
|
|
+ args = appendParameters(args, tags, target)
|
|
|
|
|
|
os.Setenv("GOOS", goos)
|
|
|
os.Setenv("GOARCH", goarch)
|
|
|
@@ -445,7 +436,16 @@ func build(target target, tags []string) {
|
|
|
tags = append(target.tags, tags...)
|
|
|
|
|
|
rmr(target.BinaryName())
|
|
|
- args := []string{"build", "-i", "-v", "-ldflags", ldflags()}
|
|
|
+
|
|
|
+ args := []string{"build", "-i", "-v"}
|
|
|
+ args = appendParameters(args, tags, target)
|
|
|
+
|
|
|
+ os.Setenv("GOOS", goos)
|
|
|
+ os.Setenv("GOARCH", goarch)
|
|
|
+ runPrint("go", args...)
|
|
|
+}
|
|
|
+
|
|
|
+func appendParameters(args []string, tags []string, target target) []string {
|
|
|
if pkgdir != "" {
|
|
|
args = append(args, "-pkgdir", pkgdir)
|
|
|
}
|
|
|
@@ -458,11 +458,19 @@ func build(target target, tags []string) {
|
|
|
if race {
|
|
|
args = append(args, "-race")
|
|
|
}
|
|
|
- args = append(args, target.buildPkg)
|
|
|
|
|
|
- os.Setenv("GOOS", goos)
|
|
|
- os.Setenv("GOARCH", goarch)
|
|
|
- runPrint("go", args...)
|
|
|
+ if !debugBinary {
|
|
|
+ // Regular binaries get version tagged and skip some debug symbols
|
|
|
+ args = append(args, "-ldflags", ldflags())
|
|
|
+ } else {
|
|
|
+ // -gcflags to disable optimizations and inlining. Skip -ldflags
|
|
|
+ // because `Could not launch program: decoding dwarf section info at
|
|
|
+ // offset 0x0: too short` on 'dlv exec ...' see
|
|
|
+ // https://github.com/derekparker/delve/issues/79
|
|
|
+ args = append(args, "-gcflags", "-N -l")
|
|
|
+ }
|
|
|
+
|
|
|
+ return append(args, target.buildPkg)
|
|
|
}
|
|
|
|
|
|
func buildTar(target target) {
|