# Copyright 1999-2003 Gentoo Technologies, Inc. # Distributed under the terms of the GNU General Public License v2 # $Header: $ inherit eutils crosscompile MY_P_TMP="${P/ucl/uCl}" MY_P="${MY_P_TMP/-buildroot/}" GCCVER=3.3.2 BINUTILSVER=2.14.90.0.6 UCLIBC_BUILDROOT_DATE=20031126 DESCRIPTION="C library for developing embedded Linux systems" HOMEPAGE="http://www.uclibc.org/" SRC_URI="mirror://gnu/gcc/releases/gcc/gcc-${GCCVER}/gcc-${GCCVER}.tar.bz2 http://www.uclibc.org/cgi-bin/cvsweb/buildroot/buildroot-${UCLIBC_BUILDROOT_DATE}.tar.bz2 mirror://kernel/linux/libs/uclibc/${MY_P}.tar.bz2 mirror://kernel/linux/devel/binutils/binutils-${BINUTILSVER}.tar.bz2 mirror://kernel/linux/libs/uclibc/toolchain/kernel-headers-2.4.21.tar.bz2 nls? ( http://www.uclibc.org/downloads/uClibc-locale-030818.tgz ) nommu? ( mirror://kernel/linux/libs/uclibc/toolchain/elf2flt-20030620.tar.bz2 )" # Note: buildroot doesn't exist on uclibc - have to download the cvs and self pack # for testing only RESTRICT="nomirror" LICENSE="LGPL-2" # # Since cross compilers require different slots # # NOTE - cross-setslot is for applications not compilers # # crosstarget -equal to below if [ -n "${CCHOST}" ] && [ "${CHOST}" != "${CCHOST}" ]; then if [ -n "${TARGET_ARCH}" ] then SLOT="${TARGET_ARCH}-${CCHOST}" else SLOT="${CCHOST}" fi else if [ -n "${TARGET_ARCH}" ] then SLOT="${TARGET_ARCH}" else SLOT="0" fi fi IUSE="nls ipv6 debug nommu fullrpc etdyn" # Local use flags # nommu = No memory management unit # fullrpc defines xdr functions and some lesser used rpc stuff. # etdyn - apply etdyn patch # There was some comment some that alpha may be broken although I don't know. KEYWORDS="~x86 ~ppc ~mips ~arm ~alpha" # TODO may a few more... DEPEND="dev-lang/perl sys-devel/gcc sys-libs/glibc >=sys-apps/sed-4 sys-apps/grep sys-apps/findutils app-arch/tar nls? ( app-arch/gzip )" #?? app-arch/bzip2" # no I haven't checked every virtual/glibc instead of sys-libs/glibc - will check it on itself if # time/curiosity permits. RDEPEND="" PROVIDE="virtual/glibc" S=${WORKDIR}/buildroot src_unpack() { unpack buildroot-${UCLIBC_BUILDROOT_DATE}.tar.bz2 cd ${S} einfo "You can set the TARGET_ARCH env varible to secify" einfo "the target architecture for the uclibc (cross-)compiler" einfo "" einfo "Examples: `grep -E '^#?ARCH:=' Makefile`" local TARGETARCH=${TARGET_ARCH} if [ -z "${TARGETARCH}" ]; then TARGETARCH=`target-arch` fi einfo "Target ARCH = ${TARGET_ARCH}" if [ -n "${TARGETARCH}" ]; then if [ "`extract-arch ${TARGETARCH}`" != "unknown" ]; then einfo "Architecture for ${TARGETARCH}" sed -i -e "s/^ARCH:=\(.*\)/#ARCH:=\1/g" Makefile sed -i -e "s/^#ARCH:=\(.*\)/ARCH:=${TARGETARCH}\n#ARCH:=\1/" Makefile fi fi # # sed -i -e "s#^TARGET_PATH=.*#TARGET_PATH=${D}usr/\${ARCH}-uclib#" # sed -i -e "s#^STAGING_DIR=.*#STAGING_DIR=${D}#" sed -i \ -e "s#^USE_UCLIBC_SNAPSHOT:=.*#USE_UCLIBC_SNAPSHOT:=false#" \ -e "s#^USE_BUSYBOX_SNAPSHOT:=.*#USE_BUSYBOX_SNAPSHOT:=false#" \ -e "s#^DL_DIR:=.*#DL_DIR=${DISTDIR}#" \ -e "s#^WGET:=.*#WGET:=/bin/true#" \ -e "s/^TARGETS+=busybox\(.*\)/#TARGETS+=busybox\1/" \ -e "s/^TARGETS+=ext2fs\(.*\)/#TARGETS+=ext2fs\1/" \ -e 's#tar #tar --no-same-owner #' \ -e "s#^STAGING_DIR=.*#STAGING_DIR=${D}#" \ Makefile # TODO (maybe) fix HOSTARCH:= in Makefile # # cat << EOF >> Makefile patched: \$(BUILD_DIR) \$(STAGING_DIR) \$(TARGET_DIR) \ host-sed \$(BINUTILS_DIR)/.patched \$(GCC_DIR)/.patched \ \$(UCLIBC_DIR)/.unpacked \ \$(LINUX_DIR)/.configured configured: uclibc-configured # \$(MAKE) -C \$(UCLIBC_DIR) PREFIX=\$(STAGING_DIR) headers install_dev; EOF # "cp -a" implies --preserve=ownership which is blocked by sandbox? sed -i -e 's#tar #tar --no-same-owner #' \ -e 's#cp -a#cp --preserve=mode,timestamps -dPR#' make/*.mk emake patched || die "failed to patch uclibc buildroot" if ["`use nls`"]; then cp ${DISTDIR}/uClibc-locale-030818.tgz build*/${MY_P}/extra/locale/ sed -i -e "s#^WGET:=.*#WGET:=/bin/true#" build_*/${MY_P}/Makefile fi cd build_* local patches="uClibc-${PV}-flipturn.patch" use etdyn && patches="${patches} uClibc-${PV}-pax.patch uClibc-${PV}-etdyn.patch" for patch in ${patches} ; do [ -f ${FILESDIR}/${PV}/${patch} ] && epatch ${FILESDIR}/${PV}/${patch} done } src_compile() { use nls && sed -i -e "s/^ENABLE_LOCALE.*/ENABLE_LOCALE:=true/" Makefile local uconfig; use nls && uconfig="sources/uClibc.config-locale" || uconfig="sources/uClibc.config" use ipv6 && sed -i -e "s/^.*UCLIBC_HAS_IPV6.*/UCLIBC_HAS_IPV6=y/" ${uconfig} \ || sed -i -e "s/^.*UCLIBC_HAS_IPV6.*/UCLIBC_HAS_IPV6=n/" ${uconfig} use debug && sed -i -e "s/^.*DODEBUG.*/DODEBUG=y/" ${uconfig} \ || sed -i -e "s/^.*DODEBUG.*/DODEBUG=n/" ${uconfig} use fullrpc && sed -i -e "s/^.*UCLIBC_HAS_FULL_RPC.*/UCLIBC_HAS_FULL_RPC=y/" ${uconfig} \ || sed -i -e "s/^.*UCLIBC_HAS_FULL_RPC.*/UCLIBC_HAS_FULL_RPC=n/" ${uconfig} use nommu && sed -i -e "s/^.*UCLIBC_HAS_MMU.*/UCLIBC_HAS_MMU:=n/" ${uconfig} \ || sed -i -e "s/^.*UCLIBC_HAS_MMU.*/UCLIBC_HAS_MMU:=y/" ${uconfig} # Other possibe options for debug use flag # DOASSERTS # SUPPORT_LD_DEBUG # SUPPORT_LD_DEBUG_EARLY emake --debug uclibc-configured || die "Could not configure uclibc-buildroot" #emake configured || die "Could not configure uclibc-buildroot" make --debug SED=/bin/sed all || die "Could not compile uclibc-buildroot" } src_install() { local ARCHCOM=$(grep "^ARCH:=" Makefile) local ARCH=${ARCHCOM:6} local BINPREFIX=${ARCH}-uclibc- local gccconfigfile=${D}/etc/env.d/gcc/${ARCH}-linux-uclibc-${PV} dodir /etc/env.d/gcc echo "PATH=\"/usr/${ARCH}-linux\"" > ${gccconfigfile} echo "ROOTPATH=\"/usr/${ARCH}-uclibc/usr/bin\"" >> ${gccconfigfile} echo "LDPATH=\"/usr/${ARCH}-uclibc/lib\"" >> ${gccconfigfile} echo "CC=\"/usr/${ARCH}-uclibc/bin/${BINPREFIX}-gcc\"" >> ${gccconfigfile} echo "CXX=\"/usr/${ARCH}-uclibc/bin/${BINPREFIX}-g++\"" >> ${gccconfigfile} # fake this for gcc-config dodir /usr/lib/gcc-lib/${ARCH}-linux-uclibc dosym /usr/${ARCH}-linux-uclibc/lib \ /usr/lib/gcc-lib/${ARCH}-linux-uclibc/${PV} cd build_${ARCH}/${MY_P} dodoc docs/*.txt dodoc README INSTALL dohtml -r docs/uclibc.org }