1*4882a593Smuzhiyun# 2*4882a593Smuzhiyun# set the ARCH environment variable for kernel compilation (including 3*4882a593Smuzhiyun# modules). return value must match one of the architecture directories 4*4882a593Smuzhiyun# in the kernel source "arch" directory 5*4882a593Smuzhiyun# 6*4882a593Smuzhiyun 7*4882a593Smuzhiyunvalid_archs = "alpha cris ia64 \ 8*4882a593Smuzhiyun i386 x86 \ 9*4882a593Smuzhiyun m68knommu m68k ppc powerpc powerpc64 ppc64 \ 10*4882a593Smuzhiyun sparc sparc64 \ 11*4882a593Smuzhiyun arm aarch64 \ 12*4882a593Smuzhiyun m32r mips \ 13*4882a593Smuzhiyun sh sh64 um h8300 \ 14*4882a593Smuzhiyun parisc s390 v850 \ 15*4882a593Smuzhiyun avr32 blackfin \ 16*4882a593Smuzhiyun microblaze \ 17*4882a593Smuzhiyun nios2 arc riscv xtensa" 18*4882a593Smuzhiyun 19*4882a593Smuzhiyundef map_kernel_arch(a, d): 20*4882a593Smuzhiyun import re 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun valid_archs = d.getVar('valid_archs').split() 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun if re.match('(i.86|athlon|x86.64)$', a): return 'x86' 25*4882a593Smuzhiyun elif re.match('arceb$', a): return 'arc' 26*4882a593Smuzhiyun elif re.match('armeb$', a): return 'arm' 27*4882a593Smuzhiyun elif re.match('aarch64$', a): return 'arm64' 28*4882a593Smuzhiyun elif re.match('aarch64_be$', a): return 'arm64' 29*4882a593Smuzhiyun elif re.match('aarch64_ilp32$', a): return 'arm64' 30*4882a593Smuzhiyun elif re.match('aarch64_be_ilp32$', a): return 'arm64' 31*4882a593Smuzhiyun elif re.match('mips(isa|)(32|64|)(r6|)(el|)$', a): return 'mips' 32*4882a593Smuzhiyun elif re.match('mcf', a): return 'm68k' 33*4882a593Smuzhiyun elif re.match('riscv(32|64|)(eb|)$', a): return 'riscv' 34*4882a593Smuzhiyun elif re.match('p(pc|owerpc)(|64)', a): return 'powerpc' 35*4882a593Smuzhiyun elif re.match('sh(3|4)$', a): return 'sh' 36*4882a593Smuzhiyun elif re.match('bfin', a): return 'blackfin' 37*4882a593Smuzhiyun elif re.match('microblazee[bl]', a): return 'microblaze' 38*4882a593Smuzhiyun elif a in valid_archs: return a 39*4882a593Smuzhiyun else: 40*4882a593Smuzhiyun if not d.getVar("TARGET_OS").startswith("linux"): 41*4882a593Smuzhiyun return a 42*4882a593Smuzhiyun bb.error("cannot map '%s' to a linux kernel architecture" % a) 43*4882a593Smuzhiyun 44*4882a593Smuzhiyunexport ARCH = "${@map_kernel_arch(d.getVar('TARGET_ARCH'), d)}" 45*4882a593Smuzhiyun 46*4882a593Smuzhiyundef map_uboot_arch(a, d): 47*4882a593Smuzhiyun import re 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun if re.match('p(pc|owerpc)(|64)', a): return 'ppc' 50*4882a593Smuzhiyun elif re.match('i.86$', a): return 'x86' 51*4882a593Smuzhiyun return a 52*4882a593Smuzhiyun 53*4882a593Smuzhiyunexport UBOOT_ARCH = "${@map_uboot_arch(d.getVar('ARCH'), d)}" 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun# Set TARGET_??_KERNEL_ARCH in the machine .conf to set architecture 56*4882a593Smuzhiyun# specific options necessary for building the kernel and modules. 57*4882a593SmuzhiyunTARGET_CC_KERNEL_ARCH ?= "" 58*4882a593SmuzhiyunHOST_CC_KERNEL_ARCH ?= "${TARGET_CC_KERNEL_ARCH}" 59*4882a593SmuzhiyunTARGET_LD_KERNEL_ARCH ?= "" 60*4882a593SmuzhiyunHOST_LD_KERNEL_ARCH ?= "${TARGET_LD_KERNEL_ARCH}" 61*4882a593SmuzhiyunTARGET_AR_KERNEL_ARCH ?= "" 62*4882a593SmuzhiyunHOST_AR_KERNEL_ARCH ?= "${TARGET_AR_KERNEL_ARCH}" 63*4882a593Smuzhiyun 64*4882a593SmuzhiyunKERNEL_CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_KERNEL_ARCH} -fuse-ld=bfd ${DEBUG_PREFIX_MAP} -fdebug-prefix-map=${STAGING_KERNEL_DIR}=${KERNEL_SRC_PATH} -fdebug-prefix-map=${STAGING_KERNEL_BUILDDIR}=${KERNEL_SRC_PATH}" 65*4882a593SmuzhiyunKERNEL_LD = "${CCACHE}${HOST_PREFIX}ld.bfd ${HOST_LD_KERNEL_ARCH}" 66*4882a593SmuzhiyunKERNEL_AR = "${CCACHE}${HOST_PREFIX}ar ${HOST_AR_KERNEL_ARCH}" 67*4882a593SmuzhiyunTOOLCHAIN ?= "gcc" 68*4882a593Smuzhiyun 69