托管 CFLAGS 用于 GCC 的交叉构建

托管 CFLAGS 用于 GCC 的交叉构建

我想建造摇滚盒来自 MIPS 目标的源。根据他们的维基我需要一个工具链binutils v2.17海湾合作委员会 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)
  • 主机binutils:2.26.1-1ubuntu1~16.04.3
  • 主机gcc:6.2.0-3ubuntu11~14.04
  • GNU 品牌:3.81
  • 自动配置:2.13

奖金:如果我添加--with-arch=<ANYTHING>到构建配置,我会收到与上面类似的错误:

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

相关内容