#@TYPE: Distribution
#@NAME: SlugOS
#@DESCRIPTION: SlugOS Linux Distribution for the NSLU2

# WARNING: this file should not be used directly, use one of
# the supported slugos-derived distributions instead.

#===============================================================================#
#===============================================================================#
#===============================================================================#
#                              NOTE NOTE NOTE
#
# This *forces* the preferred kernel version; making it unable to be overridden
# in the local.conf file.  This is a Very Bad Thing.  This is temporary, and
# is intended to facilitate some SlugOS-specific testing without disturbing
# other distros that use the ixp4xx machine type (which is currently where the
# preferred kernel version is set).
#
# This *must* be removed after initial testing is completed.  MJW 08-Dec-2008
#
PREFERRED_VERSION_linux-ixp4xx = "2.6.27.8+svnr${SRCREV}"
#
#===============================================================================#
#===============================================================================#
#===============================================================================#



#===============================================================================#
#===============================================================================#
#===============================================================================#
#                              NOTE NOTE NOTE
#
# Override the sane-srcrev file with regard to the opkg versions - this should
# be removed as soon as opkg starts to work correctly again as newer opkg
# versions fix a number of bugs and add some desireable features.
#
SRCREV_pn-opkg        = "160"
SRCREV_pn-opkg-native = "160"
SRCREV_pn-opkg-sdk    = "160"
#
#===============================================================================#
#===============================================================================#
#===============================================================================#


#----------------------------------------------------------------------------------
# STANDARD SLUGOS DEFINITIONS
#----------------------------------------------------------------------------------
# The following must be set in the top level distro file:
#
#DISTRO_NAME
#DISTRO_TYPE
#ARM_INSTRUCTION_SET "arm" or "thumb"
#TARGET_OS "linux" or "linux-uclibc"

# The following may be overridden to make sub-versions
SLUGOS_VERSION = "5.2"
DISTRO_REVISION ?= ""
DISTRO_VERSION ?= "${SLUGOS_VERSION}${DISTRO_REVISION}-${DISTRO_TYPE}"
# For release (only):
# DISTRO_FEED ?= "${SLUGOS_VERSION}-${DISTRO_TYPE}"
DISTRO_FEED ?= "unstable"

# We want images supporting the following features (for task-base)
DISTRO_FEATURES = "nfs smbfs wifi ppp alsa bluetooth ext2 vfat irda pcmcia usbgadget usbhost pci"

IMAGE_BASENAME = "${@['slugos${SITEINFO_ENDIANESS}', 'ucslugc'][bb.data.getVar('TARGET_OS', d, 1) == 'linux-uclibc']}"

# The following need not be set, the defaults should be adequate
#USE_NLS = "no" or "yes"
USE_NLS ?= "no"

# To make errors easier to identify:
DISTRO_NAME ?= "INVALID-${SITEINFO_ENDIANESS}-${ARM_INSTRUCTION_SET}-${TARGET_OS}"
DISTRO_TYPE ?= "INVALID"

# The following must not be changed.
TARGET_FPU = "soft"

# glib-2.0 builds require USE_NLS to be overridden
USE_NLS_glib-2.0 = "yes"
USE_NLS_glib-2.0-native = "yes"
USE_NLS_gcc-cross = "no"

INHERIT += "package_ipk debian testlab packaged-staging"

# FULL_OPTIMIZATION
#    Optimization settings.  Os works fine and is significantly better than O2.
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os"

# We need to keep OABI compat for things like madwifi-ng.
ARM_KEEP_OABI = "1"

# We may wish to experiment with this as a further performance improvement, but
# small steps at a time are the best strategy.
#TARGET_LINK_HASH_STYLE = "-Wl,--hash-style=gnu"

CXXFLAGS += "-fvisibility-inlines-hidden"

# There is a problem of sorts with Perl.  This needs a better home eventually,
# but for now put it in this file.
FULL_OPTIMIZATION_pn-perl = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O1"
BUILD_OPTIMIZATION_pn-perl = "-O1"

#----------------------------------------------------------------------------------
# FEEDS
#  The FEED_URIS lines define where on the internet SlugOS looks for packages
#  when downloading new packages or updating existing packages.  Additional feeds
#  (such as a local feed) can be defined in local.conf
#----------------------------------------------------------------------------------
#
FEED_URIS_append += "cross##http://ipkg.nslu2-linux.org/feeds/${IMAGE_BASENAME}/cross/${DISTRO_FEED}"
FEED_URIS_append += "native##http://ipkg.nslu2-linux.org/feeds/${IMAGE_BASENAME}/native/${DISTRO_FEED}"

#----------------------------------------------------------------------------------
# FIRMWARE CONFIGURATION
#----------------------------------------------------------------------------------
# IMAGE BUILD OPTIONS
# -------------------
# CMDLINE* macros define the kernel command line.  CMDLINE_DEBUG is provided
# to enable/disable debugging in the distro.  Here noirqdebug is used to
# remove the messages about unhandled interrupts - people debugging interrupt
# issues in the kernel need to cancel this (set CMDLINE_DEBUG empty in local.conf)
CMDLINE_ROOT  = "root=/dev/mtdblock4 rootfstype=jffs2 rw init=/linuxrc"
CMDLINE_DEBUG = "noirqdebug"

# EXTRA PACKAGES
# --------------
# SlugOS builds an image with no extra packages - to add packages to the
# firmware include this file in a new 'distro' configuration file) and set
# the definition below to include the requirements.
# NOTE: as built this system will *not* be able to boot off anything other than
# the flash file system ('turnup' will not work).  You need to add the filesystem
# modules for your chosen root file system (and any others which will be used).
# See openslug.conf for a more full-featured system!
#
# Everything in this list gets added to the flash image, along with any RDEPENDS
# it has itself!
DISTRO_EXTRA_DEPENDS ?= ""
DISTRO_EXTRA_RDEPENDS ?= ""
DISTRO_EXTRA_RRECOMMENDS ?= ""

#----------------------------------------------------------------------------------
# PACKAGE VERSION CONTROL
#----------------------------------------------------------------------------------
# Define how to bootstrap the system - we need cross compilers.  It is also
# necessary to define which gets generated first, glibc or the kernel, and
# this is done by selecting the provider of libc (in this case it needs the
# kernel, so there has to be a non-libc gcc to build the kernel!)

# Virtuals:
PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial"
PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate = "gcc-cross-intermediate"
PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross"
PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross"

#Set preferred provider for the C library that is used to build the crosscompiler (NPTL voodoo)
PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "glibc"
PREFERRED_PROVIDER_virtual/arm-linux-libc-for-gcc       = "glibc"
PREFERRED_PROVIDER_virtual/armeb-linux-libc-for-gcc     = "glibc"
PREFERRED_PROVIDER_virtual/arm-linux-gnueabi-libc-for-gcc    = "glibc"
PREFERRED_PROVIDER_virtual/armeb-linux-gnueabi-libc-for-gcc  = "glibc"

# Set the preferred provider for a few toolchain-related items, otherwise
# these may be selected from the external-toolchain instead.
PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross"
PREFERRED_PROVIDER_virtual/arm-linux-binutils       = "binutils-cross"
PREFERRED_PROVIDER_virtual/armeb-linux-binutils     = "binutils-cross"
PREFERRED_PROVIDER_linux-libc-headers               = "linux-libc-headers"

# compiler/binary/library versions
PREFERRED_VERSION_binutils               ?= "2.18.50.0.7"
PREFERRED_VERSION_binutils-cross         ?= "2.18.50.0.7"
PREFERRED_VERSION_binutils-cross-sdk     ?= "2.18.50.0.7"
PREFERRED_VERSION_gcc                    ?= "4.2.4"
PREFERRED_VERSION_gcc-cross              ?= "4.2.4"
PREFERRED_VERSION_gcc-cross-sdk          ?= "4.2.4"
PREFERRED_VERSION_gcc-cross-initial      ?= "4.2.4"
PREFERRED_VERSION_gcc-cross-intermediate ?= "4.2.4"
PREFERRED_VERSION_glibc                  ?= "2.6.1"
PREFERRED_VERSION_glibc-initial          ?= "2.6.1"

# Select the smallest provider of x11 libraries
PREFERRED_PROVIDER_virtual/libx11 ?= "diet-x11"
SRCDATE_diet-x11 ?= "20060106"

# Ensure consistency across all SlugOS builds for the provider of a
# relational database - use the latest version of the SleepyCat
# Berkeley database
PREFERRED_PROVIDER_virtual/db = "db"
PREFERRED_PROVIDER_virtual/db-native = "db-native"

SRCDATE_ipkg-utils ?= "20060106"
SRCDATE_ipkg-utils-native ?= "20060106"
SRCDATE_ipkg-link ?= "20060106"
SRCDATE_irssi ?= "20050930"

CVS_TARBALL_STASH = "http://sources.nslu2-linux.org/sources/"
INHERIT += "nslu2-mirrors"

PREFERRED_VERSION_nslu2-linksys-firmware ?= "2.3r63"

PREFERRED_VERSION_ipkg ?= "0.99.163"
PREFERRED_VERSION_ipkg-native ?= "0.99.163"

#FIXME: HACK: REMOVE THIS
IGNORE_STRIP_ERRORS = ""

PREFERRED_VERSION_linux-libc-headers ?= "2.6.23"

# New pango and older glib-2.0 versions don't mix,
# so specify exactly what we would like to build.
#PREFERRED_VERSION_pango    ?= "1.20.5"
#PREFERRED_VERSION_glib-2.0 ?= "2.16.1"
#PREFERRED_VERSION_cairo    ?= "1.4.8"

PREFERRED_VERSION_udev	   ?= "118"

# Stick with an older gettext and e2fsprogs stuff
# and gnutls... (our autotools is too old at the moment)
#PREFERRED_VERSION_gnutls           ?= "1.6.3"
#PREFERRED_VERSION_gettext          ?= "0.14.1"
#PREFERRED_VERSION_gettext-native   ?= "0.14.1"
#PREFERRED_VERSION_e2fsprogs-libs   ?= "1.39"
#PREFERRED_VERSION_e2fsprogs        ?= "1.38"
#PREFERRED_VERSION_e2fsprogs-native ?= "1.38"

# we don't ship gtk-directfb by default
PREFERRED_PROVIDER_gtk+                   ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-ani  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-gif  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-ico  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-png  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-ras  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-tga  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm  ?= "gtk+"

PREFERRED_PROVIDER_avahi  ?= "avahi"
PREFERRED_PROVIDER_gconf  ?= "gconf"

# These shouldn't be here either -- these versions should
# be pulled from a separate include file.  But they can
# go here for now.
PREFERRED_VERSION_automake-native       ?= "1.10"
PREFERRED_VERSION_busybox               ?= "1.11.3"
PREFERRED_VERSION_dbus                  ?= "1.2.1"
PREFERRED_VERSION_glib-2.0              ?= "2.18.3"
PREFERRED_VERSION_glib-2.0-native       ?= "2.18.0"
PREFERRED_VERSION_libtool               ?= "1.5.10"
PREFERRED_VERSION_libtool-native        ?= "1.5.10"
PREFERRED_VERSION_libtool-cross         ?= "1.5.10"
PREFERRED_VERSION_libtool-sdk           ?= "1.5.10"
PREFERRED_VERSION_m4                    ?= "1.4.8"
PREFERRED_VERSION_m4-native             ?= "1.4.8"
PREFERRED_VERSION_pkgconfig             ?= "0.23"
PREFERRED_VERSION_pkgconfig-native      ?= "0.23"

# Hack alert - selecting this version of libusb effectively selects
# the use of libusb1 and libusb-compat in the case that something
# still depends on libusb.  This is required because otherwise
# libusb will overwrite libusb-compat in staging.
PREFERRED_VERSION_libusb                ?= "0.0.0"

require conf/distro/include/sane-srcdates.inc
require conf/distro/include/sane-srcrevs.inc