[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