mirror of
https://github.com/golang/go
synced 2024-11-16 23:14:42 -07:00
cmd/go: use the last -linkmode flag to determine external linking
Current linkmode checking in determining package dependencies doesn't take multiple -linkmode options into consideration, may lead to redundant dependency on 'runtime/cgo'. Fixes the problem and adds a testcase. Change-Id: Iac5ea9fb3ca5ef931201afd0f3441f41f946c919 Reviewed-on: https://go-review.googlesource.com/c/go/+/263497 Trust: Jay Conrod <jayconrod@google.com> Reviewed-by: Bryan C. Mills <bcmills@google.com>
This commit is contained in:
parent
b4c8b67adc
commit
61313dab52
@ -1978,16 +1978,20 @@ func externalLinkingForced(p *Package) bool {
|
||||
// external linking mode, as of course does
|
||||
// -ldflags=-linkmode=external. External linking mode forces
|
||||
// an import of runtime/cgo.
|
||||
// If there are multiple -linkmode options, the last one wins.
|
||||
pieCgo := cfg.BuildBuildmode == "pie" && !sys.InternalLinkPIESupported(cfg.BuildContext.GOOS, cfg.BuildContext.GOARCH)
|
||||
linkmodeExternal := false
|
||||
if p != nil {
|
||||
ldflags := BuildLdflags.For(p)
|
||||
for i, a := range ldflags {
|
||||
if a == "-linkmode=external" {
|
||||
linkmodeExternal = true
|
||||
}
|
||||
if a == "-linkmode" && i+1 < len(ldflags) && ldflags[i+1] == "external" {
|
||||
for i := len(ldflags) - 1; i >= 0; i-- {
|
||||
a := ldflags[i]
|
||||
if a == "-linkmode=external" ||
|
||||
a == "-linkmode" && i+1 < len(ldflags) && ldflags[i+1] == "external" {
|
||||
linkmodeExternal = true
|
||||
break
|
||||
} else if a == "-linkmode=internal" ||
|
||||
a == "-linkmode" && i+1 < len(ldflags) && ldflags[i+1] == "internal" {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -63,6 +63,10 @@ stderr 'link.* -X=math.pi=3'
|
||||
go build -n -ldflags=-X=math.pi=3
|
||||
stderr 'link.* -X=math.pi=3'
|
||||
|
||||
# cgo.a should not be a dependency of internally-linked go package
|
||||
go build -ldflags='-linkmode=external -linkmode=internal' -n prog.go
|
||||
! stderr 'packagefile .*runtime/cgo.a'
|
||||
|
||||
-- z1/z.go --
|
||||
package z1
|
||||
import _ "y"
|
||||
|
Loading…
Reference in New Issue
Block a user