Scripts de compilação de toolchains para múltiplas arquiteturas

@ 2012-04-17 by João Paulo Pizani Flor

Como alguns já devem saber, eu andei mexendo ultimamente com programação de microcontroladores, mais especificamente com a série de microcontroladores de 8 bits da AVR. E uma “mania” minha é sempre estar com todos meus softwares atualizados, rodando as últimas versões estáveis… Entãa meu primeiro passo antes de começar a programar em C para o AVR era obter uma versão recente da GNU Compiler Collection.

Há um certo tempo atrás eu já tive muitos problemas tentando compilar um toolchain C/C++ para o AVR, mas dessa vez eu reuni toda a minha concentração, paciência e habilidade com shell scripts, o que resultou num buildscript até que bem útil e genérico. Antes de mostrar os detalhes de como ele funciona, porém, eu gostaria de agradecer do fundo do meu coração o pessoal que desenvolve o GCC! Vocês são demais! ☺

Ainda antes de mostrar o código em si, aí vão algumas características dessa “coleção” de scripts, a qual pode ser obtida no GitHub – https://github.com/joaopizani/multiarch-toolchain-buildscripts.

Mas chega de propaganda… vamos ver o código! Primeiro, vou mostrar a parte genérica da coleção. Esse shell script deve ser “chamado” a partir do arquivo com a parte específica:

Apesar do código um pouco complexo, o núcleo de toda a ação no script é o tradicional pipeline: Baixar pacotes - Descompactar - Configurar - Compilar - Instalar. Tudo isso é feito usando um pouco de shell kung-fu como, por exemplo, metaprogramação (usando eval) e arrays. O uso desse script resulta em:

Agora, depois de conhecer a parte genérica, dê uma olhada como parece um arquivo com definições de variáveis. O código abaixo é um “template” que deve ser preenchido com as definições (sobretudo arquitetura-alvo, versões dos pacotes e flags de configuração). É só preencher e rodar…

Sim, eu sei, é um monte de comentários… ☺ Mas eu realmente queria que ficasse óbvio o que está acontecendo em cada linha e qual é o significado de cada variável. E por fim, você não precisa acreditar quando eu digo que funciona: baixe a coleção de scripts do GitHub – http://github.com/joaopizani/multiarch-toolchain-buildscripts e compile um toolchain você mesmo! Para AVR, MIPS, ARM, SPARC ou alguma outra arquitetura bizarra que você quiser… E, por favor, se achar algum problema me avise com um pull request :)