diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go index 44f78d7c13d..8931ced14b3 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 390d320be2b..c18ae86cb5c 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