Собрал своими силами toolchain для кросс-компиляции под Cortex-A7 (armv7-a). Думаю собрать собственную сборку дистрибьютива под Cubietruck, который использует hard fpu (аппаратную обработку операций с плавающей точкой).
Первая и вторая стадии компиляции gcc проходят без ошибок, аналогично собирается glibc с помощью gcc первой стадии.
Компиляторам на этапе сборки передаются явно параметры:
--with-arch=armv7-a --with-tune=cortex-a7 --with-float=hard --with-abi=aapcs-linux --with-fpu=neon-vfpv4 --with-mode=thumb"
CFLAGS="-march=armv7-a -mtune=cortex-a7 -mfloat-abi=hard -mabi=aapcs-linux -mfpu=neon-vfpv4 -mthumb -O2 -Wa,-mthumb -Wa,-mimplicit-it=thumb"
In file included from /opt/cross/tools/arm-cortexa7hf-linux-gnueabi/include/features.h:389:0,
from /opt/cross/tools/arm-cortexa7hf-linux-gnueabi/include/stdio.h:27,
from ./gmp-6.0.0/gen-fac.c:31:
/opt/cross/tools/arm-cortexa7hf-linux-gnueabi/include/gnu/stubs.h:7:29: fatal error: gnu/stubs-soft.h: No such file or directory
compilation terminated.
In file included from /opt/cross/tools/arm-cortexa7hf-linux-gnueabi/include/features.h:389:0,
from /opt/cross/tools/arm-cortexa7hf-linux-gnueabi/include/stdio.h:27,
from ./gmp-6.0.0/gen-fib.c:31:
/opt/cross/tools/arm-cortexa7hf-linux-gnueabi/include/gnu/stubs.h:7:29: fatal error: gnu/stubs-soft.h: No such file or directory
make: *** [gen-fac] Error 1
make: *** Waiting for unfinished jobs....
compilation terminated.
In file included from /opt/cross/tools/arm-cortexa7hf-linux-gnueabi/include/features.h:389:0,
from /opt/cross/tools/arm-cortexa7hf-linux-gnueabi/include/assert.h:35,
from ./gmp-6.0.0/mini-gmp/mini-gmp.c:44,
from ./gmp-6.0.0/bootstrap.c:32,
from ./gmp-6.0.0/gen-bases.c:32:
/opt/cross/tools/arm-cortexa7hf-linux-gnueabi/include/gnu/stubs.h:7:29: fatal error: gnu/stubs-soft.h: No such file or directory
compilation terminated.
make: *** [gen-fib] Error 1
make: *** [gen-bases] Error 1
In file included from /opt/cross/tools/arm-cortexa7hf-linux-gnueabi/include/features.h:389:0,
from /opt/cross/tools/arm-cortexa7hf-linux-gnueabi/include/stdlib.h:24,
from ./gmp-6.0.0/gen-trialdivtab.c:48:
/opt/cross/tools/arm-cortexa7hf-linux-gnueabi/include/gnu/stubs.h:7:29: fatal error: gnu/stubs-soft.h: No such file or directory
compilation terminated.
make: *** [gen-trialdivtab] Error 1
Ранее, экспериментировав с различными параметрами, обнаружил следующее:
- Без указания float-abi=hard генерируется как раз таки soft float point.
- Явно генерируется thumb1, а не thumb2, хотя ассеблеру я передаю -mimplicit-it=thumb, что по различной документации требуется для генерации именно thumb2.
Что идет не так? Подскажите, кто знает, как генерировать правильно код thumb2.
Я делаю что-то не так или gcc об этом не знает.
По определению armv7-a и cortex-a7 - это обязательно thumb2 и возможность использования hard float point.