123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- // Copyright 2018 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- package sys
- // RaceDetectorSupported reports whether goos/goarch supports the race
- // detector. There is a copy of this function in cmd/dist/test.go.
- // Race detector only supports 48-bit VMA on arm64. But it will always
- // return true for arm64, because we don't have VMA size information during
- // the compile time.
- func RaceDetectorSupported(goos, goarch string) bool {
- switch goos {
- case "linux":
- return goarch == "amd64" || goarch == "ppc64le" || goarch == "arm64"
- case "darwin", "freebsd", "netbsd", "windows":
- return goarch == "amd64"
- default:
- return false
- }
- }
- // MSanSupported reports whether goos/goarch supports the memory
- // sanitizer option. There is a copy of this function in cmd/dist/test.go.
- func MSanSupported(goos, goarch string) bool {
- switch goos {
- case "linux":
- return goarch == "amd64" || goarch == "arm64"
- default:
- return false
- }
- }
- // MustLinkExternal reports whether goos/goarch requires external linking.
- func MustLinkExternal(goos, goarch string) bool {
- switch goos {
- case "android":
- if goarch != "arm64" {
- return true
- }
- case "darwin":
- if goarch == "arm64" {
- return true
- }
- }
- return false
- }
- // BuildModeSupported reports whether goos/goarch supports the given build mode
- // using the given compiler.
- func BuildModeSupported(compiler, buildmode, goos, goarch string) bool {
- if compiler == "gccgo" {
- return true
- }
- platform := goos + "/" + goarch
- switch buildmode {
- case "archive":
- return true
- case "c-archive":
- // TODO(bcmills): This seems dubious.
- // Do we really support c-archive mode on js/wasm‽
- return platform != "linux/ppc64"
- case "c-shared":
- switch platform {
- case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/ppc64le", "linux/s390x",
- "android/amd64", "android/arm", "android/arm64", "android/386",
- "freebsd/amd64",
- "darwin/amd64",
- "windows/amd64", "windows/386":
- return true
- }
- return false
- case "default":
- return true
- case "exe":
- return true
- case "pie":
- switch platform {
- case "linux/386", "linux/amd64", "linux/arm", "linux/arm64", "linux/ppc64le", "linux/s390x",
- "android/amd64", "android/arm", "android/arm64", "android/386",
- "freebsd/amd64",
- "darwin/amd64",
- "aix/ppc64",
- "windows/386", "windows/amd64", "windows/arm":
- return true
- }
- return false
- case "shared":
- switch platform {
- case "linux/386", "linux/amd64", "linux/arm", "linux/arm64", "linux/ppc64le", "linux/s390x":
- return true
- }
- return false
- case "plugin":
- switch platform {
- case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/s390x", "linux/ppc64le",
- "android/amd64", "android/arm", "android/arm64", "android/386",
- "darwin/amd64",
- "freebsd/amd64":
- return true
- }
- return false
- default:
- return false
- }
- }
|