#!/bin/sh # Copyright 2006 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ # - March 2006 CBUILD=$(portageq envvar CHOST) export PYTHON_DONTCOMPILE=1 USE_SAVE="${USE}" if [ ! -x /usr/bin/qlist ]; then echo "please emerge portage-utils" exit 1 fi gcc_executables=$(qlist -oeCI gcc| sort -u | grep ^cross- | sed s/cross-//g | tr / -) opts="$@" for x in "$@"; do if [[ $x == "--libc" ]]; then opts="${opts/${x}/}" DO_LIBC=1 do_libc=1 fi if [[ "${lastopt}" == "--target" ]]; then ctarget_only="${x}" opts="${opts/${x}/}" opts="${opts/${lastopt}/}" fi lastopt=${x} done function cross_env_update() { mkdir -p ${ROOT}/etc for lpath in /usr/local/lib /usr/${CTARGET}/lib /usr/lib/gcc/${CTARGET}/$(${CTARGET}-gcc -dumpversion) /usr/lib/libstdc++-v3/; do echo "${lpath}" >> ${ROOT}/etc/ld.so.conf done } function cmerge() { CHOST=${1} shift export CTARGET=${CHOST} ARCH=$(echo ${CTARGET} | cut -d '-' -f 1) CC=${CTARGET}-gcc CXX=${CTARGET}-g++ PKGDIR=${HOME}/packages/${CHOST} ROOT="${HOME}/ROOT/${CHOST}" LDFLAGS="-L${ROOT}/lib -L${ROOT}/usr/lib" CFLAGS="-Os -pipe -I${ROOT}/usr/include" CXXFLAGS="${CFLAGS}" do_libc=${DO_LIBC} unset ELIBC case ${CTARGET} in *-linux-gnu) ELIBC=glibc;; *-linux-uclibc) ELIBC=uclibc;; avr) ELIBC=avr-libc;; esac export ELIBC [[ $ELIBC == "" ]] && do_libc=0 USE="${ARCH} ${USE_SAVE}" case ${ARCH} in armeb) ARCH=arm;; s390x) ARCH=s390;; mips*) ARCH=mips;; powerpc64) ARCH=ppc64;; sparc*) ARCH=sparc;; powerpc) ARCH=ppc;; hppa*) ARCH=hppa;; sh4*|sheb) ARCH=sh;; x86_64) ARCH=amd64;; avr|ee|iop|cris) ARCH="x86";; i?86) ARCH=x86;; esac ACCEPT_KEYWORDS="${ARCH}" [[ "${unstable}" != "" ]] && ACCEPT_KEYWORDS="${ACCEPT_KEYWORDS} ~${ARCH}" USE="-* ${ARCH} ${USE} elibc_${ELIBC} multicall make-symlinks" export ARCH ACCEPT_KEYWORDS CFLAGS CXXFLAGS LDFLAGS ROOT CBUILD CHOST CTARGET CC CXX PKGDIR USE mkdir -p ${ROOT}/etc if [[ $ELIBC != "" ]]; then if [ -e ${ROOT}/etc/ld.so.conf ]; then if [ "$(md5sum ${ROOT}/etc/ld.so.conf|awk '{print $1}')" == "b18efa8c9f95b6aecc0974c0f54d8bb9" ]; then touch ${ROOT}/etc/ld.so.conf cross_env_update fi else cross_env_update fi fi if [[ "$do_libc" == 1 ]]; then emerge -b cross-${CHOST}/${ELIBC} ${opts} else emerge -b ${opts} fi unset ARCH ACCEPT_KEYWORDS LDFLAGS ROOT CHOST CTARGET CC CXX PKGDIR USE ELIBC } for gnugcc in ${gcc_executables}; do [ -e /usr/bin/${gnugcc} ] || { echo bummer $gnugcc ; continue; } # include=$($gnugcc -print-file-name=) [[ $ctarget_only != "" ]] && [[ ${gnugcc/-gcc/} != $ctarget_only ]] && continue cmerge "${gnugcc/-gcc/}" "$*" done