diff options
Diffstat (limited to 'conf/distro/include/sane-toolchain.inc')
-rw-r--r-- | conf/distro/include/sane-toolchain.inc | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/conf/distro/include/sane-toolchain.inc b/conf/distro/include/sane-toolchain.inc new file mode 100644 index 0000000..5882fd7 --- /dev/null +++ b/conf/distro/include/sane-toolchain.inc @@ -0,0 +1,214 @@ +# Originally brought to you by the Angstrom Distribution + +############################################################################# +# TOOLCHAIN VERSION SETTINGS +############################################################################# + +# Base line versions, good for most things +PREFERRED_GCC_VERSION ?= "4.5" +PREFERRED_BINUTILS_VERSION ?= "2.21" +PREFERRED_UCLIBC_VERSION ?= "git" +PREFERRED_EGLIBC_VERSION ?= "2.12" +PREFERRED_GLIBC_VERSION ?= "2.10.1" +# we need hard assignment here, because bitbake.conf has +# weak "no" first so weak "yes" here won't override it +# also use hard assignment for version to make sure it's +# new enough for SYSROOT support +PREFERRED_LIBTOOL_VERSION = "2.4" +LIBTOOL_HAS_SYSROOT = "yes" + +# Prefer glibc 2.6 and uclibc 0.9.30, these have had the most testing. +PREFERRED_VERSION_glibc ?= "${PREFERRED_GLIBC_VERSION}" +PREFERRED_VERSION_glibc-initial ?= "${PREFERRED_GLIBC_VERSION}" +PREFERRED_VERSION_eglibc ?= "${PREFERRED_EGLIBC_VERSION}" +PREFERRED_VERSION_eglibc-initial ?= "${PREFERRED_EGLIBC_VERSION}" + +# Some systems need a special gcc version +PREFERRED_GCC_VERSION_486sx ?= "4.3.2" +PREFERRED_GCC_VERSION_avr32 ?= "4.2.2" +PREFERRED_GCC_VERSION_bfin ?= "4.1.2" +PREFERRED_GCC_VERSION_xilinx-ml403 ?= "4.1.1" + +# This is unrelated to the kernel version, but glibc and some userspaceapps require a recent version to build against +PREFERRED_VERSION_linux-libc-headers ?= "2.6.31" + +# Uncomment this if want need to build an armv7a kernel with CSL toolchain (<2.6.27 don't boot with mainline gcc) +#KERNEL_CCSUFFIX_armv7a= "-4.2.1+csl-arm-2007q3-53" + +# Binutils +PREFERRED_VERSION_binutils ?= "${PREFERRED_BINUTILS_VERSION}" +PREFERRED_VERSION_binutils-cross ?= "${PREFERRED_BINUTILS_VERSION}" +PREFERRED_VERSION_binutils-cross-sdk ?= "${PREFERRED_BINUTILS_VERSION}" + +# Avr32 only has patches for binutils 2.17 in OE +PREFERRED_VERSION_binutils_avr32 = "2.17" +PREFERRED_VERSION_binutils-cross_avr32 = "2.17" +PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17" + +# Compiler versions +PREFERRED_VERSION_gcc ?= "${PREFERRED_GCC_VERSION}" +PREFERRED_VERSION_gcc-cross ?= "${PREFERRED_GCC_VERSION}" +PREFERRED_VERSION_gcc-cross-sdk ?= "${PREFERRED_GCC_VERSION}" +PREFERRED_VERSION_gcc-cross-initial ?= "${PREFERRED_GCC_VERSION}" +PREFERRED_VERSION_gcc-cross-intermediate ?= "${PREFERRED_GCC_VERSION}" + +# Others +PREFERRED_VERSION_libtool = "${PREFERRED_LIBTOOL_VERSION}" +PREFERRED_VERSION_libtool-cross = "${PREFERRED_LIBTOOL_VERSION}" +PREFERRED_VERSION_libtool-native = "${PREFERRED_LIBTOOL_VERSION}" +PREFERRED_VERSION_libtool-sdk = "${PREFERRED_LIBTOOL_VERSION}" +PREFERRED_VERSION_libtool-nativesdk = "${PREFERRED_LIBTOOL_VERSION}" + +############################################################################# +# TOOLCHAIN CUSTOMIZATION +############################################################################# + +# Branding +TARGET_VENDOR = "-oe" + +# Compiler selection +TOOLCHAIN_TYPE ?= "internal" +require conf/distro/include/toolchain-${TOOLCHAIN_TYPE}.inc + +# Add BASE_PACKAGE_ARCH to the overrides list so that we can override the +# ARM_INSTRUCTION_SET like below + +OVERRIDES =. "${BASE_PACKAGE_ARCH}:" + +# ARM920T and up can use thumb mode to decrease binary size at the expense of speed +# (the complete story is a bit more nuanced due to cache starvation) +# Minimal turns on thumb for armv4t machine according to this RFC: +# http://lists.linuxtogo.org/pipermail/angstrom-distro-devel/2008-October/002714.html + +# We can't set ARM_INSTRUCTION_SET_<override> directly since that will un-overridable in recipes like gcc +PREFERRED_ARM_INSTRUCTION_SET_armv4t = "thumb" +PREFERRED_ARM_INSTRUCTION_SET_armv5te = "thumb" +PREFERRED_ARM_INSTRUCTION_SET_armv5teb = "thumb" +PREFERRED_ARM_INSTRUCTION_SET ?= "arm" +ARM_INSTRUCTION_SET = "${PREFERRED_ARM_INSTRUCTION_SET}" +# "arm" "thumb" +# The instruction set the compiler should use when generating application +# code. The kernel is always compiled with arm code at present. arm code +# is the original 32 bit ARM instruction set, thumb code is the 16 bit +# encoded RISC sub-set. Thumb code is smaller (maybe 70% of the ARM size) +# but requires more instructions (140% for 70% smaller code) so may be +# slower. + +THUMB_INTERWORK = "yes" +# "yes" "no" +# Whether to compile with code to allow interworking between the two +# instruction sets. This allows thumb code to be executed on a primarily +# arm system and vice versa. It is strongly recommended that DISTROs not +# turn this off - the actual cost is very small. + +# We don't want to keep OABI compat +ARM_KEEP_OABI = "0" + +# ARM EABI is softfloat by default, but let's make sure :) +# make it overridable for platforms with FPU, like ep93xx or i.mx31 +TARGET_FPU_arm ?= "soft" +TARGET_FPU_armeb ?= "soft" +TARGET_FPU_ixp4xx ?= "soft" +TARGET_FPU_ppc405 ?= "soft" + +TARGET_FPU_armv6 ?= "hard" +TARGET_FPU_armv6-novfp ?= "soft" +TARGET_FPU_armv7a ?= "hard" +TARGET_FPU_ppc603e ?= "hard" + +# webkit-gtk and cairo have alignment issues with double instructions on armv5 so +# disable them here. TODO: This knowledge should rather be encoded in the actual +# recipes! +TARGET_CC_ARCH_pn-webkit-gtk_armv5te = "-march=armv4t" +TARGET_CC_ARCH_pn-cairo_armv5te = "-march=armv4t" + +############################################################################# +# C LIBRARY SETTINGS +############################################################################# + +# Can be "glibc", "eglibc" or "uclibc" +LIBC ?= "eglibc" +require conf/distro/include/${LIBC}-${TOOLCHAIN_TYPE}.inc +PSTAGE_EXTRAPATH = "${LIBC}" +require conf/distro/include/sane-toolchain-${LIBC}.inc + +# Generate locales on the buildsystem instead of on the target. Speeds up first boot, set to "1" to enable +PREFERRED_PROVIDER_qemu-native = "qemu-native" +ENABLE_BINARY_LOCALE_GENERATION ?= "1" + +# We only want to build UTF8 locales +LOCALE_UTF8_ONLY = "1" + +# Qemu doesn't like armv6/eabi/vfp +ENABLE_BINARY_LOCALE_GENERATION_armv6 = "0" +ENABLE_BINARY_LOCALE_GENERATION_armv6-novfp = "0" +ENABLE_BINARY_LOCALE_GENERATION_armv7a = "0" + +#qemu has taken a dislike to armeb as well +ENABLE_BINARY_LOCALE_GENERATION_armeb = "0" +def detect_arm_abi (d): + import bb + if bb.data.getVar('DISTRO_FEATURES',d) is None: + if bb.data.getVar('TARGET_ARCH', d, 1) in [ 'arm', 'armeb' ]: + return "oabi" + else: + return "" + if bb.data.getVar('TARGET_ARCH', d, 1) in [ 'arm', 'armeb' ]: + if 'eabi' in bb.data.getVar('DISTRO_FEATURES',d).split(): + return "eabi" + return "oabi" + return "" + +def compute_os_portion_of_target_triplet (d): + import bb + arm_eabi_unsupported_arches = "armv1 armv2 armv3" + ppc_spe_supporting_arches = "ppce500v2 ppce500" + gnu_suffix = "" + if bb.data.getVar('LIBC', d, 1) == "uclibc": + libc_suffix = "uclibc" + else: + libc_suffix = "" + + if bb.data.getVar('TARGET_ARCH',d,1) in ['bfin']: + if libc_suffix is not "uclibc": + bb.fatal("bfin is not supported on glibc/eglibc. Please choose uclibc") + else: + os_suffix = "uclinux" + else: + os_suffix = "linux" + bparch = bb.data.getVar('BASE_PACKAGE_ARCH', d,1) + + if bb.data.getVar('DISTRO_FEATURES',d,1) is not None and \ + bparch is not None: + if 'eabi' in bb.data.getVar('DISTRO_FEATURES',d,1).split() and \ + bb.data.getVar('TARGET_ARCH', d, 1) in [ 'arm', 'armeb' ]: + if bparch in arm_eabi_unsupported_arches.split(): + bb.fatal("DISTRO requested EABI but selected machine does not support EABI") + abi_suffix = "" + else: + if libc_suffix is not "uclibc": + gnu_suffix = "gnu" + abi_suffix = "eabi" + elif bparch in ppc_spe_supporting_arches.split(): + if libc_suffix is not "uclibc": + gnu_suffix = "gnu" + abi_suffix = "spe" + else: + abi_suffix = "" + else: + bb.note("DISTRO_FEATURES is not set abi suffix not set") + abi_suffix = "" + + if bb.data.getVar('TOOLCHAIN_BRAND', d, 1) is not None and \ + "csl" in bb.data.getVar('TOOLCHAIN_BRAND', d, 1): + gnu_suffix = "gnu" + + if libc_suffix + gnu_suffix + abi_suffix is not "": + return os_suffix + "-" + libc_suffix + gnu_suffix + abi_suffix + else: + return os_suffix + +# This is needed to get a correct PACKAGE_ARCH for packages that have PACKAGE_ARCH = ${MACHINE_ARCH} +ARM_ABI = "${@detect_arm_abi(d)}" +TARGET_OS = "${@compute_os_portion_of_target_triplet(d)}" +include conf/distro/include/sane-toolchain-${ARM_ABI}.inc |