* Currenlty we define the thumb specific overrides in machine tune files and as machine conf files are included before the distro conf files the overrides dont get right values and set incorrectly.
* This patch moves the tune-thumb.inc from machine/include into distro/include and lets distro decide on thumb and thumb-interworking features based on the machine selected. If a machine which does not support thumb like all armv4 based machines is selected then distro makes correct decision now to disable thumb and thumb-interworking based upon the machine seletected. Signed-off-by: Khem Raj <raj.k...@gmail.com> --- conf/distro/angstrom-2008.1.conf | 1 + conf/distro/gmustix.conf | 2 + conf/distro/include/arm-thumb.inc | 32 +++++++++++++++++++++++++++ conf/distro/kaeilos-2010.conf | 1 + conf/distro/kaeilos.conf | 1 + conf/distro/micro.conf | 1 + conf/distro/minimal.conf | 3 +- conf/distro/shr.conf | 1 + conf/distro/slugos.conf | 2 + conf/machine/include/ixp4xx.inc | 1 - conf/machine/include/tune-arm1136-novfp.inc | 3 -- conf/machine/include/tune-arm1136jf-s.inc | 3 -- conf/machine/include/tune-arm1176jzf-s.inc | 3 -- conf/machine/include/tune-arm920t.inc | 4 --- conf/machine/include/tune-arm926ejs.inc | 3 -- conf/machine/include/tune-arm9tdmi.inc | 4 --- conf/machine/include/tune-armv7.inc | 4 --- conf/machine/include/tune-ep9312.inc | 3 -- conf/machine/include/tune-thumb.inc | 32 --------------------------- conf/machine/include/tune-xscale.inc | 4 --- conf/machine/palmz31.conf | 3 -- conf/machine/palmz72.conf | 3 -- 22 files changed, 43 insertions(+), 71 deletions(-) create mode 100644 conf/distro/include/arm-thumb.inc delete mode 100644 conf/machine/include/tune-thumb.inc diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf index 7c70c84..84e8096 100644 --- a/conf/distro/angstrom-2008.1.conf +++ b/conf/distro/angstrom-2008.1.conf @@ -136,6 +136,7 @@ PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17" # Toolchain virtuals: require conf/distro/include/toolchain-${TOOLCHAIN_TYPE}.inc +require conf/distro/include/arm-thumb.inc PREFERRED_PROVIDER_dbus-glib = "dbus-glib" PREFERRED_PROVIDER_hotplug = "udev" diff --git a/conf/distro/gmustix.conf b/conf/distro/gmustix.conf index 17f8056..5dd519d 100644 --- a/conf/distro/gmustix.conf +++ b/conf/distro/gmustix.conf @@ -5,6 +5,8 @@ INHERIT += "package_tar package_ipk" LIBC = "uclibc" require conf/distro/include/${LIBC}.inc +require conf/distro/include/arm-thumb.inc + TARGET_OS = "linux-uclibc" TARGET_FPU = "soft" IMAGE_FSTYPES = "jffs2" diff --git a/conf/distro/include/arm-thumb.inc b/conf/distro/include/arm-thumb.inc new file mode 100644 index 0000000..cd88bb4 --- /dev/null +++ b/conf/distro/include/arm-thumb.inc @@ -0,0 +1,32 @@ +#tune file for thumb instructions + +ARM_INSTRUCTION_SET ?= "arm" +# "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 ?= "no" +# "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. + +OVERRIDE_THUMB = "$...@['', ':thumb'][bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) == 'thumb']}" +OVERRIDE_INTERWORK = "$...@['', ':thumb-interwork'][bb.data.getVar('THUMB_INTERWORK', d, 1) == 'yes']}" +OVERRIDES .= "${OVERRIDE_THUMB}${OVERRIDE_INTERWORK}" + +# Compiler and linker options for application code and kernel code. These +# options ensure that the compiler has the correct settings for the selected +# instruction set and interworking. +ARM_INTERWORK_M_OPT = "$...@['-mno-thumb-interwork', '-mthumb-interwork'][bb.data.getVar('THUMB_INTERWORK', d, 1) == 'yes']}" +ARM_THUMB_M_OPT = "$...@['-mno-thumb', '-mthumb'][bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) == 'thumb']}" + +# +TARGET_CC_ARCH += "${ARM_INTERWORK_M_OPT} ${ARM_THUMB_M_OPT}" +TARGET_CC_KERNEL_ARCH += "-mno-thumb-interwork -mno-thumb" + diff --git a/conf/distro/kaeilos-2010.conf b/conf/distro/kaeilos-2010.conf index 4bb637c..ba37445 100644 --- a/conf/distro/kaeilos-2010.conf +++ b/conf/distro/kaeilos-2010.conf @@ -96,6 +96,7 @@ PREFERRED_VERSION_gcc-cross-intermediate ?= "${KAEILOS_GCC_VERSION}" PREFERRED_ARM_INSTRUCTION_SET ?= "thumb" require conf/distro/include/sane-toolchain.inc +require conf/distro/include/arm-thumb.inc PREFERRED_PROVIDER_dbus-glib = "dbus-glib" PREFERRED_PROVIDER_hotplug = "udev" diff --git a/conf/distro/kaeilos.conf b/conf/distro/kaeilos.conf index eb12d2e..b141280 100644 --- a/conf/distro/kaeilos.conf +++ b/conf/distro/kaeilos.conf @@ -124,6 +124,7 @@ PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17" # Toolchain virtuals: require conf/distro/include/toolchain-${TOOLCHAIN_TYPE}.inc +require conf/distro/include/arm-thumb.inc PREFERRED_PROVIDER_dbus-glib = "dbus-glib" PREFERRED_PROVIDER_hotplug = "udev" diff --git a/conf/distro/micro.conf b/conf/distro/micro.conf index 9885425..fc50391 100644 --- a/conf/distro/micro.conf +++ b/conf/distro/micro.conf @@ -66,6 +66,7 @@ PREFERRED_VERSION_glibc ?= "2.10.1" PREFERRED_VERSION_glibc-initial ?= "2.10.1" PREFERRED_ARM_INSTRUCTION_SET ?= "thumb" require conf/distro/include/sane-toolchain.inc +require conf/distro/include/arm-thumb.inc ############################################################################# # OVERRIDES adjusted from bitbake.conf to feature the MACHINE_CLASS diff --git a/conf/distro/minimal.conf b/conf/distro/minimal.conf index e400c14..9a08130 100644 --- a/conf/distro/minimal.conf +++ b/conf/distro/minimal.conf @@ -16,7 +16,7 @@ DISTRO_VERSION = "dev-snapshot-${SRCDATE}" DISTRO_TYPE ?= "debug" # Ensure some form of release config, so error out if someone thinks he knows better -DISTRO_CHECK := "$...@bb.data.getvar('DISTRO_VERSION',d,1) or bb.fatal('Remove this line or set a dummy DISTRO_VERSION") +DISTRO_CHECK := "$...@bb.data.getvar('DISTRO_VERSION',d,1) or bb.fatal('Remove this line or set a dummy DISTRO_VERSION')}" ############################################################################# # FEATURE SELECTION @@ -86,6 +86,7 @@ MACHINE_KERNEL_VERSION = "2.6" ############################################################################# LIBC ?= "eglibc" require conf/distro/include/sane-toolchain.inc +require conf/distro/include/arm-thumb.inc ############################################################################# # PREFERRED VERSIONS diff --git a/conf/distro/shr.conf b/conf/distro/shr.conf index f0167da..9fd156f 100644 --- a/conf/distro/shr.conf +++ b/conf/distro/shr.conf @@ -159,6 +159,7 @@ PREFERRED_VERSION_eglibc ?= "2.12" PREFERRED_VERSION_eglibc-initial ?= "2.12" PREFERRED_GCC_VERSION ?= "4.5" require conf/distro/include/sane-toolchain.inc +require conf/distro/include/arm-thumb.inc # Set some java bits require conf/distro/include/sane-toolchain-java.inc diff --git a/conf/distro/slugos.conf b/conf/distro/slugos.conf index 5a2f0dc..5f9c06c 100644 --- a/conf/distro/slugos.conf +++ b/conf/distro/slugos.conf @@ -22,3 +22,5 @@ require conf/distro/include/slugos.inc # Can be either glibc or eglibc (or perhaps even uclibc) LIBC ?= "eglibc" require conf/distro/include/${LIBC}.inc +require conf/distro/include/arm-thumb.inc + diff --git a/conf/machine/include/ixp4xx.inc b/conf/machine/include/ixp4xx.inc index 192cbb1..cf7f0dd 100644 --- a/conf/machine/include/ixp4xx.inc +++ b/conf/machine/include/ixp4xx.inc @@ -22,7 +22,6 @@ IMAGE_FSTYPES ?= "jffs2 tar.gz" EXTRA_IMAGECMD_jffs2 = "--pad --eraseblock=0x20000 -n" require conf/machine/include/tune-xscale.inc -require conf/machine/include/tune-thumb.inc #------------------------------------------------------------------------------- # Board defaults diff --git a/conf/machine/include/tune-arm1136-novfp.inc b/conf/machine/include/tune-arm1136-novfp.inc index e1f7945..58134b7 100644 --- a/conf/machine/include/tune-arm1136-novfp.inc +++ b/conf/machine/include/tune-arm1136-novfp.inc @@ -5,6 +5,3 @@ TARGET_CC_ARCH = "-march=armv6j -mtune=arm1136jf-s" FEED_ARCH = "armv6-novfp" BASE_PACKAGE_ARCH = "armv6-novfp" PACKAGE_EXTRA_ARCHS += "armv4 armv4t armv5te armv6-novfp" - -# Include tune file for thumb support, it defaults to off so DISTROs can turn it on if they wish -require conf/machine/include/tune-thumb.inc diff --git a/conf/machine/include/tune-arm1136jf-s.inc b/conf/machine/include/tune-arm1136jf-s.inc index c532b9c..2944cc7 100644 --- a/conf/machine/include/tune-arm1136jf-s.inc +++ b/conf/machine/include/tune-arm1136jf-s.inc @@ -2,6 +2,3 @@ TARGET_CC_ARCH = "-march=armv6j -mtune=arm1136jf-s -mfpu=vfp -mfloat-abi=softfp" FEED_ARCH = "armv6" BASE_PACKAGE_ARCH = "armv6" PACKAGE_EXTRA_ARCHS += "armv4 armv4t armv5te armv6" - -# Include tune file for thumb support, it defaults to off so DISTROs can turn it on if they wish -require conf/machine/include/tune-thumb.inc diff --git a/conf/machine/include/tune-arm1176jzf-s.inc b/conf/machine/include/tune-arm1176jzf-s.inc index b7c5291..ee2884b 100644 --- a/conf/machine/include/tune-arm1176jzf-s.inc +++ b/conf/machine/include/tune-arm1176jzf-s.inc @@ -2,6 +2,3 @@ TARGET_CC_ARCH = "-march=armv6j -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=softfp FEED_ARCH = "armv6" BASE_PACKAGE_ARCH = "armv6" PACKAGE_EXTRA_ARCHS += "armv4 armv4t armv5te armv6" - -# Include tune file for thumb support, it defaults to off so DISTROs can turn it on if they wish -require conf/machine/include/tune-thumb.inc diff --git a/conf/machine/include/tune-arm920t.inc b/conf/machine/include/tune-arm920t.inc index 5a373e9..fee5c58 100644 --- a/conf/machine/include/tune-arm920t.inc +++ b/conf/machine/include/tune-arm920t.inc @@ -2,7 +2,3 @@ FEED_ARCH = "armv4t" BASE_PACKAGE_ARCH = "armv4t" TARGET_CC_ARCH = "-march=armv4t -mtune=arm920t" PACKAGE_EXTRA_ARCHS += "armv4 armv4t" - -# Include tune file for thumb support, it defaults to off so DISTROs can turn it on if they wish -require conf/machine/include/tune-thumb.inc - diff --git a/conf/machine/include/tune-arm926ejs.inc b/conf/machine/include/tune-arm926ejs.inc index f6f5064..f41e460 100644 --- a/conf/machine/include/tune-arm926ejs.inc +++ b/conf/machine/include/tune-arm926ejs.inc @@ -5,6 +5,3 @@ PACKAGE_EXTRA_ARCHS += "armv4 armv4t armv5te" # For gcc 4.x you need: TARGET_CC_ARCH = "-march=armv5te -mtune=arm926ej-s" BASE_PACKAGE_ARCH = "armv5te" - -# Include tune file for thumb support, it defaults to off so DISTROs can turn it on if they wish -require conf/machine/include/tune-thumb.inc diff --git a/conf/machine/include/tune-arm9tdmi.inc b/conf/machine/include/tune-arm9tdmi.inc index a11ee38..d788b53 100644 --- a/conf/machine/include/tune-arm9tdmi.inc +++ b/conf/machine/include/tune-arm9tdmi.inc @@ -2,7 +2,3 @@ FEED_ARCH = "armv4t" BASE_PACKAGE_ARCH = "armv4t" PACKAGE_EXTRA_ARCHS += "armv4 armv4t" TARGET_CC_ARCH = "-mcpu=arm9tdmi -mtune=arm9tdmi" - -# Include tune file for thumb support, it defaults to off so DISTROs can turn it on if they wish -require conf/machine/include/tune-thumb.inc - diff --git a/conf/machine/include/tune-armv7.inc b/conf/machine/include/tune-armv7.inc index 05ec3da..379a3eb 100644 --- a/conf/machine/include/tune-armv7.inc +++ b/conf/machine/include/tune-armv7.inc @@ -5,7 +5,3 @@ TARGET_CC_ARCH = "-march=armv7 -mfpu=vfp -mfloat-abi=softfp" FEED_ARCH = "armv7" PACKAGE_EXTRA_ARCHS += "armv4 armv4t armv5te armv6 armv7" BASE_PACKAGE_ARCH = "armv7" - -# Include tune file for thumb support, it defaults to off so DISTROs can turn it on if they wish -require conf/machine/include/tune-thumb.inc - diff --git a/conf/machine/include/tune-ep9312.inc b/conf/machine/include/tune-ep9312.inc index c8770e0..7458281 100644 --- a/conf/machine/include/tune-ep9312.inc +++ b/conf/machine/include/tune-ep9312.inc @@ -5,9 +5,6 @@ PACKAGE_EXTRA_ARCHS += "armv4t ep9312" BASE_PACKAGE_ARCH = "ep9312" FEED_ARCH = "ep9312" -# Include tune file for thumb support, it defaults to off so DISTROs can turn it on if they wish -require conf/machine/include/tune-thumb.inc - FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O -fno-signed-zeros" DEBUG_OPTIMIZATION = "-O -fno-omit-frame-pointer -g" SELECTED_OPTIMIZATION = "$...@bb.data.getvar(['FULL_OPTIMIZATION', 'DEBUG_OPTIMIZATION'][bb.data.getVar('DEBUG_BUILD', d, 1) == '1'], d, 1)}" diff --git a/conf/machine/include/tune-thumb.inc b/conf/machine/include/tune-thumb.inc deleted file mode 100644 index cd88bb4..0000000 --- a/conf/machine/include/tune-thumb.inc +++ /dev/null @@ -1,32 +0,0 @@ -#tune file for thumb instructions - -ARM_INSTRUCTION_SET ?= "arm" -# "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 ?= "no" -# "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. - -OVERRIDE_THUMB = "$...@['', ':thumb'][bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) == 'thumb']}" -OVERRIDE_INTERWORK = "$...@['', ':thumb-interwork'][bb.data.getVar('THUMB_INTERWORK', d, 1) == 'yes']}" -OVERRIDES .= "${OVERRIDE_THUMB}${OVERRIDE_INTERWORK}" - -# Compiler and linker options for application code and kernel code. These -# options ensure that the compiler has the correct settings for the selected -# instruction set and interworking. -ARM_INTERWORK_M_OPT = "$...@['-mno-thumb-interwork', '-mthumb-interwork'][bb.data.getVar('THUMB_INTERWORK', d, 1) == 'yes']}" -ARM_THUMB_M_OPT = "$...@['-mno-thumb', '-mthumb'][bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) == 'thumb']}" - -# -TARGET_CC_ARCH += "${ARM_INTERWORK_M_OPT} ${ARM_THUMB_M_OPT}" -TARGET_CC_KERNEL_ARCH += "-mno-thumb-interwork -mno-thumb" - diff --git a/conf/machine/include/tune-xscale.inc b/conf/machine/include/tune-xscale.inc index 3a6bd0e..f0f58bc 100644 --- a/conf/machine/include/tune-xscale.inc +++ b/conf/machine/include/tune-xscale.inc @@ -7,7 +7,3 @@ TARGET_CC_ARCH = "-march=armv5te -mtune=xscale" TARGET_CC_KERNEL_ARCH = "-march=armv5te -mtune=xscale" PACKAGE_EXTRA_ARCHS += "$...@['armv4b armv4tb armv5teb', 'armv4 armv4t armv5te'][ bb.data.getVar('TARGET_ARCH', d, 1) == 'arm']}" BASE_PACKAGE_ARCH = "$...@['armv5teb', 'armv5te'][bb.data.getVar('TARGET_ARCH', d, 1) == 'arm']}" - -# Include tune file for thumb support, it defaults to off so DISTROs can turn it on if they wish -require conf/machine/include/tune-thumb.inc - diff --git a/conf/machine/palmz31.conf b/conf/machine/palmz31.conf index 0332952..9fb5f7e 100644 --- a/conf/machine/palmz31.conf +++ b/conf/machine/palmz31.conf @@ -11,9 +11,6 @@ MACHINE_DISPLAY_HEIGHT_PIXELS = "160" SERIAL_CONSOLE = "115200 ttyS0" -# Use tune-xscale per default. Machine independent feeds should be built with tune-strongarm. -require conf/machine/include/tune-thumb.inc - MACHINE_EXTRA_RRECOMMENDS += "kernel-module-i2c-pxa \ kernel-module-i2c-algo-pxa \ kernel-module-i2c-dev \ diff --git a/conf/machine/palmz72.conf b/conf/machine/palmz72.conf index 502c11a..9766434 100644 --- a/conf/machine/palmz72.conf +++ b/conf/machine/palmz72.conf @@ -11,9 +11,6 @@ MACHINE_DISPLAY_HEIGHT_PIXELS = "320" SERIAL_CONSOLE = "115200 ttyS0" -# Use tune-xscale per default. Machine independent feeds should be built with tune-strongarm. -require conf/machine/include/tune-thumb.inc - MACHINE_EXTRA_RRECOMMENDS += "kernel-module-i2c-pxa \ kernel-module-i2c-algo-pxa \ kernel-module-i2c-dev \ -- 1.7.0.4 _______________________________________________ Openembedded-devel mailing list Openembedded-devel@lists.openembedded.org http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel