[oe] [RFC][PATCH] distro: Move thumb into distro features

Khem Raj raj.khem at gmail.com
Tue Jul 20 05:08:02 UTC 2010


On Mon, Jul 19, 2010 at 3:46 PM, Khem Raj <raj.khem at gmail.com> wrote:
> 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.

Done. Meanwhile, Does this patch look ok for .dev ? I would like some ACKs

Thanks
-Khem

>
>>
>> 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