GCC8: fails to build when configured --with-cpu=xscale
Richard Earnshaw
Richard.Earnshaw@foss.arm.com
Sun May 27 13:29:00 GMT 2018
On 27/05/18 06:01, Alexey Neyman wrote:
> Hi,
>
> I am seeing the following failure when building a crosstool-NG
> configuration which configures GCC for XScale CPU. The warning is:
>
> cc1: warning: switch -mcpu=xscale conflicts with -march=armv5te switch
>
> But during the build of libatomic, -Werror is thrown in, so the warning
> becomes an error.
>
> GCC is configured with:
>
> CC_FOR_BUILD='x86_64-build_pc-linux-gnu-gcc' CFLAGS='-O2 -g -pipe
> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools/include
> ' CFLAGS_FOR_BUILD='-O2 -g -pipe
> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools/include
> ' CXXFLAGS='-O2 -g -pipe
> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools/include
> ' CXXFLAGS_FOR_BUILD='-O2 -g -pipe
> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools/include
> '
> LDFLAGS='-L/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools/lib
> -lstdc++ -lm' CFLAGS_FOR_TARGET='' CXXFLAGS_FOR_TARGET=''
> LDFLAGS_FOR_TARGET='' '/bin/bash'
> '/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/src/gcc/configure'
> '--build=x86_64-build_pc-linux-gnu' '--host=x86_64-build_pc-linux-gnu'
> '--target=armeb-unknown-linux-uclibcgnueabi'
> '--prefix=/home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi'
> '--with-sysroot=/home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi/armeb-unknown-linux-uclibcgnueabi/sysroot'
> '--enable-languages=c,c++' '--with-cpu=xscale' '--with-float=soft'
> '--with-pkgversion=crosstool-NG 1.23.0-392-gd274ab06-dirty'
> '--disable-sjlj-exceptions' '--enable-__cxa_atexit'
> '--disable-libmudflap' '--disable-libgomp' '--disable-libssp'
> '--disable-libquadmath' '--disable-libquadmath-support'
> '--disable-libsanitizer' '--disable-libmpx'
> '--with-gmp=/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools'
> '--with-mpfr=/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools'
> '--with-mpc=/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools'
> '--with-isl=/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/buildtools'
> '--enable-lto' '--with-host-libstdcxx=-static-libgcc
> -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' '--enable-threads=posix'
> '--enable-target-optspace' '--enable-plugin' '--enable-gold'
> '--disable-nls' '--disable-multilib'
> '--with-local-prefix=/home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi/armeb-unknown-linux-uclibcgnueabi/sysroot'
> '--enable-long-long'
>
> Failing command is:
>
> [ALLÂ ]Â Â Â libtool: compile:
> /home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/build/build-cc-gcc-final/./gcc/xgcc
> -B/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/build/build-cc-gcc-final/./gcc/
> -B/home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi/armeb-unknown-linux-uclibcgnueabi/bin/
> -B/home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi/armeb-unknown-linux-uclibcgnueabi/lib/
> -isystem
> /home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi/armeb-unknown-linux-uclibcgnueabi/include
> -isystem
> /home/avn/x-tools/armeb-unknown-linux-uclibcgnueabi/armeb-unknown-linux-uclibcgnueabi/sys-include
> -DHAVE_CONFIG_H
> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/src/gcc/libatomic/config/arm
> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/src/gcc/libatomic/config/linux/arm
> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/src/gcc/libatomic/config/posix
> -I/home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/src/gcc/libatomic
> -I. -Wall -Werror -pthread -g -O2 -g -Os -MT init.lo -MD -MP -MF
> .deps/init.Tpo -c
> /home/avn/work/ctng/crosstool-ng/.build/armeb-unknown-linux-uclibcgnueabi/src/gcc/libatomic/config/linux/arm/init.c
> -fPIC -DPIC -o .libs/init.o
>
> The problem, as far as I can see, is that the driver executes cc1 with
> the flags defined in
>
> #define OPTION_DEFAULT_SPECS \
> Â {"arch", "%{!march=*:%{!mcpu=*:-march=%(VALUE)}}" }, \
> Â {"cpu", "%{!march=*:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \
> Â {"tune", "%{!mcpu=*:%{!mtune=*:-mtune=%(VALUE)}}" }, \
> Â {"float", "%{!mfloat-abi=*:-mfloat-abi=%(VALUE)}" }, \
> Â {"fpu", "%{!mfpu=*:-mfpu=%(VALUE)}"}, \
> Â {"abi", "%{!mabi=*:-mabi=%(VALUE)}"}, \
> Â {"mode", "%{!marm:%{!mthumb:-m%(VALUE)}}"}, \
> Â {"tls", "%{!mtls-dialect=*:-mtls-dialect=%(VALUE)}"},
>
> Which evaluates to:
>
> -mcpu=xscale -mfloat-abi=soft -mtls-dialect=gnu -marm -march=armv5te
>
> added to the arguments from the command line (as you may see, there were
> no -march= or -mcpu= in the original command).
>
> Then, cc1 discovers that -mcpu=xscale and -march=armv5te are not exactly
> compatible:
>
> (gdb) p arm_selected_cpu->common.isa_bits
> $17 = {isa_bit_armv3m, isa_bit_mode32, isa_bit_notm, isa_bit_xscale,
> isa_bit_armv4, isa_bit_armv5e, isa_bit_armv5, isa_bit_thumb, isa_nobit
> <repeats 36 times>}
> (gdb) p arm_selected_arch->common.isa_bits
> $18 = {isa_bit_armv3m, isa_bit_mode32, isa_bit_notm, isa_bit_armv4,
> isa_bit_armv5e, isa_bit_armv5, isa_bit_thumb, isa_nobit <repeats 37 times>}
>
> Because they differ in the presence of isa_bit_xscale (and that bit is
> not listed as a quirk that's ignored during comparison), cc1 complains.
>
> What should be the fix for this?
>
> Regards,
> Alexey.
>
The problem is almost certainly that your build system is somehow
passing an explicit -mcpu=xscale during the build. You need to find out
where it is coming from and remove it (the configured default from
--with-cpu is never used when -march or -mcpu are explicitly on the
command line as it will be when that library is being built.
This rule:
#define OPTION_DEFAULT_SPECS \
{"arch", "%{!march=*:%{!mcpu=*:-march=%(VALUE)}}" }, \
{"cpu", "%{!march=*:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \
{"tune", "%{!mcpu=*:%{!mtune=*:-mtune=%(VALUE)}}" }, \
{"float", "%{!mfloat-abi=*:-mfloat-abi=%(VALUE)}" }, \
{"fpu", "%{!mfpu=*:-mfpu=%(VALUE)}"}, \
{"abi", "%{!mabi=*:-mabi=%(VALUE)}"}, \
{"mode", "%{!marm:%{!mthumb:-m%(VALUE)}}"}, \
{"tls", "%{!mtls-dialect=*:-mtls-dialect=%(VALUE)}"},
sets up the internal defaults. Note the first two lines both check that
neither -march nor -mcpu are being passed explicitly before dropping in
the builtin value.
R.
More information about the Gcc-help
mailing list