Une fois le paquetage binutils-m68k-cross installé, nous allons nous atteler à la création d'un compilateur croisé m68k.
Avant de générer et d'installer le compilateur, nous allons installer les bibliothèques nécessaires au développement. Pour cela, l'outil "apt-cross" permet d'aller chercher les paquetages choisis dans l'architecture voulu (m68k dans notre cas) ainsi que toutes les dépendances, et de l'installer sur notre système (i386).
sudo apt-get install apt-cross
Ubuntu ne fournissant pas de paquetage m68k, nous allons devoir aller les chercher dans la distribution debian, pour cela, nous modifions temporairement notre fichier /etc/apt/sources.list:
deb http://ftp.fr.debian.org/debian/ etch-m68k main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ etch-m68k main contrib non-free
et nous téléchargeons la clé signant les paquetages Debian:
gpg --recv-key --keyserver wwwkeys.eu.pgp.net 9AA38DCD55BE302B
gpg --export --armor 9AA38DCD55BE302B|sudo apt-key add -
Ensuite nous pouvons "cross-installer" les paquetages m68k:
apt-cross -a m68k --suite etch-m68k -u
apt-cross -a m68k --suite etch-m68k -i libc6 libc6-dev linux-kernel-headers
apt-cross -a m68k --suite etch-m68k -i libmudflap0-dev libmudflap0
apt-cross -a m68k --suite etch-m68k -i gcc-4.1-base
ATTENTION: Il faut ensuite enlever de notre /apt/sources.list les lignes que nous avons rajouter car elles perturbent le fonctionnement normal du apt-get natif.
Nous pouvons maintenant compiler un gcc croisé.
Nous tirons tout d'abord les dépendances nécessaires à la recompilation:
sudo apt-get build-dep gcc-4.1
Comme pour binutils, nous prenons la version de gcc livré par etch-m68k et non celle livrée par ubuntu karmic:
sudo apt-get install expect-tcl8.3
wget ftp://ftp.fr.debian.org/debian/pool/main/g/gcc-4.1/gcc-4.1_4.1.1ds2-21.dsc
wget ftp://ftp.fr.debian.org/debian/pool/main/g/gcc-4.1/gcc-4.1_4.1.1ds2-21.diff.gz
wget ftp://ftp.fr.debian.org/debian/pool/main/g/gcc-4.1/gcc-4.1_4.1.1ds2.orig.tar.gz
dpkg-source -x gcc-4.1_4.1.1ds2-21.dsc
cd gcc-4.1-4.1.1ds2/
Il faut ensuite faire quelques modifications dans les scripts Debian, les quelques commandes suivantes le font de manière automatique :
sed -i "s/PV-base/PV-base-m68k-cross/" debian/control.m4
for name in svn-doc-updates \
rename-info-files \
libjava-doc-backport \
libjava-backport3 \
libjava-subdir \
libjava-lib32-properties \
pr25524-doc \
pr26885-doc \
classpath-tooldoc
do
sed -i "s/$name//" debian/rules.patch
done
sed -i "/dh_shlibdeps/s/^.*(\([^)]*\)).*$/\techo \"shlibs:Depends=libc6 \(>= 2.3.6\)\" > debian\/\$(\1).substvars/p" debian/rules.d/binary-libstdcxx-cross.mk
sed -i "/dh_shlibdeps/s/^.*(\([^)]*\)).*$/\techo \"shlibs:Depends=libc6 \(>= 2.3.6\)\" > debian\/\$(\1).substvars/p" debian/rules.d/binary-libgcc-cross.mk
On peut démarrer la compilation en ayant pris soin d'indiquer l'architecture cible:
echo "m68k" > debian/target
dpkg-buildpackage -rfakeroot
Ensuite, il suffit de remonter dans le répertoire père et d'installer les paquetages générés:
cd ..
sudo dpkg -i cpp-4.1-m68k-linux-gnu_4.1.1-21_i386.deb \
g++-4.1-m68k-linux-gnu_4.1.1-21_i386.deb \
libgcc2-m68k-cross_4.1.1-21_all.deb \
libstdc++6-4.1-dev-m68k-cross_4.1.1-21_all.deb \
libstdc++6-m68k-cross_4.1.1-21_all.deb \
gcc-4.1-m68k-linux-gnu_4.1.1-21_i386.deb