[oe] [RFC][PATCH] distro: Move thumb into distro features
Khem Raj
raj.khem at gmail.com
Mon Jul 19 22:46:05 UTC 2010
On Mon, Jul 19, 2010 at 1:18 AM, Khem Raj <raj.khem at gmail.com> wrote:
> * 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.
I accidentally hit push button in wrong branch and this commit got pushed
I will revert it once I get home later today if someone gets bitten before
feel free to revert it.
>
> Signed-off-by: Khem Raj <raj.khem at 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
>
>
More information about the Openembedded-devel
mailing list