From de292dea924251146c9d17876fb4abb0555d2f02 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 29 Nov 2009 05:53:05 +0100 Subject: [PATCH] new package: - adding eglibc as default libc, with this some bugs are fixed. We also can use binary drivers and can have vdpau support (will be included later). --- config/options | 37 +-------- config/path | 61 +++++++++++--- packages/image/install | 32 ++++---- packages/toolchain/build | 6 +- packages/toolchain/devel/eglibc/build | 81 +++++++++++++++++++ .../devel/eglibc/config/nsswitch.conf | 19 +++++ .../eglibc/config/option-groups.defaults | 66 +++++++++++++++ packages/toolchain/devel/eglibc/install | 47 +++++++++++ .../patches/10-glibc-2.11-libgcc_eh-1.diff | 64 +++++++++++++++ .../patches/10_glibc-cv_gnu89_inline.diff | 12 +++ packages/toolchain/devel/eglibc/unpack | 28 +++++++ packages/toolchain/devel/eglibc/url | 1 + 12 files changed, 389 insertions(+), 65 deletions(-) create mode 100755 packages/toolchain/devel/eglibc/build create mode 100644 packages/toolchain/devel/eglibc/config/nsswitch.conf create mode 100644 packages/toolchain/devel/eglibc/config/option-groups.defaults create mode 100755 packages/toolchain/devel/eglibc/install create mode 100644 packages/toolchain/devel/eglibc/patches/10-glibc-2.11-libgcc_eh-1.diff create mode 100644 packages/toolchain/devel/eglibc/patches/10_glibc-cv_gnu89_inline.diff create mode 100755 packages/toolchain/devel/eglibc/unpack create mode 100644 packages/toolchain/devel/eglibc/url diff --git a/config/options b/config/options index 67763b257d..fda575c376 100644 --- a/config/options +++ b/config/options @@ -39,8 +39,8 @@ esac # Build optimizations (size/speed) OPTIMIZATIONS=size -# Target system library C (uClibc/glibc) -TARGET_LIBC=uClibc +# Target system library C (uClibc/eglibc) +TARGET_LIBC=eglibc # Library strip LIBSTRIP=yes @@ -56,9 +56,6 @@ LOCAL_CXX=`which g++` # Support C++ in toolchain TOOLCHAIN_CXX=yes -# Mediacenter to use (elisa, entertainer) -MEDIACENTER=elisa - # Menu language (ar/bg/br/ca/cs/de/en/es/et/fi/fr/gr/he/hu/it/nl/no/pl/ro/ru/sk/sr/sv/vn) MENU_LANG=de @@ -85,35 +82,6 @@ REMOTE=atiusb # hauppauge/homemade/irman/leadtek/leadtek-pvr2000/logitech/pctv/realmagic/ # digimatrix/mceusb/mceusb2/streamzap/cx88/imonknob/ultrax/dvico/MCE-X10) RECEIVER=atiusb - - -# Use Extra Binary Firmwares - WiFi/DVB cards (yes/no) -EXTRAFIRMWARES=no - -# Support for emulators (yes/no) -EMULATORS=no - -# Support for games (yes/no) -GAMES=no - -# Network Support (Samba shares and FTP Server) (yes/no) -NETWORK=yes - -# Start network services ? (Anonymous Telnet and FTP server as root) (yes/no) -SERVICES=yes - -# enable bootchart (yes/no) -BOOTCHART=yes - -# Wireless network support (yes/no) -WIFI=yes - -# Use NdisWrapper for Windows network driver support (yes/no) -NDISWRAPPER=no - -# Allow use of WPA_Supplicant for WPA-PSK secured wireless networks (yes/no) -WPA_SUPPLICANT=yes - # X.org drivers to use (all/ati/geode/glint/i740/intel/mga/nv/openchrome/ # radeonhd/s3/s3virge/savage/sis/tdfx/trident/vesa/vmware) # Space separated list is supported, e.g. XORG_DRIVERS="ati s3" @@ -154,3 +122,4 @@ DEBUG=no DEVTOOLS=no . config/path + diff --git a/config/path b/config/path index fe02463b08..ea3268043e 100644 --- a/config/path +++ b/config/path @@ -3,10 +3,38 @@ set -e test -f config/target-$TARGET_PLATFORM && . config/target-$TARGET_PLATFORM # determine architecture's family -TARGET_FAMILY=i686 -TARGET_NAME=$TARGET_FAMILY-linux-uclibc -#determines TARGET_CPU, if not forced by user -TARGET_CPU=generic +case $TARGET_ARCH in + i386) + TARGET_FAMILY=i686 + ;; + + x86_64) + TARGET_FAMILY=x86_64 + ;; +esac + +case $TARGET_LIBC in + uClibc) + TARGET_NAME=$TARGET_FAMILY-openelec-linux-uclibc + ;; + + eglibc) + TARGET_NAME=$TARGET_FAMILY-openelec-linux-gnu + ;; +esac + +# determines TARGET_CPU, if not forced by user +if [ -z "$TARGET_CPU" ]; then + case $TARGET_ARCH in + i386) + TARGET_CPU=generic + ;; + + x86_64) + TARGET_CPU=generic + ;; + esac +fi OPENELEC_VERSION=`cat VERSION` CONFIG=config @@ -72,9 +100,20 @@ TARGET_RANLIB=${TARGET_PREFIX}ranlib TARGET_OBJCOPY=${TARGET_PREFIX}objcopy TARGET_STRIP=${TARGET_PREFIX}strip TARGET_CPPFLAGS= -TARGET_CFLAGS="$GCC_OPTIM -Wall -pipe -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -march=$TARGET_FAMILY -mtune=$TARGET_CPU" +TARGET_CFLAGS="$GCC_OPTIM -Wall -pipe -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -mtune=$TARGET_CPU" TARGET_CXXFLAGS="$TARGET_CFLAGS" TARGET_LDFLAGS= + +case $TARGET_ARCH in + i386) + TARGET_CFLAGS="$TARGET_CFLAGS -march=$TARGET_FAMILY" + TARGET_CXXFLAGS="$TARGET_CXXFLAGS -march=$TARGET_FAMILY" + ;; + powerpc|powerpc64|x86_64) + TARGET_CFLAGS="$TARGET_CFLAGS -fPIC" + TARGET_CXXFLAGS="$TARGET_CXXFLAGS -fPIC" + ;; +esac if [ "$DEBUG" = yes ]; then TARGET_CFLAGS="$TARGET_CFLAGS -ggdb" @@ -180,9 +219,9 @@ kernel_path() { ls -d $ROOT/$BUILD/linux* } -require_glibc() { - if [ "$TARGET_LIBC" != glibc ]; then - echo "$1 requires glibc, aborting." +require_eglibc() { + if [ "$TARGET_LIBC" != eglibc ]; then + echo "$1 requires eglibc, aborting." exit 1 fi } @@ -226,6 +265,6 @@ add_group() { INCLUDED_LANGS="en $MENU_LANG $INCLUDED_LANGS" # read personal options if available -if [ -f $PROJECT_DIR/$PROJECT/options ]; then -. $PROJECT_DIR/$PROJECT/options -fi + if [ -f $PROJECT_DIR/$PROJECT/options ]; then + . $PROJECT_DIR/$PROJECT/options + fi diff --git a/packages/image/install b/packages/image/install index b8a821c1be..62769fe900 100755 --- a/packages/image/install +++ b/packages/image/install @@ -45,13 +45,11 @@ case "$2" in ln -sf /var/media $INSTALL/media # Basissystem... - $SCRIPTS/install uClibc + $SCRIPTS/install $TARGET_LIBC $SCRIPTS/install gcc-final $SCRIPTS/install linux $2 $SCRIPTS/install busybox - -# $SCRIPTS/install ConsoleKit -# $SCRIPTS/install DeviceKit-disks + $SCRIPTS/install util-linux-ng echo $TARGET_ARCH > $INSTALL/etc/arch echo "$OPENELEC_VERSION" > $INSTALL/etc/version @@ -82,13 +80,13 @@ case "$2" in echo "127.0.0.1 mobile.openelec.tv localhost" > $INSTALL/etc/hosts mkdir -p $ROOT/target - rm -rf $ROOT/target/OpenELEC-$PROJECT-$OPENELEC_VERSION.kernel - cp -PR $BUILD/linux-*/arch/x86/boot/bzImage $ROOT/target/OpenELEC-$PROJECT-$OPENELEC_VERSION.kernel + rm -rf $ROOT/target/OpenELEC-$PROJECT-$TARGET_LIBC-$OPENELEC_VERSION.kernel + cp -PR $BUILD/linux-*/arch/x86/boot/bzImage $ROOT/target/OpenELEC-$PROJECT-$TARGET_LIBC-$OPENELEC_VERSION.kernel - echo "rm -rf $ROOT/target/OpenELEC-$PROJECT-$MEDIACENTER-$OPENELEC_VERSION.system" >> $ROOT/.fakeroot - echo "$ROOT/$TOOLCHAIN/bin/mksquashfs $INSTALL $ROOT/target/OpenELEC-$PROJECT-$OPENELEC_VERSION.system -noappend" >> $ROOT/.fakeroot # -all-root + echo "rm -rf $ROOT/target/OpenELEC-$PROJECT-$TARGET_LIBC-$OPENELEC_VERSION.system" >> $ROOT/.fakeroot + echo "$ROOT/$TOOLCHAIN/bin/mksquashfs $INSTALL $ROOT/target/OpenELEC-$PROJECT-$TARGET_LIBC-$OPENELEC_VERSION.system -noappend" >> $ROOT/.fakeroot $ROOT/$TOOLCHAIN/bin/fakeroot -- $ROOT/.fakeroot - chmod 0644 $ROOT/target/OpenELEC-$PROJECT-$OPENELEC_VERSION.system + chmod 0644 $ROOT/target/OpenELEC-$PROJECT-$TARGET_LIBC-$OPENELEC_VERSION.system rm -rf $ROOT/.fakeroot ;; @@ -97,18 +95,18 @@ case "$2" in $SCRIPTS/install image system mkdir -p $ROOT/target - rm -rf $ROOT/target/OpenELEC-$PROJECT-$OPENELEC_VERSION-qemu.flash - qemu-img create -f raw $ROOT/target/OpenELEC-$PROJECT-$OPENELEC_VERSION-qemu.flash 128M - /sbin/mkfs.ext3 -L OpenELEC -F $ROOT/target/OpenELEC-$PROJECT-$OPENELEC_VERSION-qemu.flash + rm -rf $ROOT/target/OpenELEC-$PROJECT-$TARGET_LIBC-$OPENELEC_VERSION-qemu.flash + qemu-img create -f raw $ROOT/target/OpenELEC-$PROJECT-$TARGET_LIBC-$OPENELEC_VERSION-qemu.flash 128M + /sbin/mkfs.ext3 -L OpenELEC -F $ROOT/target/OpenELEC-$PROJECT-$TARGET_LIBC-$OPENELEC_VERSION-qemu.flash mkdir -p $ROOT/.tmp - sudo mount -o loop $ROOT/target/OpenELEC-$PROJECT-$OPENELEC_VERSION-qemu.flash $ROOT/.tmp - cp -R $ROOT/target/OpenELEC-$PROJECT-$OPENELEC_VERSION.system $ROOT/.tmp/openelec.system + sudo mount -o loop $ROOT/target/OpenELEC-$PROJECT-$TARGET_LIBC-$OPENELEC_VERSION-qemu.flash $ROOT/.tmp + cp -R $ROOT/target/OpenELEC-$PROJECT-$TARGET_LIBC-$OPENELEC_VERSION.system $ROOT/.tmp/openelec.system sudo umount $ROOT/.tmp - rm -rf $ROOT/target/OpenELEC-$PROJECT-$OPENELEC_VERSION-qemu.store - qemu-img create -f raw $ROOT/target/OpenELEC-$PROJECT-$OPENELEC_VERSION-qemu.store 40M - /sbin/mkfs.ext3 -L OpenELEC -F $ROOT/target/OpenELEC-$PROJECT-$OPENELEC_VERSION-qemu.store + rm -rf $ROOT/target/OpenELEC-$PROJECT-$TARGET_LIBC-$OPENELEC_VERSION-qemu.store + qemu-img create -f raw $ROOT/target/OpenELEC-$PROJECT-$TARGET_LIBC-$OPENELEC_VERSION-qemu.store 40M + /sbin/mkfs.ext3 -L OpenELEC -F $ROOT/target/OpenELEC-$PROJECT-$TARGET_LIBC-$OPENELEC_VERSION-qemu.store ;; esac diff --git a/packages/toolchain/build b/packages/toolchain/build index 2319c4ed46..1834f9f8ae 100755 --- a/packages/toolchain/build +++ b/packages/toolchain/build @@ -10,9 +10,9 @@ $SCRIPTS/install lzma $SCRIPTS/install pkg-config $SCRIPTS/build intltool -$SCRIPTS/install binutils toolchain -$SCRIPTS/install gcc-core toolchain -$SCRIPTS/install uClibc toolchain +$SCRIPTS/install binutils +$SCRIPTS/install gcc-core +$SCRIPTS/install $TARGET_LIBC toolchain if [ "c" != "$TOOLCHAIN_LANGUAGES" ]; then $SCRIPTS/install gcc-final toolchain diff --git a/packages/toolchain/devel/eglibc/build b/packages/toolchain/devel/eglibc/build new file mode 100755 index 0000000000..b377aba8e0 --- /dev/null +++ b/packages/toolchain/devel/eglibc/build @@ -0,0 +1,81 @@ +#!/bin/sh + +. config/options + +$SCRIPTS/install gcc-core + +export BUILD_CC=$HOST_CC +export OBJDUMP_FOR_HOST=objdump + +if [ "$TARGET_ARCH" = i386 ]; then + CFLAGS="-march=$(echo $TARGET_NAME | cut -d- -f 1) -mtune=generic" +else + CFLAGS="-mtune=generic" +fi +CFLAGS="$CFLAGS -g -O2 -fno-stack-protector" +#CFLAGS="$CFLAGS -g -Os" + +if [ "$DEBUG" = yes ]; then + DEBUG_CONFIG="--enable-debug" +else + DEBUG_CONFIG="--disable-debug" + DEBUG_OPTIONS="OPTION_EGLIBC_BACKTRACE = n + OPTION_EGLIBC_MEMUSAGE = n" +fi + +NSS_CONF_DIR=`ls -d $ROOT/$BUILD/eglibc*/nss` + +cd $PKG_BUILD + +autoconf + +mkdir -p objdir-$1 +cd objdir-$1 + +cat >config.cache <options-groups.conf <configparms < conftest.c <&1 >/dev/null | grep -q " -lgcc_eh "; then ++ libc_cv_cc_with_libgcc_eh=yes ++ else ++ libc_cv_cc_with_libgcc_eh=no ++ fi ++ rm -f conftest*]) ++ AC_SUBST(libc_cv_cc_with_libgcc_eh) ++ if test $libc_cv_cc_with_libgcc_eh = yes; then ++ AC_DEFINE(HAVE_CC_WITH_LIBGCC_EH) ++ fi ++ + AC_CACHE_CHECK(for -z nodelete option, + libc_cv_z_nodelete, [dnl + cat > conftest.c <> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_BACKTRACE = n" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_BIG_MACROS = n" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_BSD = n" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_CXX_TESTS = n" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_CATGETS = n" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_CHARSETS = n" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_CRYPT = y" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_CRYPT_UFC = y" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_DB_ALIASES = n" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_ENVZ = n" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_FCVT = n" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_FMTMSG = n" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_FSTAB = y" >> $EGLIBC/eglibc.config + +echo "OPTION_EGLIBC_LIBM_BIG = n" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_LOCALES = n" >> $EGLIBC/eglibc.config +echo "OPTION_EGLIBC_LOCALE_CODE = n" >> $EGLIBC/eglibc.config + diff --git a/packages/toolchain/devel/eglibc/url b/packages/toolchain/devel/eglibc/url new file mode 100644 index 0000000000..e992ed9568 --- /dev/null +++ b/packages/toolchain/devel/eglibc/url @@ -0,0 +1 @@ +http://sources.openelec.tv/svn/eglibc-2.11-r2934.tar.bz2 \ No newline at end of file