From: Ian Lance Taylor Date: Thu, 16 Apr 2015 17:08:20 +0000 (-0700) Subject: cmd/internal/ld, cmd/dist: support -buildmode=c-archive on linux X-Git-Tag: go1.5beta1~1041 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=449969a4ac5e9e1e5c41dac645e2b75a8a95fc08;p=gostls13.git cmd/internal/ld, cmd/dist: support -buildmode=c-archive on linux Change-Id: I8c97751a79b57197428b0f0b66fc9575708a2eb0 Reviewed-on: https://go-review.googlesource.com/8979 Run-TryBot: Ian Lance Taylor Reviewed-by: David Crawshaw --- diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go index 44f78d7c13..8931ced14b 100644 --- a/src/cmd/dist/test.go +++ b/src/cmd/dist/test.go @@ -272,8 +272,7 @@ func (t *tester) registerTests() { } else if t.hasBash() && t.goos != "android" && !iOS { t.registerTest("testso", "../misc/cgo/testso", "./test.bash") } - if t.extLink() && t.goos == "darwin" && t.goarch == "amd64" { - // TODO(crawshaw): add darwin/arm{,64} + if t.buildmode("c-archive") { t.registerTest("testcarchive", "../misc/cgo/testcarchive", "./test.bash") } if t.gohostos == "linux" && t.goarch == "amd64" { @@ -370,6 +369,26 @@ func (t *tester) extLink() bool { return false } +func (t *tester) buildmode(mode string) bool { + switch mode { + case "c-archive": + switch { + case !t.extLink(): + return false + case t.goos == "darwin" && t.goarch == "amd64": + // TODO(crawshaw): add darwin/arm{,64} + return true + case t.goos == "linux" && t.goarch == "amd64": + return true + default: + return false + } + default: + log.Fatal("internal error: unknown buildmode %s", mode) + return false + } +} + func (t *tester) cgoTest() error { env := mergeEnvLists([]string{"GOTRACEBACK=2"}, os.Environ()) diff --git a/src/cmd/internal/ld/lib.go b/src/cmd/internal/ld/lib.go index 390d320be2..c18ae86cb5 100644 --- a/src/cmd/internal/ld/lib.go +++ b/src/cmd/internal/ld/lib.go @@ -288,7 +288,9 @@ func (mode *BuildMode) Set(s string) error { case "exe": *mode = BuildmodeExe case "c-archive": - if goos != "darwin" { + switch goos { + case "darwin", "linux": + default: return badmode() } *mode = BuildmodeCArchive