1*4882a593SmuzhiyunBUILD_GOOS = "${@go_map_os(d.getVar('BUILD_OS'), d)}" 2*4882a593SmuzhiyunBUILD_GOARCH = "${@go_map_arch(d.getVar('BUILD_ARCH'), d)}" 3*4882a593SmuzhiyunBUILD_GOTUPLE = "${BUILD_GOOS}_${BUILD_GOARCH}" 4*4882a593SmuzhiyunHOST_GOOS = "${@go_map_os(d.getVar('HOST_OS'), d)}" 5*4882a593SmuzhiyunHOST_GOARCH = "${@go_map_arch(d.getVar('HOST_ARCH'), d)}" 6*4882a593SmuzhiyunHOST_GOARM = "${@go_map_arm(d.getVar('HOST_ARCH'), d)}" 7*4882a593SmuzhiyunHOST_GO386 = "${@go_map_386(d.getVar('HOST_ARCH'), d.getVar('TUNE_FEATURES'), d)}" 8*4882a593SmuzhiyunHOST_GOMIPS = "${@go_map_mips(d.getVar('HOST_ARCH'), d.getVar('TUNE_FEATURES'), d)}" 9*4882a593SmuzhiyunHOST_GOARM:class-native = "7" 10*4882a593SmuzhiyunHOST_GO386:class-native = "sse2" 11*4882a593SmuzhiyunHOST_GOMIPS:class-native = "hardfloat" 12*4882a593SmuzhiyunHOST_GOTUPLE = "${HOST_GOOS}_${HOST_GOARCH}" 13*4882a593SmuzhiyunTARGET_GOOS = "${@go_map_os(d.getVar('TARGET_OS'), d)}" 14*4882a593SmuzhiyunTARGET_GOARCH = "${@go_map_arch(d.getVar('TARGET_ARCH'), d)}" 15*4882a593SmuzhiyunTARGET_GOARM = "${@go_map_arm(d.getVar('TARGET_ARCH'), d)}" 16*4882a593SmuzhiyunTARGET_GO386 = "${@go_map_386(d.getVar('TARGET_ARCH'), d.getVar('TUNE_FEATURES'), d)}" 17*4882a593SmuzhiyunTARGET_GOMIPS = "${@go_map_mips(d.getVar('TARGET_ARCH'), d.getVar('TUNE_FEATURES'), d)}" 18*4882a593SmuzhiyunTARGET_GOARM:class-native = "7" 19*4882a593SmuzhiyunTARGET_GO386:class-native = "sse2" 20*4882a593SmuzhiyunTARGET_GOMIPS:class-native = "hardfloat" 21*4882a593SmuzhiyunTARGET_GOTUPLE = "${TARGET_GOOS}_${TARGET_GOARCH}" 22*4882a593SmuzhiyunGO_BUILD_BINDIR = "${@['bin/${HOST_GOTUPLE}','bin'][d.getVar('BUILD_GOTUPLE') == d.getVar('HOST_GOTUPLE')]}" 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun# Use the MACHINEOVERRIDES to map ARM CPU architecture passed to GO via GOARM. 25*4882a593Smuzhiyun# This is combined with *_ARCH to set HOST_GOARM and TARGET_GOARM. 26*4882a593SmuzhiyunBASE_GOARM = '' 27*4882a593SmuzhiyunBASE_GOARM:armv7ve = '7' 28*4882a593SmuzhiyunBASE_GOARM:armv7a = '7' 29*4882a593SmuzhiyunBASE_GOARM:armv6 = '6' 30*4882a593SmuzhiyunBASE_GOARM:armv5 = '5' 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun# Go supports dynamic linking on a limited set of architectures. 33*4882a593Smuzhiyun# See the supportsDynlink function in go/src/cmd/compile/internal/gc/main.go 34*4882a593SmuzhiyunGO_DYNLINK = "" 35*4882a593SmuzhiyunGO_DYNLINK:arm ?= "1" 36*4882a593SmuzhiyunGO_DYNLINK:aarch64 ?= "1" 37*4882a593SmuzhiyunGO_DYNLINK:x86 ?= "1" 38*4882a593SmuzhiyunGO_DYNLINK:x86-64 ?= "1" 39*4882a593SmuzhiyunGO_DYNLINK:powerpc64 ?= "1" 40*4882a593SmuzhiyunGO_DYNLINK:powerpc64le ?= "1" 41*4882a593SmuzhiyunGO_DYNLINK:class-native ?= "" 42*4882a593SmuzhiyunGO_DYNLINK:class-nativesdk = "" 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun# define here because everybody inherits this class 45*4882a593Smuzhiyun# 46*4882a593SmuzhiyunCOMPATIBLE_HOST:linux-gnux32 = "null" 47*4882a593SmuzhiyunCOMPATIBLE_HOST:linux-muslx32 = "null" 48*4882a593SmuzhiyunCOMPATIBLE_HOST:powerpc = "null" 49*4882a593SmuzhiyunCOMPATIBLE_HOST:powerpc64 = "null" 50*4882a593SmuzhiyunCOMPATIBLE_HOST:mipsarchn32 = "null" 51*4882a593Smuzhiyun 52*4882a593SmuzhiyunARM_INSTRUCTION_SET:armv4 = "arm" 53*4882a593SmuzhiyunARM_INSTRUCTION_SET:armv5 = "arm" 54*4882a593SmuzhiyunARM_INSTRUCTION_SET:armv6 = "arm" 55*4882a593Smuzhiyun 56*4882a593SmuzhiyunTUNE_CCARGS:remove = "-march=mips32r2" 57*4882a593SmuzhiyunSECURITY_NOPIE_CFLAGS ??= "" 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun# go can't be built with ccache: 60*4882a593Smuzhiyun# gcc: fatal error: no input files 61*4882a593SmuzhiyunCCACHE_DISABLE ?= "1" 62*4882a593Smuzhiyun 63*4882a593Smuzhiyundef go_map_arch(a, d): 64*4882a593Smuzhiyun import re 65*4882a593Smuzhiyun if re.match('i.86', a): 66*4882a593Smuzhiyun return '386' 67*4882a593Smuzhiyun elif a == 'x86_64': 68*4882a593Smuzhiyun return 'amd64' 69*4882a593Smuzhiyun elif re.match('arm.*', a): 70*4882a593Smuzhiyun return 'arm' 71*4882a593Smuzhiyun elif re.match('aarch64.*', a): 72*4882a593Smuzhiyun return 'arm64' 73*4882a593Smuzhiyun elif re.match('mips64el.*', a): 74*4882a593Smuzhiyun return 'mips64le' 75*4882a593Smuzhiyun elif re.match('mips64.*', a): 76*4882a593Smuzhiyun return 'mips64' 77*4882a593Smuzhiyun elif a == 'mips': 78*4882a593Smuzhiyun return 'mips' 79*4882a593Smuzhiyun elif a == 'mipsel': 80*4882a593Smuzhiyun return 'mipsle' 81*4882a593Smuzhiyun elif re.match('p(pc|owerpc)(64le)', a): 82*4882a593Smuzhiyun return 'ppc64le' 83*4882a593Smuzhiyun elif re.match('p(pc|owerpc)(64)', a): 84*4882a593Smuzhiyun return 'ppc64' 85*4882a593Smuzhiyun elif a == 'riscv64': 86*4882a593Smuzhiyun return 'riscv64' 87*4882a593Smuzhiyun else: 88*4882a593Smuzhiyun raise bb.parse.SkipRecipe("Unsupported CPU architecture: %s" % a) 89*4882a593Smuzhiyun 90*4882a593Smuzhiyundef go_map_arm(a, d): 91*4882a593Smuzhiyun if a.startswith("arm"): 92*4882a593Smuzhiyun return d.getVar('BASE_GOARM') 93*4882a593Smuzhiyun return '' 94*4882a593Smuzhiyun 95*4882a593Smuzhiyundef go_map_386(a, f, d): 96*4882a593Smuzhiyun import re 97*4882a593Smuzhiyun if re.match('i.86', a): 98*4882a593Smuzhiyun if ('core2' in f) or ('corei7' in f): 99*4882a593Smuzhiyun return 'sse2' 100*4882a593Smuzhiyun else: 101*4882a593Smuzhiyun return 'softfloat' 102*4882a593Smuzhiyun return '' 103*4882a593Smuzhiyun 104*4882a593Smuzhiyundef go_map_mips(a, f, d): 105*4882a593Smuzhiyun import re 106*4882a593Smuzhiyun if a == 'mips' or a == 'mipsel': 107*4882a593Smuzhiyun if 'fpu-hard' in f: 108*4882a593Smuzhiyun return 'hardfloat' 109*4882a593Smuzhiyun else: 110*4882a593Smuzhiyun return 'softfloat' 111*4882a593Smuzhiyun return '' 112*4882a593Smuzhiyun 113*4882a593Smuzhiyundef go_map_os(o, d): 114*4882a593Smuzhiyun if o.startswith('linux'): 115*4882a593Smuzhiyun return 'linux' 116*4882a593Smuzhiyun return o 117