Esse é um breve tutorial de como instalar o compilador GCC e configurá-lo para permitir compilação cruzada (cross-compiling) a fim de gerar códigos assembly para processadores de arquitetura ARM-V8 e Intel IA-64 em sistemas operacionais baseados em Linux.
Durante o processo de desenvolvimento de software para sistemas embarcados é comum ter que gerar arquivos binários para processadores com arquitetura diferente da que geralmente é utilizada no ambiente de desenvolvimento. Produzir um arquivo binário para um processador e executá-lo em outro com arquitetura diferente pode gerar problemas de desempenho ocasionados pela má otimização do código ou a não execução do mesmo, pois diferentes CPUs têm diferentes capacidades, suportam diferentes conjuntos de instruções e têm maneiras diferentes de execução de código.
O presente tutorial garante funcionamento para sistemas que possuem configurações semelhantes ou que tenham a mesma versão do Ubuntu, e foi produzido utilizando as seguintes configurações:
Distro: Linux Mint 19.3 Tricia
Base: Ubuntu 18.04
Kernel: 5.4.0-42-generic x86_64
Processador: Intel Core i3-4005U
Os passos a seguir definem a ordem de comandos que devem ser executados para replicarem os resultados obtidos em cada arquitetura.
sudo apt install libc6-dev-armhf-cross
sudo apt install gcc-8-arm-linux-gnueabihf
sudo apt install libc6-dev-arm64-cross
sudo apt install gcc-8-aarch64-linux-gnu
sudo apt install libc6-dev gcc-8
Os passos a seguir fazem uso do utilitário GNU make verifique se tem ele instalado em seu sitema executando o seguinte código em seu terminal:
make --version
Caso não tenha o GNU maker utilize o seguite comando:
sudo apt install make makedev
Para instalar todos compiladores de uma unica vez.
sudo make full-install
Nota:
Ao utilizar o comando anterior será necessário confirmar a intenção de instalação por 3 vezes, sendo uma para cada compilador.
Instalar somente o gcc-8 utilize:
sudo make install-intel-compiler
Instalar o GCC para arm32 utilize:
sudo make install-arm32-cross-compiler
Instalar o GCC para arm64 utilize:
sudo make install-arm64-cross-compiler
Após ter instalado todos os compiladores é possível gerar código assembly de todos exemplos desse repositório utilizando o seguinte comando:
make generate-all-assembly-code
Também é possivel gerar apenas para uma única arquitetura por vez.
make generete-assembly-arm32
make generate-assembly-arm64
make generate-assembly-intel
Lembando que o compilador deverá está instalado, caso contário dará erro.
Os pacotes "libc-6-dev", "libc6-dev-armhf-cross" e "libc6-dev-arm64-cross" comtêm os links simbóĺicos, cabeçalhos, e arquivos objeto nécessarios para compilar e vincular programas que usam a biblioteca C padrão. Sem elas não é possível gerar arquivos executáveis, e por isso, os seguintes comandos do Makefile apresentarão erros se executados, caso elas não tenham sido instaladas:
- make compile-arm32
- make compile-arm64
- make compile-intel