summaryrefslogtreecommitdiffstats
path: root/conf/distro/include/sane-toolchain.inc
diff options
context:
space:
mode:
authorPhil Blundell <philb@brightsign.biz>2011-05-12 17:50:10 +0100
committerPhil Blundell <philb@brightsign.biz>2011-05-12 17:50:10 +0100
commit5f95640b2a011f7e1d4d3b1d9694615dfe93a6d0 (patch)
tree6403e642d6d623c00d5176de52ebd305e81882f9 /conf/distro/include/sane-toolchain.inc
parent4ec12ce02c43be8fbddefd9078b80a6d7c767a26 (diff)
downloadmeta-micro-5f95640b2a011f7e1d4d3b1d9694615dfe93a6d0.tar.gz
import include files from main oe repo
Diffstat (limited to 'conf/distro/include/sane-toolchain.inc')
-rw-r--r--conf/distro/include/sane-toolchain.inc214
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