Criando um Cross Compiler entre Linux e Solaris
Eu trabalho muito com servidores Solaris 10 Sparc e, como qualquer bom servidor, não temos instalados compiladores neles, como minha estação de trabalho é Linux x86_64 e nem sempre tenho uma máquina Sparc com Solaris disponível para instalar um compilador, eu resolvi pesquisar para criar um GCC Cross Compiler entre meu Debian Linux x86_64 e um Solaris 10 Sparc, o que tem funcionado muito bem para os casos que venho necesitado.
A primeira coisa é baixar o códogo fonte do "binutils" e "gcc" eu utilizei o binutils versão 2.21.0.20110216 e o gcc versão 4.4.2.
Os código fonte podem ser encontrados aqui: Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
e aqui: Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
(Para o binutils eu peguei pelo apt-get source binutils)
Configurando o ambiente
export TARGET=sparc-sun-solaris2.10
export PREFIX=/opt/solaris-cross-compiler/
export SYSROOT=$PREFIX/sysroot/
mkdir -p $SYSROOT
export PREFIX=/opt/solaris-cross-compiler/
export SYSROOT=$PREFIX/sysroot/
mkdir -p $SYSROOT
Para que os programas que forem criados utilizem as bibliotecas corretas do solaris, precisamos copiar as bibliotecas do servidor solaris para nossa máquina, os que deve ser feito é o seguinte:
Copiar /usr/include do Solaris para $SYSROOT/usr/include da sua máquina;
Copiar /usr/local/include do Solaris para $SYSROOT/usr/local/include/ da sua máquina;
Copiar /lib do Solaris para $SYSROOT/usr/local/include/ da sua máquina;
Copiar /usr/lib do Solaris para $SYSROOT/usr/lib/ da sua máquina;
Copiar /usr/local/lib do Solaris para $SYSROOT/usr/local/lib/ da sua máquina;
Copiar /usr/local/include do Solaris para $SYSROOT/usr/local/include/ da sua máquina;
Copiar /lib do Solaris para $SYSROOT/usr/local/include/ da sua máquina;
Copiar /usr/lib do Solaris para $SYSROOT/usr/lib/ da sua máquina;
Copiar /usr/local/lib do Solaris para $SYSROOT/usr/local/lib/ da sua máquina;
Copiar /usr/openwin/include do Solaris para $SYSROOT/usr/openwin/include da sua máquina;
Copiar /usr/dt/include do Solaris para $SYSROOT/usr/dt/include da sua máquina;
Copiar /usr/X11/include do Solaris para $SYSROOT/usr/X11/include da sua máquina;
Copiar /usr/openwin/lib do Solaris para $SYSROOT/usr/openwin/lib da sua máquina;
Copiar /usr/dt/lib do Solaris para $SYSROOT/usr/dt/lib da sua máquina;
Copiar /usr/X11/lib do Solaris para $SYSROOT/usr/X11/lib da sua máquina;
Copiar /usr/dt/include do Solaris para $SYSROOT/usr/dt/include da sua máquina;
Copiar /usr/X11/include do Solaris para $SYSROOT/usr/X11/include da sua máquina;
Copiar /usr/openwin/lib do Solaris para $SYSROOT/usr/openwin/lib da sua máquina;
Copiar /usr/dt/lib do Solaris para $SYSROOT/usr/dt/lib da sua máquina;
Copiar /usr/X11/lib do Solaris para $SYSROOT/usr/X11/lib da sua máquina;
mkdir $PREFIX/sources/
cd $PREFIX/sources/
cd $PREFIX/sources/
Baixe os códigos fontes do binutils e gcc para o diretório $PREFIX/sources;
Compilando binutils
$ tar -xvzf binutils-2.21.0.20110216.tar.gz
$ mkdir build-binutils
$ cd build-binutils/
$ ../binutils-2.21.0.20110216/configure -target=$TARGET --prefix=$PREFIX -with-sysroot=$SYSROOT -v
$ make
$ make install
$ mkdir build-binutils
$ cd build-binutils/
$ ../binutils-2.21.0.20110216/configure -target=$TARGET --prefix=$PREFIX -with-sysroot=$SYSROOT -v
$ make
$ make install
Antes de instalar o GCC eu tive que instalar os pacotes libmpfr-dev e libgmp3-dev.
$ tar -xvzf gcc-4.4.2.tar.gz
$ mkdir build-gcc
$ cd build-gcc
$ ../gcc-4.4.2/configure --target=sparc-sun-solaris2.10 --with-gnu-as
--with-gnu-ld --prefix=$PREFIX -with-sysroot=$SYSROOT --disable-libgcj
--enable-languages=c,c++ --enable-threads --with-cpu=ultrasparc
--with-headers=$SYSROOT/usr/include/ --with-libs=$SYSROOT/lib/
--disable-multilib --without-newlib --disable-shared --disable-nls -v
$ make
$ make install
$ mkdir build-gcc
$ cd build-gcc
$ ../gcc-4.4.2/configure --target=sparc-sun-solaris2.10 --with-gnu-as
--with-gnu-ld --prefix=$PREFIX -with-sysroot=$SYSROOT --disable-libgcj
--enable-languages=c,c++ --enable-threads --with-cpu=ultrasparc
--with-headers=$SYSROOT/usr/include/ --with-libs=$SYSROOT/lib/
--disable-multilib --without-newlib --disable-shared --disable-nls -v
$ make
$ make install
Crie um bom e velho helloWorld.c com o conteúdo:
#include < stdio.h>
void main () {
printf ("Hello World!\n");
}
void main () {
printf ("Hello World!\n");
}
$ $PREFIX/bin/sparc-sun-solaris2.10-gcc helloWorld.c -o helloWorld.solaris
$ file helloWorld.solaris
helloWorld.solaris: ELF 32-bit MSB executable, SPARC32PLUS, V8+ Required,
version 1 (SYSV), dynamically linked (uses shared libs), not stripped
helloWorld.solaris: ELF 32-bit MSB executable, SPARC32PLUS, V8+ Required,
version 1 (SYSV), dynamically linked (uses shared libs), not stripped
Se está assim, é só copiar o binário para o Solaris 10 e executar!
Tutorial de André Marques Saunite