Host CFLAGS para cross-build do GCC

1

Eu quero criar o Rockbox da fonte para os alvos do MIPS. De acordo com o wiki , preciso de uma cadeia de ferramentas com binutils v2.17 e GCC v4. 1.2 para o destino mipsel-elf com CFLAGS="-U_FORTIFY_SOURCE -fgnu89-inline" . Aqui está a linha de configuração para ambos:

CFLAGS='-U_FORTIFY_SOURCE -fgnu89-inline' ./configure --target=mipsel-elf --enable-languages=c --disable-libssp --disable-docs

Consegui criar e instalar binutils, mas o GCC falha com a "construção automática" e o método manual porque (consulte também o log de criação completa ):

make[4]: Entering directory '/home/malte/Software/devel/linux-dev/ubuntu/gcc/gcc-4.1.2/host-x86_64-unknown-linux-gnu/gcc'
/home/malte/Software/devel/linux-dev/ubuntu/gcc/gcc-4.1.2/host-x86_64-unknown-linux-gnu/gcc/xgcc -B/home/malte/Software/devel/linux-dev/ubuntu/gcc/gcc-4.1.2/host-x86_64-unknown-linux-gnu/gcc/ -B/usr/local/mipsel-elf/bin/ -B/usr/local/mipsel-elf/lib/ -isystem /usr/local/mipsel-elf/include -isystem /usr/local/mipsel-elf/sys-include -O2 -O2 -U_FORTIFY_SOURCE -fgnu89-inline  -DIN_GCC -DCROSS_COMPILE   -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include  -I. -I. -I../.././gcc -I../.././gcc/. -I../.././gcc/../include -I../.././gcc/../libcpp/include   -g0 -finhibit-size-directive -fno-inline-functions -fno-exceptions -fno-zero-initialized-in-bss -fno-unit-at-a-time -Dinhibit_libc -G 0 \
      -c ../.././gcc/crtstuff.c -DCRT_BEGIN \
      -o crtbegin.o
cc1: error: unrecognized command line option "-fgnu89-inline"
make[4]: *** [crtbegin.o] Error 1

Tanto quanto eu posso dizer o problema é que CFLAGS significou para o compilador de host são passados para o "mínimo" xgcc que não sabe ou requer este sinalizador. O edifício sem -fgnu89-inline falha porque o GCC 4.1.2 se baseia na semântica inline da função C89.

Pergunta: Como posso configurar a compilação para que -fgnu89-inline seja passado para o compilador do host, mas não para o compilador mínimo durante a segunda fase?

Percebi que a compilação é bem-sucedida se eu substituir -fgnu89-inline por -std=gnu89 , mas não sinto que esteja correto. A compilação cruzada para dispositivos incorporados é bastante complicada e prefiro não introduzir outra fonte possível de erros.

Informações do sistema:

  • SO: Ubuntu 14.04 (x86_64)
  • Host binutils: 2.26.1-1ubuntu1 ~ 16.04.3
  • Host gcc: 6.2.0-3ubuntu11 ~ 14.04
  • GNU Make: 3,81
  • Autoconf: 2,13

Bônus: Se eu adicionar --with-arch=<ANYTHING> à configuração da compilação, recebo um erro semelhante ao acima:

cc1: error: unrecognized command line option "-march=native"
cc1: error: unrecognized command line option "-fgnu89-inline"
    
por David Foerster 29.03.2017 / 13:00

0 respostas