cmd/go: add AIX support
For gccgo code avoid --whole-archive and -(. Use -blibpath instead of -rpath. Reviewed-on: https://go-review.googlesource.com/86956 From-SVN: r256417
This commit is contained in:
parent
76e723a313
commit
fe9e170268
|
@ -1,4 +1,4 @@
|
|||
98b0942497bf2896127b71d851a79959ed3197cf
|
||||
8e20ba6b6c4906f2f0be4b0a1515d11e0f41fb29
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
|
|
@ -375,9 +375,15 @@ func (tools gccgoToolchain) link(b *Builder, root *Action, out, importcfg string
|
|||
}
|
||||
}
|
||||
|
||||
ldflags = append(ldflags, "-Wl,--whole-archive")
|
||||
wholeArchive := []string{"-Wl,--whole-archive"}
|
||||
noWholeArchive := []string{"-Wl,--no-whole-archive"}
|
||||
if cfg.Goos == "aix" {
|
||||
wholeArchive = nil
|
||||
noWholeArchive = nil
|
||||
}
|
||||
ldflags = append(ldflags, wholeArchive...)
|
||||
ldflags = append(ldflags, afiles...)
|
||||
ldflags = append(ldflags, "-Wl,--no-whole-archive")
|
||||
ldflags = append(ldflags, noWholeArchive...)
|
||||
|
||||
ldflags = append(ldflags, cgoldflags...)
|
||||
ldflags = append(ldflags, envList("CGO_LDFLAGS", "")...)
|
||||
|
@ -385,7 +391,9 @@ func (tools gccgoToolchain) link(b *Builder, root *Action, out, importcfg string
|
|||
ldflags = append(ldflags, root.Package.CgoLDFLAGS...)
|
||||
}
|
||||
|
||||
ldflags = str.StringList("-Wl,-(", ldflags, "-Wl,-)")
|
||||
if cfg.Goos != "aix" {
|
||||
ldflags = str.StringList("-Wl,-(", ldflags, "-Wl,-)")
|
||||
}
|
||||
|
||||
if root.buildID != "" {
|
||||
// On systems that normally use gold or the GNU linker,
|
||||
|
@ -396,17 +404,24 @@ func (tools gccgoToolchain) link(b *Builder, root *Action, out, importcfg string
|
|||
}
|
||||
}
|
||||
|
||||
var rLibPath string
|
||||
if cfg.Goos == "aix" {
|
||||
rLibPath = "-Wl,-blibpath="
|
||||
} else {
|
||||
rLibPath = "-Wl,-rpath="
|
||||
}
|
||||
for _, shlib := range shlibs {
|
||||
ldflags = append(
|
||||
ldflags,
|
||||
"-L"+filepath.Dir(shlib),
|
||||
"-Wl,-rpath="+filepath.Dir(shlib),
|
||||
rLibPath+filepath.Dir(shlib),
|
||||
"-l"+strings.TrimSuffix(
|
||||
strings.TrimPrefix(filepath.Base(shlib), "lib"),
|
||||
".so"))
|
||||
}
|
||||
|
||||
var realOut string
|
||||
goLibBegin := str.StringList(wholeArchive, "-lgolibbegin", noWholeArchive)
|
||||
switch buildmode {
|
||||
case "exe":
|
||||
if usesCgo && cfg.Goos == "linux" {
|
||||
|
@ -428,7 +443,8 @@ func (tools gccgoToolchain) link(b *Builder, root *Action, out, importcfg string
|
|||
// split-stack and non-split-stack code in a single -r
|
||||
// link, and libgo picks up non-split-stack code from
|
||||
// libffi.
|
||||
ldflags = append(ldflags, "-Wl,-r", "-nostdlib", "-Wl,--whole-archive", "-lgolibbegin", "-Wl,--no-whole-archive")
|
||||
ldflags = append(ldflags, "-Wl,-r", "-nostdlib")
|
||||
ldflags = append(ldflags, goLibBegin...)
|
||||
|
||||
if nopie := b.gccNoPie([]string{tools.linker()}); nopie != "" {
|
||||
ldflags = append(ldflags, nopie)
|
||||
|
@ -443,7 +459,9 @@ func (tools gccgoToolchain) link(b *Builder, root *Action, out, importcfg string
|
|||
out = out + ".o"
|
||||
|
||||
case "c-shared":
|
||||
ldflags = append(ldflags, "-shared", "-nostdlib", "-Wl,--whole-archive", "-lgolibbegin", "-Wl,--no-whole-archive", "-lgo", "-lgcc_s", "-lgcc", "-lc", "-lgcc")
|
||||
ldflags = append(ldflags, "-shared", "-nostdlib")
|
||||
ldflags = append(ldflags, goLibBegin...)
|
||||
ldflags = append(ldflags, "-lgo", "-lgcc_s", "-lgcc", "-lc", "-lgcc")
|
||||
case "shared":
|
||||
ldflags = append(ldflags, "-zdefs", "-shared", "-nostdlib", "-lgo", "-lgcc_s", "-lgcc", "-lc")
|
||||
|
||||
|
|
Loading…
Reference in New Issue