mslomp
(usa Slackware)
Enviado em 18/04/2010 - 13:59h
embora não pareça, seu caso é relativamente simples, visto que é um caso build == host =/= target, o que na maioria dos casos elimina
a necessidade de uma toolchain específica para o alvo.
então a primeira coisa a se fazer é compilar o binutils para o alvo mips, observando nesse caso se a máquina-alvo (mesmo que fictícia)
será big-endian - o padrão mips - ou little-endian. assumindo seu uso em uma máquina intel, usaremos little-endian.
passo a passo:
1 - crie um diretório de trabalho e dentro dele um para os fontes e outro para compilação.
por exemplo: /home/usuario/mips-cross/{build,source}
$ mkdir ~/mips-cross/{build,source}
$ cd ~/mips-cross
1 - baixar o fonte do binutils e extraí-lo em source:
$ cd source
$ wget
ftp://ftp.gnu.org/gnu/binutils/binutils-2.20.1.tar.bz2
$ tar jxvf binutils-2.20.1.tar.bz2
2 - acessar o diretório build e efetuar a compilação:
$ cd ../build
$ ../source/binutils-2.20.1/configure --prefix=/usr --target=mipsel
$ make LDFLAGS="-s"
# make install
observe que utilizei /usr como raiz para instalação. não há perigo de sobrescrever o binutils nativo,
visto que por padrão, os binários são produzidos com o nome canônico da máquina alvo como prefixo: mipsel-ar, mipsel-as, etc.
caso não deseje esse prefixo, use a flag --program-prefix="", mas nesse caso você deve evitar instalar em /usr, sob pena de
sobrescrever os binários nativos.
3 - baixar os fontes do gcc e preparar a compilação:
vamos utilizar a última versão estável da série 4.4, visto que você pode ter problemas com a libssp da nova versão 4.5.0,
além de evitar a lib mpc.
$ cd ../source
$ wget
ftp://ftp.gnu.org/gnu/gcc/gcc-4.4.3/gcc-core-4.4.3.tar.bz2 (apenas C)
agora, baixar as libs mandatórias (mpfr e gmp)
$ wget
http://www.mpfr.org/mpfr-current/mpfr-2.4.2.tar.bz2
$ wget
ftp://ftp.gmplib.org/pub/gmp-4.3.2/gmp-4.3.2.tar.bz2
extrair tudo:
$ tar jxvf gcc-core-4.4.3.tar.bz2
$ tar jxvf mpfr-2.4.2.tar.bz2
$ tar jxvf gmp-4.3.2.tar.bz2
copiar mpfr e gmp para dentro dos fontes do gcc - remover número de versão:
$ mv mpfr-2.4.2 gcc-4.4.3/mpfr
$ mv gmp-4.3.2 gcc-4.4.3/gmp
sim, teoricamente você pode utilizar essas libs se pré-instaladas no sistema, porém costumam dar dor de cabeça.
além disso, esse procedimento fará o gcc compilar a própria versão dessas libs tornando-o inclusive mais intercambiável
entre diferentes máquinas - ideal para distribuição.
4 - compilar o gcc:
para simplificar e agilizar, vou evitar aqui muitas flags. elas não são cruciais para esse caso.
mas, caso queira um resultado fine-tunned, podemos entrar nesse mérito após uma compilação com sucesso.
$ cd ../build
$ rm -rf * (apagar os restos da compilação do binutils e 'zerar' o diretório)
$ ../source/gcc-4.4.3/configure --prefix=/usr --target=mipsel --disable-multilib
$ make LDFLAGS="-s"
# make install
em resumo resumido é isso aí. fiz um teste rápido aqui utilizando o fonte 4.6.0 (devel) e foi tranquilo, então creio que
não haverá maiores problemas com a versão estável.