mirror of https://github.com/golang/go.git
cmd/go: implicitly include math in a shared library on arm
In the same manner in which runtime/cgo is included on other architectures. Change-Id: I90a5ad8585248b2566d763d33994a600508d89cb Reviewed-on: https://go-review.googlesource.com/14221 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
78c05b8657
commit
c6f280584c
|
|
@ -982,7 +982,11 @@ func (b *builder) action1(mode buildMode, depMode buildMode, p *Package, looksha
|
||||||
|
|
||||||
func (b *builder) libaction(libname string, pkgs []*Package, mode, depMode buildMode) *action {
|
func (b *builder) libaction(libname string, pkgs []*Package, mode, depMode buildMode) *action {
|
||||||
a := &action{}
|
a := &action{}
|
||||||
if mode == modeBuild {
|
switch mode {
|
||||||
|
default:
|
||||||
|
fatalf("unrecognized mode %v", mode)
|
||||||
|
|
||||||
|
case modeBuild:
|
||||||
a.f = (*builder).linkShared
|
a.f = (*builder).linkShared
|
||||||
a.target = filepath.Join(b.work, libname)
|
a.target = filepath.Join(b.work, libname)
|
||||||
for _, p := range pkgs {
|
for _, p := range pkgs {
|
||||||
|
|
@ -991,14 +995,15 @@ func (b *builder) libaction(libname string, pkgs []*Package, mode, depMode build
|
||||||
}
|
}
|
||||||
a.deps = append(a.deps, b.action(depMode, depMode, p))
|
a.deps = append(a.deps, b.action(depMode, depMode, p))
|
||||||
}
|
}
|
||||||
} else if mode == modeInstall {
|
|
||||||
|
case modeInstall:
|
||||||
// Currently build mode shared forces external linking mode, and
|
// Currently build mode shared forces external linking mode, and
|
||||||
// external linking mode forces an import of runtime/cgo. So if it
|
// external linking mode forces an import of runtime/cgo (and
|
||||||
// was not passed on the command line and it is not present in
|
// math on arm). So if it was not passed on the command line and
|
||||||
// another shared library, add it here.
|
// it is not present in another shared library, add it here.
|
||||||
seencgo := false
|
|
||||||
_, gccgo := buildToolchain.(gccgoToolchain)
|
_, gccgo := buildToolchain.(gccgoToolchain)
|
||||||
if !gccgo {
|
if !gccgo {
|
||||||
|
seencgo := false
|
||||||
for _, p := range pkgs {
|
for _, p := range pkgs {
|
||||||
seencgo = seencgo || (p.Standard && p.ImportPath == "runtime/cgo")
|
seencgo = seencgo || (p.Standard && p.ImportPath == "runtime/cgo")
|
||||||
}
|
}
|
||||||
|
|
@ -1018,6 +1023,28 @@ func (b *builder) libaction(libname string, pkgs []*Package, mode, depMode build
|
||||||
pkgs = append(pkgs, p)
|
pkgs = append(pkgs, p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if goarch == "arm" {
|
||||||
|
seenmath := false
|
||||||
|
for _, p := range pkgs {
|
||||||
|
seenmath = seenmath || (p.Standard && p.ImportPath == "math")
|
||||||
|
}
|
||||||
|
if !seenmath {
|
||||||
|
var stk importStack
|
||||||
|
p := loadPackage("math", &stk)
|
||||||
|
if p.Error != nil {
|
||||||
|
fatalf("load math: %v", p.Error)
|
||||||
|
}
|
||||||
|
computeStale(p)
|
||||||
|
// If math is in another shared library, then that's
|
||||||
|
// also the shared library that contains runtime, so
|
||||||
|
// something will depend on it and so math's staleness
|
||||||
|
// will be checked when processing that library.
|
||||||
|
if p.Shlib == "" || p.Shlib == libname {
|
||||||
|
pkgs = append([]*Package{}, pkgs...)
|
||||||
|
pkgs = append(pkgs, p)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Figure out where the library will go.
|
// Figure out where the library will go.
|
||||||
|
|
@ -1068,8 +1095,6 @@ func (b *builder) libaction(libname string, pkgs []*Package, mode, depMode build
|
||||||
shlibnameaction.deps = append(shlibnameaction.deps, buildAction)
|
shlibnameaction.deps = append(shlibnameaction.deps, buildAction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
fatalf("unregonized mode %v", mode)
|
|
||||||
}
|
}
|
||||||
return a
|
return a
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue