Host CFLAGS для перекрестной сборки GCC

Я хочу построить Rockbox из источника для целей MIPS. Согласно их вики мне нужна цепочка инструментов с binutils v2.17 и GCC v4.1.2 для мипселе mipsel-elf цели с CFLAGS="-U_FORTIFY_SOURCE -fgnu89-inline" . Вот строка конфигурации для обоих:

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

Мне удалось собрать и установить binutils, но GCC не работает как с «автоматической сборкой», так и с ручным методом, потому что (также см. Полный журнал регистрации ):

 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 

Насколько я могу судить, проблема заключается в том, что CFLAGS предназначенные для компилятора хоста, передаются в «минимальный» xgcc , который не знает или не требует этого флага. Создание без -fgnu89-inline не выполняется, потому что GCC 4.1.2 полагается на встроенную семантику функции C89.

Вопрос: Как настроить сборку так, чтобы -fgnu89-inline передавался компилятору хоста, но не минимальному компилятору во время второго этапа?

Я заметил, что сборка выполнена успешно, если я заменил -fgnu89-inline -std=gnu89 но я не чувствую, что это правильно. Кросс-компиляция для встроенных устройств достаточно сложная, и я предпочел бы не вводить другой возможный источник ошибок.

Системная информация:

  • ОС: Ubuntu 14.04 (x86_64)
  • Host binutils: 2.26.1-1ubuntu1 ~ 16.04.3
  • Хост gcc: 6.2.0-3ubuntu11 ~ 14.04
  • GNU Make: 3.81
  • Autoconf: 2.13

Бонус: если я добавлю --with-arch=<ANYTHING> в конфигурацию сборки, я получаю аналогичную ошибку, как указано выше:

 cc1: error: unrecognized command line option "-march=native" cc1: error: unrecognized command line option "-fgnu89-inline" 

Interesting Posts

scp между двумя серверами с разными файлами pem

Создание логического тома с использованием не LVM-раздела

Не удалось подключить шлюзы и другие Linux-боксы в одной сети

Использование команды apropos с -a для поиска нескольких ключевых слов в CentOS 7

Игнорировать изменения файла

От имени устройства df до имени физического диска (поставщика / типа)

Как активировать модуль записи Xorg на Raspbian?

Как диски NTFS обрабатываются Linux? В fstab ничего нет, но он автоматизирован. Ничего в mtab пока не установлено

Как выбрать случайный элемент из вывода команды?

Можно ли игнорировать сигнал (потерять)?

Как этот скрипт начинается без его зависимости?

Многомесячный просмотр в календаре (cal) в OS X

Информация о приложении 1630 / master

Выберите содержимое, соответствующее определенному контенту из файла, и переместите его в выходной файл

Когда подходящее время для запуска Redshift с помощью выскочки?

Linux и Unix - лучшая ОС в мире.