#!/bin/bash # Copyright 2008-2009 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # - solar cross_wrap_etc() { local chost=$1 cp -a __PREFIX__/share/crossdev/etc /usr/$chost/ (cd /usr/$chost/etc ; ln -s /etc/make.globals make.globals ) conf=/usr/$chost/etc/make.conf case $chost in i?86*) E_MACHINE=EM_X86 ARCH=x86 ;; x86_64*) E_MACHINE=EM_X86_64 ARCH=amd64 ;; arm*) E_MACHINE=EM_ARM ARCH=arm echo 'UCLIBC_CPU_DEFAULT="GENERIC_ARM"' >> ${conf} ;; mips*) E_MACHINE=EM_MIPS ARCH=mips ;; sh*) E_MACHINE=EM_SH ARCH=sh ;; *) echo "!!! WARNING - Cannot auto-configure CHOST ${chost}" echo "!!! You should edit ${conf}" echo "!!! by hand to complete your configuration" E_MACHINE="__E_MACHINE__" ARCH="__ARCH__" ;; esac [[ ${chost/gnu/} != $chost ]] && sed -i -e s/__LIBC__/glibc/g ${conf} [[ ${chost/uclibc/} != $chost ]] && sed -i -e s/__LIBC__/glibc/g ${conf} [[ $E_MACHINE != "" ]] && sed -i -e s/'#E_MACHINE=__E_MACHINE__'/E_MACHINE=${E_MACHINE}/g ${conf} [[ $ARCH != "" ]] && sed -i -e s/__ARCH__/${ARCH}/g ${conf} sed -i -e s/__CHOST__/${chost}/g -e s/__CBUILD__/${CBUILD}/g ${conf} echo MAKEOPTS=-j$(cat /proc/cpuinfo | grep processor| wc -l) >> ${conf} [[ ${portdir} != "" ]] && echo PORTDIR=\"${portdir}\" >> ${conf} [[ ${distdir} != "" ]] && echo DISTDIR=\"${distdir}\" >> ${conf} [[ ${overlay} != "" ]] && echo PORTDIR_OVERLAY=\"${overlay}\" >> ${conf} [[ -e /etc/make.conf ]] && grep ^GENTOO_MIRRORS= /etc/make.conf >> ${conf} } cross_init() { bn=$(basename $0) [[ $bn != emerge-wrapper ]] && { echo "I wont understand things" ; exit 1; } dn=$(dirname $(readlink -f $0)) chosts=`ls -1 /usr/lib/gcc` cd $dn || { echo "Failed to cd to $dn" ; exit 1; } export overlay=$(portageq envvar PORTDIR_OVERLAY) export portdir=$(portageq envvar PORTDIR) export distdir=$(portageq envvar DISTDIR) for chost in $chosts; do [[ $chost == $CBUILD ]] && continue [[ $(type -p ${chost}-gcc) == "" ]] && continue echo " * Setting up symlinks for $chost" ln -sf emerge-wrapper emerge-${chost} ln -sf emerge-wrapper ${chost}-emerge ln -sf cross-pkg-config ${chost}-pkg-config if [ -d /usr/${chost} ] ; then if [[ ! -d /usr/${chost}/etc/ ]]; then echo " * Setting up cross basics in /usr/${chost}/etc" cross_wrap_etc $chost fi fi done } # CBUILD must be the first thing we export export CBUILD=$(portageq envvar CBUILD) if [[ $1 == "--init" ]]; then cross_init exit 0 fi CHOST=$(basename $0) CHOST=${CHOST/-emerge} CHOST=${CHOST/emerge-} export CHOST if [[ $CHOST == wrapper ]]; then if [[ $1 == "--target" ]]; then export CHOST=$2 shift 2 else echo "After running this program with the --init option as root" echo "you can call it directly like emerge-wrapper --target CHOST " echo "or using the emerge-CHOST wrappers" exit 1 fi fi [[ $(type -p ${CHOST}-gcc) == "" ]] && { echo "You need to 'crossdev $CHOST' first" ; exit 1; } cross-emerge "$@"