build: Add support for debug-only binary (i.e., dlv)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4633 LGTM: AudriusButkevicius
This commit is contained in:
parent
53f4dfe83c
commit
e6551c8485
46
build.go
46
build.go
|
@ -46,6 +46,7 @@ var (
|
||||||
extraTags string
|
extraTags string
|
||||||
installSuffix string
|
installSuffix string
|
||||||
pkgdir string
|
pkgdir string
|
||||||
|
debugBinary bool
|
||||||
)
|
)
|
||||||
|
|
||||||
type target struct {
|
type target struct {
|
||||||
|
@ -358,6 +359,7 @@ func parseFlags() {
|
||||||
flag.StringVar(&extraTags, "tags", extraTags, "Extra tags, space separated")
|
flag.StringVar(&extraTags, "tags", extraTags, "Extra tags, space separated")
|
||||||
flag.StringVar(&installSuffix, "installsuffix", installSuffix, "Install suffix, optional")
|
flag.StringVar(&installSuffix, "installsuffix", installSuffix, "Install suffix, optional")
|
||||||
flag.StringVar(&pkgdir, "pkgdir", "", "Set -pkgdir parameter for `go build`")
|
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()
|
flag.Parse()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,20 +421,9 @@ func install(target target, tags []string) {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
os.Setenv("GOBIN", filepath.Join(cwd, "bin"))
|
os.Setenv("GOBIN", filepath.Join(cwd, "bin"))
|
||||||
args := []string{"install", "-v", "-ldflags", ldflags()}
|
|
||||||
if pkgdir != "" {
|
args := []string{"install", "-v"}
|
||||||
args = append(args, "-pkgdir", pkgdir)
|
args = appendParameters(args, tags, target)
|
||||||
}
|
|
||||||
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)
|
|
||||||
|
|
||||||
os.Setenv("GOOS", goos)
|
os.Setenv("GOOS", goos)
|
||||||
os.Setenv("GOARCH", goarch)
|
os.Setenv("GOARCH", goarch)
|
||||||
|
@ -445,7 +436,16 @@ func build(target target, tags []string) {
|
||||||
tags = append(target.tags, tags...)
|
tags = append(target.tags, tags...)
|
||||||
|
|
||||||
rmr(target.BinaryName())
|
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 != "" {
|
if pkgdir != "" {
|
||||||
args = append(args, "-pkgdir", pkgdir)
|
args = append(args, "-pkgdir", pkgdir)
|
||||||
}
|
}
|
||||||
|
@ -458,11 +458,19 @@ func build(target target, tags []string) {
|
||||||
if race {
|
if race {
|
||||||
args = append(args, "-race")
|
args = append(args, "-race")
|
||||||
}
|
}
|
||||||
args = append(args, target.buildPkg)
|
|
||||||
|
|
||||||
os.Setenv("GOOS", goos)
|
if !debugBinary {
|
||||||
os.Setenv("GOARCH", goarch)
|
// Regular binaries get version tagged and skip some debug symbols
|
||||||
runPrint("go", args...)
|
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) {
|
func buildTar(target target) {
|
||||||
|
|
Loading…
Reference in New Issue