gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

supported.go (2952B)


      1 // Copyright 2018 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package sys
      6 
      7 // RaceDetectorSupported reports whether goos/goarch supports the race
      8 // detector. There is a copy of this function in cmd/dist/test.go.
      9 // Race detector only supports 48-bit VMA on arm64. But it will always
     10 // return true for arm64, because we don't have VMA size information during
     11 // the compile time.
     12 func RaceDetectorSupported(goos, goarch string) bool {
     13 	switch goos {
     14 	case "linux":
     15 		return goarch == "amd64" || goarch == "ppc64le" || goarch == "arm64"
     16 	case "darwin", "freebsd", "netbsd", "windows":
     17 		return goarch == "amd64"
     18 	default:
     19 		return false
     20 	}
     21 }
     22 
     23 // MSanSupported reports whether goos/goarch supports the memory
     24 // sanitizer option. There is a copy of this function in cmd/dist/test.go.
     25 func MSanSupported(goos, goarch string) bool {
     26 	switch goos {
     27 	case "linux":
     28 		return goarch == "amd64" || goarch == "arm64"
     29 	default:
     30 		return false
     31 	}
     32 }
     33 
     34 // MustLinkExternal reports whether goos/goarch requires external linking.
     35 func MustLinkExternal(goos, goarch string) bool {
     36 	switch goos {
     37 	case "android":
     38 		if goarch != "arm64" {
     39 			return true
     40 		}
     41 	case "darwin":
     42 		if goarch == "arm64" {
     43 			return true
     44 		}
     45 	}
     46 	return false
     47 }
     48 
     49 // BuildModeSupported reports whether goos/goarch supports the given build mode
     50 // using the given compiler.
     51 func BuildModeSupported(compiler, buildmode, goos, goarch string) bool {
     52 	if compiler == "gccgo" {
     53 		return true
     54 	}
     55 
     56 	platform := goos + "/" + goarch
     57 
     58 	switch buildmode {
     59 	case "archive":
     60 		return true
     61 
     62 	case "c-archive":
     63 		// TODO(bcmills): This seems dubious.
     64 		// Do we really support c-archive mode on js/wasm‽
     65 		return platform != "linux/ppc64"
     66 
     67 	case "c-shared":
     68 		switch platform {
     69 		case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/ppc64le", "linux/s390x",
     70 			"android/amd64", "android/arm", "android/arm64", "android/386",
     71 			"freebsd/amd64",
     72 			"darwin/amd64",
     73 			"windows/amd64", "windows/386":
     74 			return true
     75 		}
     76 		return false
     77 
     78 	case "default":
     79 		return true
     80 
     81 	case "exe":
     82 		return true
     83 
     84 	case "pie":
     85 		switch platform {
     86 		case "linux/386", "linux/amd64", "linux/arm", "linux/arm64", "linux/ppc64le", "linux/s390x",
     87 			"android/amd64", "android/arm", "android/arm64", "android/386",
     88 			"freebsd/amd64",
     89 			"darwin/amd64",
     90 			"aix/ppc64",
     91 			"windows/386", "windows/amd64", "windows/arm":
     92 			return true
     93 		}
     94 		return false
     95 
     96 	case "shared":
     97 		switch platform {
     98 		case "linux/386", "linux/amd64", "linux/arm", "linux/arm64", "linux/ppc64le", "linux/s390x":
     99 			return true
    100 		}
    101 		return false
    102 
    103 	case "plugin":
    104 		switch platform {
    105 		case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/s390x", "linux/ppc64le",
    106 			"android/amd64", "android/arm", "android/arm64", "android/386",
    107 			"darwin/amd64",
    108 			"freebsd/amd64":
    109 			return true
    110 		}
    111 		return false
    112 
    113 	default:
    114 		return false
    115 	}
    116 }