summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/distro/ucslugc.conf42
-rw-r--r--conf/machine/nslu2.conf113
2 files changed, 113 insertions, 42 deletions
diff --git a/conf/distro/ucslugc.conf b/conf/distro/ucslugc.conf
index bb383b8a66..0376eadd00 100644
--- a/conf/distro/ucslugc.conf
+++ b/conf/distro/ucslugc.conf
@@ -6,25 +6,29 @@
# STANDARD UcSlugC DEFINITIONS
#----------------------------------------------------------------------------------
DISTRO_NAME = "UcSlugC"
-DISTRO_VERSION = "1-beta"
+DISTRO_VERSION = "1.1-beta"
DISTRO_TYPE ?= "beta"
TARGET_FPU = "soft"
TARGET_OS = "linux-uclibc"
+# Select thumb-interwork and (TBD) thumb
+ARM_INTERWORK = ":thumb-interwork"
+#ARM_INSTRUCTION_SET = ":thumb"
+
USE_NLS ?= "no"
USE_NLS_glib-2.0 = "yes"
INHERIT += " package_ipk debian nslu2_flashimg"
# The OVERRIDES are modified here so that 'openslug' overrides are picked up if
-# present (ucslugc overrides take precedence), 'thumb' is used to factor out
-# things where a pack assumes that an arm target implies 32 bit instruction
-# support with no attention to thumb/arm mode (it indicates a bug if it is
-# necessary to use this).
-#NSLU2_THUMB_OVERRIDE = ":thumb"
-NSLU2_THUMB_OVERRIDE = ""
-OVERRIDES = "local:${MACHINE}:${DISTRO}:openslug:${TARGET_OS}${NSLU2_THUMB_OVERRIDE}:${TARGET_ARCH}:build-${BUILD_OS}"
+# present (ucslugc overrides take precedence).
+NSLU2_BASE_DISTRO = ":openslug"
+
+# We are building packages which are armvteb (big endian) for arm or thumbv5tb for
+# thumb instructions. The PACKAGE_ARCH should reflect this because generated code
+# requires that instruction set support.
+PACKAGE_ARCH = "${NSLU2_PACKAGE_ARCH}"
# NOTE: to build new packages set UCSLUGC_EXTRA_BBFILES to the full path name to
# the .bb files for the packages to build - see ucslugc-packages.conf in this
@@ -51,28 +55,6 @@ FEED_URIS_append += "native##http://ipkg.nslu2-linux.org/feeds/ucslugc/native/${
#FEED_URIS_append += "unstable_native##http://ipkg.nslu2-linux.org/feeds/ucslugc/native/unstable"
#----------------------------------------------------------------------------------
-# OVERALL BUILD OPTIONS
-#----------------------------------------------------------------------------------
-#
-# TARGET_CC_ARCH is used to provide architecture specific definitions to the C
-# compiler. For target compilation it is part of "CC" - not part of "CFLAGS" -
-# in the hope that individual package builds will therefore not circumvent it
-# (this doesn't always work, but it is more reliable than a simple setting of
-# CFLAGS values).
-#
-# For UcSlugC the architecture value used is based on the standard NSLU2 value,
-# however it selects both thumb interwork and thumb code generation to minimise
-# build size. The distro allows the choice of thumb or arm code to be overridden
-# on a per-package basis by setting NSLU2_THUMB (to empty) in the package .bb file.
-# See also the 'override' above.
-#NSLU2_THUMB = "-mthumb"
-NSLU2_THUMB = ""
-TARGET_CC_ARCH = "-march=armv5te -mtune=xscale -mthumb-interwork ${NSLU2_THUMB}"
-TARGET_CC_KERNEL_ARCH = "-march=armv5te -mtune=xscale -mno-thumb-interwork -mno-thumb"
-TARGET_LD_ARCH = ""
-TARGET_LD_KERNEL_ARCH = ""
-
-#----------------------------------------------------------------------------------
# FIRMWARE CONFIGURATION
#----------------------------------------------------------------------------------
# IMAGE BUILD OPTIONS
diff --git a/conf/machine/nslu2.conf b/conf/machine/nslu2.conf
index 136c3187ce..3a9a9d9730 100644
--- a/conf/machine/nslu2.conf
+++ b/conf/machine/nslu2.conf
@@ -2,25 +2,55 @@
#@NAME: Linksys NSLU2
#@DESCRIPTION: Machine configuration for the Linksys NSLU2 product
-TARGET_ARCH = "armeb"
-# NOTE: this used to contain armv5te, but any package marked
-# armv5te is almost certain to be little endian and all NSLU2
-# packages (openslug and unslung) are generated 'armeb', so
-# this list accepts only armeb or nslu2
-IPKG_ARCHS = "all ${TARGET_ARCH} ${MACHINE}"
-PREFERRED_PROVIDER_xserver ?= "xserver-kdrive"
+# NOTE: conf/${DISTRO}.conf is included after this file and may be
+# used to modify variables set here.
-IMAGE_ROOTFS_SIZE_ext2 = "10240"
-IMAGE_ROOTFS_SIZE_ext2.gz = "10240"
+#-------------------------------------------------------------------------------
+# Processor and compilation options
+#-------------------------------------------------------------------------------
+#OVERRIDES
+# ARM processors support both 32('arm') and 16('thumb') bit instruction sets,
+# The procedure call standard has special provision for inter-calling without
+# the need to know whether the instruction set of the target procedure
+# ('interwork'). These options control the instruction set and whether or not
+# interworking is supported.
+#
+# ARM_INTERWORK may be set to :thumb-interwork if required, empty otherwise.
+# ARM_THUMB may be set to ":thumb" (exactly that, with the leading :) if thumb
+# instructions are required, empty otherwise.
+#
+# These two variables define the instruction set used for compilation and
+# whether the other (16 or 32 bit) instruction set is supported by the distro.
+# These options may be changed on a per-package basis, however interwork is
+# required if the package instruction set does not match the distro option.
+# To set these in a package simply set the relevant variable to the correct
+# value, in each case *non-empty* means 'true' - -mthumb-interwork or -mthumb
+# in the compilation options.
+#ARM_INTERWORK = ":thumb-interwork"
+ARM_INTERWORK = ""
+#ARM_INSTRUCTION_SET = ":thumb"
+ARM_INSTRUCTION_SET = ""
+
+# The OVERRIDES are modified here so that 'NSLU2_BASE_DISTRO' overrides are
+# picked up if present (${DISTRO} overrides take precedence), ARM_INTERWORK
+# and ARM_INSTRUCTION_SET overrides are for handling bugs in packages which
+# cannot deal with the -mthumb-interwork or -mthumb settings.
+#NSLU2_BASE_DISTRO = ":openslug"
+NSLU2_BASE_DISTRO = ""
+OVERRIDES = "local:${MACHINE}:${DISTRO}${NSLU2_BASE_DISTRO}:${TARGET_OS}:${TARGET_ARCH}${ARM_INSTRUCTION_SET}${ARM_INTERWORK}:build-${BUILD_OS}"
+
+#COMPILER
+# Compiler options - passed to TARGET_CC_ARCH
+ARM_INTERWORK_M_OPT = "${@['-mthumb-interwork', '-mno-thumb-interwork'][bb.data.getVar('ARM_INTERWORK', d, 1) == '']}"
+ARM_THUMB_M_OPT = "${@['-mthumb', '-mno-thumb'][bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) == '']}"
# This was 'include tune-xscale.conf' but that doesn't work
# (it would need to be conf/machine/tune-xscale.conf) and
# anyway it sets the package architecture to armeb.
-TARGET_CC_ARCH = "-march=armv5te -mtune=xscale"
-TARGET_CC_KERNEL_ARCH = "-march=armv5te -mtune=xscale"
+TARGET_CC_ARCH = "-march=armv5te -mtune=xscale ${ARM_INTERWORK_M_OPT} ${ARM_THUMB_M_OPT}"
+TARGET_CC_KERNEL_ARCH = "-march=armv5te -mtune=xscale -mno-thumb-interwork -mno-thumb"
TARGET_LD_ARCH = ""
TARGET_LD_KERNEL_ARCH = ""
-PACKAGE_ARCH = "armeb"
# Optimization settings. Os works fine and is significantly
# better than O2. The other settings are somewhat arbitrary.
@@ -39,10 +69,69 @@ FULL_OPTIMIZATION = "-Os -fomit-frame-pointer -frename-registers \
# these functions must be disabled (this only occurs with -O)
FULL_OPTIMIZATION_append_linux-uclibc = " -fno-builtin-sin -fno-builtin-cos"
+#-------------------------------------------------------------------------------
+# 'ARCH' options - package architecture and the 'target' architecture
+#-------------------------------------------------------------------------------
+# Historically the 'arch' is armeb, but this causes problems because it is
+# generic ('armeb' should really only use instructions present on all ARM
+# processors). Correcting it is difficult, however, because it is written in
+# to so many places.
+#
+# TARGET_ARCH is *wrong* it should be armv5teb or, maybe, thumbv5teb
+# however many packages have been modified to recognised 'armeb' inside
+# configure scripts, fixing this up to handle arm*eb or thumb*eb is a
+# lot of work, so has not yet been done.
+#NOTE: do *not* change this is a distro.conf, a lot of work is required
+# to get this fixed.
+TARGET_ARCH = "armeb"
+
+# The list of valid architectures for thumb or arm on NSLU2. The arm list is
+# derived from the architecture settings known to gcc, the thumb list is then
+# derived from that (only the 't' architectures of course). Note: NSLU2 is
+# assumed to imply 'big-endian', though in fact this need not be the case.
+NSLU2_ARM_ARCHITECTURES = "armeb armv2b armv2ab armv3b armv3mb armv4b armv4tb armv5b armv5tb armv5eb armv5teb xscaleb"
+NSLU2_THUMB_ARCHITECTURES = "thumbeb thumbv4tb thumbv5tb"
+
+# NOTE: this list contains just the things which rootfs_ipk.bbclass does not
+# add, rootfs_ipk.bbclass evaluates:
+#
+# ipkgarchs="all any noarch ${TARGET_ARCH} ${IPKG_ARCHS} ${MACHINE}"
+#
+# This is a priority ordered list - most desireable architecture at the end, so
+# put NSLU2_(ARM_INSTRUCTION_SET)_ARCHITECTURES at the end and, if ARM_INTERWORK
+# precede this with the other architectures.
+IPKG_ARCHS = "${@(lambda arch_thumb, arch_arm, is_arm, interwork: \
+ (interwork and (is_arm and arch_thumb or arch_arm) + ' ' or '') \
+ + (is_arm and arch_arm or arch_thumb)) \
+ (bb.data.getVar('NSLU2_THUMB_ARCHITECTURES', d, 1), \
+ bb.data.getVar('NSLU2_ARM_ARCHITECTURES', d, 1), \
+ bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) == '', \
+ bb.data.getVar('ARM_INTERWORK', d, 1) != '')}"
+
+# The package architecture is 'wrong' - it should be armv5teb or thumbv5teb -
+# however this setting is retained for backward compatibility as changing it
+# would mean that old systems would not accept new packages! (armv5teb is not
+# in the old system list).
+#NOTE: new distros with independent feeds are encouraged to fix this, the
+# variable NSLU2_PACKAGE_ARCH is provided for this purpose.
+PACKAGE_ARCH = "armeb"
+NSLU2_PACKAGE_ARCH = "${@['thumbv5tb', 'armv5teb'][bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) == '']}"
+
+#-------------------------------------------------------------------------------
+# Miscellany
+#-------------------------------------------------------------------------------
+# JBowler(20050811): I don't think any of the following are required (now).
+PREFERRED_PROVIDER_xserver ?= "xserver-kdrive"
+IMAGE_ROOTFS_SIZE_ext2 = "10240"
+IMAGE_ROOTFS_SIZE_ext2.gz = "10240"
+
SERIAL_CONSOLE = "115200 ttyS0"
KERNEL_CONSOLE = "ttyS0,115200n8"
USE_VT = "0"
+#-------------------------------------------------------------------------------
+# Package versions
+#-------------------------------------------------------------------------------
CVSDATE_gnu-config ?= "20050713"
CVSDATE_gnu-config-native ?= "20050713"
CVSDATE_ipkg-utils-native ?= "20050713"