Como o shikigami é modesto, eu quero compilar as coisas dele na máquina Linux do trabalho. Depois de dois dias, consegui enfim um cross-compiler capaz de gerar binários para o NetBSD. Agradecimentos ao pessoal da Conectiva (boto, claudio, pcpa), ao do #netbsd no Freenode e ao Google. Tenho que escrever um HOWTO sobre isso qualquer dia, mas para não esquecer, registro o processo:

O “host” fica sendo a máquina Linux e “alvo” a NetBSD.

O primeiro passo é compilar no host o binutils com ‐‐target=arch-unknown-netbsdelf, onde “arch” é a arquitetura (i586 para o shikigami) e “unknown” pode ser qualquer coisa (eu uso “pc”, que é mais curto). Não tenho certeza se este é o nome ideal, eu tirei de um config.guess no NetBSD. Também não sei se é necessário usar a mesma versão do binutils que a instalada no alvo, mas acho mais seguro. O make install do binutils coloca umas ferramentas em /usr/local/arch-unknown-netbsdelf e cópias no /usr/local/bin, estas com nomes transformados.

Em seguida, o compilador. Para usar com distcc, o gcc do host tem que ser um com pelo menos os dois primeiros dígitos de versão iguais aos do gcc do alvo. No meu caso, o NetBSD 2.0 RC5 usa o gcc 3.3.3, então instalei o 3.3.4. Eu sofri um pouco para conseguir compilá-lo, principalmente por não ter lido a documentação de instalação 8)

Como o NetBSD tem uma bibliteca C própria, seus cabeçalhos e objetos são necessários para construir o cross-compiler. Porém, ao contrário do que pensei inicialmente, não é preciso compilar a biblioteca externa para a arquitetura do host (ainda bem!). Bastou descompactar uma cópia do “base.tgz” e uma do “comp.tgz” em um diretório à parte no Linux (usei /opt/netbsd). Configurei os fontes do gcc usando ‐‐with-sysroot=/opt/netbsd e o ‐‐target adeqüado.

Tive ainda um problema menor com um erro do gcc 3.3.x que quebrava a compilação, mas era uma simples função com o tipo errado de retorno na declaração. Já está arrumado no 3.4

Meu momento de glória:

leoboiko [tmp]$ /usr/local/i586-pc-netbsdelf/bin/gcc 
    -o hello hello.c
leoboiko [tmp]$ file hello
    hello: ELF 32-bit LSB executable, Intel 80386, 
    version 1 (SYSV), for NetBSD 2.0, dynamically linked 
    (uses shared libs), not stripped