クロスコンパイル環境作り方 Edit

もっとスマートな方法がありました。ということでボツネタです。
Debian on coLinux上にsh4のクロスビルド環境を構築する。

dpkg-cross Edit

apt-get install dpkg-cross
  • /etc/dpkg/cross-compile
    #default_arch = m68k
    default_arch = sh4
    

toolchain-source Edit

apt-get install toolchain-source
mkidr /home/build
cd /home/build
tpkg-make sh4-linux

binutiles Edit

colinux:/home/build# cd binutils-sh4-linux-2.14.90.0.7
colinux:/home/build/binutils-sh4-linux-2.14.90.0.7# debuild -uc -us
colinux:/home/build/binutils-sh4-linux-2.14.90.0.7# debi

libc Edit

  • tpkg-install-libc.dodes.sh4
    #!/bin/sh
    
    SERVER=${TPKG_SERVER:-"http://debian.dodes.org"} 
    TDIR=${TPKG_DIR:-/tmp/tpkg-install-libc}
    mkdir $TDIR
    
    # $1 is the architecture name
    archname=$1
    
    DEFAULTLIBSET='libdb1-compat$ libc6$ libc6.*-dev$ linux-kernel-headers$'
    
    case $1 in
            alpha-*)
              DEFAULTLIBSET='libdb1-compat$ libc6.[0-9]*$ libc6.[0-9]*-dev$ linux-kernel-headers$'
              debarch=alpha ;;
    
            arm-*|arm)
              debarch=arm ;;
    
            sh4-*|sh4)
    	DEFAULTLIBSET='libgcc1$ libdb1-compat$ libc6$ libc6.*-dev$ linux-kernel-headers$'
              debarch=sh4 ;;
    
            hppa-*|hppa)
              debarch=hppa ;;
    
            i[3456]86|i[3456]86-*|ia32|ia32-*)
              debarch=i386 ;;
    
            ia64-*|ia64)
              DEFAULTLIBSET='libdb1-compat$ libc6.[0-9]*$ libc6.[0-9]*-dev$ linux-kernel-headers$'
              debarch=ia64 ;;
    
            m68k-*|m68k)
              debarch=m68k ;;
    
            mipsel-*|mipsel)
    	  debarch=mipsel ;;
    
            mips-*|mips)
              debarch=mips ;;
    
            ppc-*|powerpc-*|ppc|powerpc)
              debarch=powerpc ;;
    
            sparc-*|sparc)
              debarch=sparc ;;
    
            s390-*|s390)
              debarch=s390 ;;
    
            *)
              echo "Hmph - dunno the $1 arch" >&2
                    exit 2
    esac
    
    # $2 are the (optional) library names
    if [ $# -ge 2 ]; then
        LIBSET=$2
    else
        LIBSET=${LIBSET:-$DEFAULTLIBSET}
    fi
    
    wget $SERVER/debian/dists/sid/main/binary-${debarch}/Packages.gz -O $TDIR/packageset.gz || exit 2
    
    rm -f $TDIR/packageset
    gzip -d $TDIR/packageset.gz || exit 2
    
    DOWNLOADEDDEBS=""
    for PATTERN in $LIBSET
    do
            debfilename=`dpkg-awk -f $TDIR/packageset "Package:"$PATTERN -- "Filename" | sed --silent 's/Filename: \(.*\)$/\1/gp'`
    	for deb in $debfilename
    	do
    	  DEBHERENAME=$TDIR/`basename $deb`
    	  wget $SERVER/debian/${deb} -O $DEBHERENAME || exit 2
    	  DOWNLOADEDDEBS="$DOWNLOADEDDEBS $DEBHERENAME"
    	done
    done
    #dpkg-cross -a ${debarch} -i $DOWNLOADEDDEBS || exit 2
    dpkg-cross-temporary-patched -a ${debarch} -i $DOWNLOADEDDEBS || exit 2
    
./tpkg-install-libc.dodes.sh4

gcc-3.3.4 Edit

toolchain-sourceのgccは3.3.3なので3.3.4に置き換える。
gcc-3.3.4のソースを取ってきて

apt-get source gcc-3.3
cd gcc-3.3-3.3.4
cp gcc-3.3.4.tar.bz2 /usr/src/toolchain
cp debian
cp rules.patch patches
cp -a patches /usr/src/toolchain/patches/gcc-3.3.4
cd /usr/src/toolchain/patches
mv gcc gcc-3.3.3
ln -s gcc-3.3.4 gcc
colinux:/home/build# cd gcc-sh4-linux-3.3.3
colinux:/home/build# perl -pi -e s'/__thread/__thread_param/'  \
/usr/sh4-linux/include/bits/sigthread.h

colinux:/home/build# perl -pi -e s'/__thread/__thread_param/'  \
/usr/sh4-linux/include/pthread.h

/home/build/gcc-sh4-linux-3.3.3# debuild -uc -us
/home/build/gcc-sh4-linux-3.3.3# debi

参考: http://sources.redhat.com/ml/crossgcc/2003-05/msg00171.html


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-06-13 (火) 20:02:27 (6534d)