I'm cross compiling AVR GCC to be used on Android with crosstool-ng. I need to compile it with LTO support (-flto
and -fuse-linker-plugin
) thus passing CT_STATIC_TOOLCHAIN=y
, CT_CC_GCC_USE_LTO=y
, CT_CC_GCC_ENABLE_PLUGINS
, CT_CC_SHARED_LIBS
and CT_BINUTILS_PLUGINS=y
in .config
.
That's how it is configured (part of build.log
):
[EXTRA] Configuring final gcc compiler [DEBUG] Extra config passed: '--with-headers=/home/anton/x-tools/HOST-aarch64-linux-gnu/avr/avr/include --with-newlib --enable-threads=no --disable-shared --with-pkgversion=crosstool-NG 1.24.0-rc3.1-f7b1ece --disable-__cxa_atexit --disable-libgomp --disable-libmudflap --disable-libmpx --disable-libssp --disable-libquadmath --disable-libquadmath-support --with-gmp=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools --with-mpfr=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools --with-mpc=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools --enable-lto --with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++ -lm --enable-target-optspace --disable-nls --enable-multiarch' [DEBUG] ==> Executing: CC_FOR_BUILD='x86_64-build_pc-linux-gnu-gcc' CFLAGS='-O2 -g -I/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools/include ' CFLAGS_FOR_BUILD='-O2 -g -I/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools/include ' CXXFLAGS='-O2 -g -I/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools/include ' CXXFLAGS_FOR_BUILD='-O2 -g -I/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools/include ' LDFLAGS='-L/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools/lib -static -lstdc++ -lm' CFLAGS_FOR_TARGET=' -idirafter /home/anton/x-tools/HOST-aarch64-linux-gnu/avr/avr/include' CXXFLAGS_FOR_TARGET=' -idirafter /home/anton/x-tools/HOST-aarch64-linux-gnu/avr/avr/include' LDFLAGS_FOR_TARGET='' '/bin/bash' '/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/src/gcc/configure' '--build=x86_64-build_pc-linux-gnu' '--host=x86_64-build_pc-linux-gnu' '--target=avr' '--prefix=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools' '--with-local-prefix=/home/anton/x-tools/HOST-aarch64-linux-gnu/avr/avr' '--with-headers=/home/anton/x-tools/HOST-aarch64-linux-gnu/avr/avr/include' '--with-newlib' '--enable-threads=no' '--disable-shared' '--with-pkgversion=crosstool-NG 1.24.0-rc3.1-f7b1ece' '--disable-__cxa_atexit' '--disable-libgomp' '--disable-libmudflap' '--disable-libmpx' '--disable-libssp' '--disable-libquadmath' '--disable-libquadmath-support' '--with-gmp=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools' '--with-mpfr=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools' '--with-mpc=/home/anton/esp8266-2/crosstool-NG/installed/bin/.build/HOST-aarch64-linux-gnu/avr/buildtools' '--enable-lto' '--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++ -lm' '--enable-target-optspace' '--disable-nls' '--enable-multiarch' '--enable-languages=c,c++' '--enable-plugin'
It results in the following building error:
> liblto_plugin building gcc with plugin support requires a host that supports -fPIC, -shared, -ldl and -rdynamic.
It seems to have static (not depending on anything) and "with plugins" sounds mutually exclusive. Is it correct?
Is there any way to build it not with lto_plugin shared lib but statically (and still calling with -flto
)?
PS. I can avoid linking it statically, but i'd prefer not having it dynamically linked:
/tmp/avr-gcc.dynamic//avr/bin/avr-gcc: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-, for GNU/Linux 3.7.0, BuildID[sha1]=3a743be83f76347643d78fcdba6e81444b76c3d0, stripped