// 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.//go:generate go test . -run=^TestGenerated$ -fixpackage platform// An OSArch is a pair of GOOS and GOARCH values indicating a platform.typeOSArchstruct { GOOS, GOARCH string}func ( OSArch) () string {return .GOOS + "/" + .GOARCH}// 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 (, string) bool {switch {case"linux":return == "amd64" || == "ppc64le" || == "arm64" || == "s390x"case"darwin":return == "amd64" || == "arm64"case"freebsd", "netbsd", "windows":return == "amd64"default:returnfalse }}// MSanSupported reports whether goos/goarch supports the memory// sanitizer option.func (, string) bool {switch {case"linux":return == "amd64" || == "arm64" || == "loong64"case"freebsd":return == "amd64"default:returnfalse }}// ASanSupported reports whether goos/goarch supports the address// sanitizer option.func (, string) bool {switch {case"linux":return == "arm64" || == "amd64" || == "loong64" || == "riscv64" || == "ppc64le"default:returnfalse }}// FuzzSupported reports whether goos/goarch supports fuzzing// ('go test -fuzz=.').func (, string) bool {switch {case"darwin", "freebsd", "linux", "windows":returntruedefault:returnfalse }}// FuzzInstrumented reports whether fuzzing on goos/goarch uses coverage// instrumentation. (FuzzInstrumented implies FuzzSupported.)func (, string) bool {switch {case"amd64", "arm64":// TODO(#14565): support more architectures.returnFuzzSupported(, )default:returnfalse }}// MustLinkExternal reports whether goos/goarch requires external linking// with or without cgo dependencies.func (, string, bool) bool {if {switch {case"loong64", "mips", "mipsle", "mips64", "mips64le":// Internally linking cgo is incomplete on some architectures. // https://go.dev/issue/14449returntruecase"arm64":if == "windows" {// windows/arm64 internal linking is not implemented.returntrue }case"ppc64":// Big Endian PPC64 cgo internal linking is not implemented for aix or linux. // https://go.dev/issue/8912if == "aix" || == "linux" {returntrue } }switch {case"android":returntruecase"dragonfly":// It seems that on Dragonfly thread local storage is // set up by the dynamic linker, so internal cgo linking // doesn't work. Test case is "go test runtime/cgo".returntrue } }switch {case"android":if != "arm64" {returntrue }case"ios":if == "arm64" {returntrue } }returnfalse}// BuildModeSupported reports whether goos/goarch supports the given build mode// using the given compiler.// There is a copy of this function in cmd/dist/test.go.func (, , , string) bool {if == "gccgo" {returntrue }if , := distInfo[OSArch{, }]; ! {returnfalse// platform unrecognized } := + "/" + switch {case"archive":returntruecase"c-archive":switch {case"aix", "darwin", "ios", "windows":returntruecase"linux":switch {case"386", "amd64", "arm", "armbe", "arm64", "arm64be", "loong64", "ppc64le", "riscv64", "s390x":// linux/ppc64 not supported because it does // not support external linking mode yet.returntruedefault:// Other targets do not support -shared, // per ParseFlags in // cmd/compile/internal/base/flag.go. // For c-archive the Go tool passes -shared, // so that the result is suitable for inclusion // in a PIE or shared library.returnfalse }case"freebsd":return == "amd64" }returnfalsecase"c-shared":switch {case"linux/amd64", "linux/arm", "linux/arm64", "linux/loong64", "linux/386", "linux/ppc64le", "linux/riscv64", "linux/s390x","android/amd64", "android/arm", "android/arm64", "android/386","freebsd/amd64","darwin/amd64", "darwin/arm64","windows/amd64", "windows/386", "windows/arm64":returntrue }returnfalsecase"default":returntruecase"exe":returntruecase"pie":switch {case"linux/386", "linux/amd64", "linux/arm", "linux/arm64", "linux/loong64", "linux/ppc64le", "linux/riscv64", "linux/s390x","android/amd64", "android/arm", "android/arm64", "android/386","freebsd/amd64","darwin/amd64", "darwin/arm64","ios/amd64", "ios/arm64","aix/ppc64","openbsd/arm64","windows/386", "windows/amd64", "windows/arm", "windows/arm64":returntrue }returnfalsecase"shared":switch {case"linux/386", "linux/amd64", "linux/arm", "linux/arm64", "linux/ppc64le", "linux/s390x":returntrue }returnfalsecase"plugin":switch {case"linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/loong64", "linux/s390x", "linux/ppc64le","android/amd64", "android/386","darwin/amd64", "darwin/arm64","freebsd/amd64":returntrue }returnfalsedefault:returnfalse }}func (, string) bool {switch + "/" + {case"android/arm64","darwin/amd64", "darwin/arm64","linux/amd64", "linux/arm64", "linux/ppc64le","windows/386", "windows/amd64", "windows/arm", "windows/arm64":returntrue }returnfalse}// DefaultPIE reports whether goos/goarch produces a PIE binary when using the// "default" buildmode. On Windows this is affected by -race,// so force the caller to pass that in to centralize that choice.func (, string, bool) bool {switch {case"android", "ios":returntruecase"windows":if {// PIE is not supported with -race on windows; // see https://go.dev/cl/416174.returnfalse }returntruecase"darwin":returntrue }returnfalse}// ExecutableHasDWARF reports whether the linked executable includes DWARF// symbols on goos/goarch.func (, string) bool {switch {case"plan9", "ios":returnfalse }returntrue}// osArchInfo describes information about an OSArch extracted from cmd/dist and// stored in the generated distInfo map.type osArchInfo struct { CgoSupported bool FirstClass bool Broken bool}// CgoSupported reports whether goos/goarch supports cgo.func (, string) bool {returndistInfo[OSArch{, }].CgoSupported}// FirstClass reports whether goos/goarch is considered a “first class” port.// (See https://go.dev/wiki/PortingPolicy#first-class-ports.)func (, string) bool {returndistInfo[OSArch{, }].FirstClass}// Broken reportsr whether goos/goarch is considered a broken port.// (See https://go.dev/wiki/PortingPolicy#broken-ports.)func (, string) bool {returndistInfo[OSArch{, }].Broken}
The pages are generated with Goldsv0.7.0-preview. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.