LINUX.ORG.RU

Куда при сборке gcc с сорсов написать -mfloat-abi=hard ?

 , , ,


0

2

Добрый день,

и, позвольте, пожалуйста, представиться, я убежденный линуксоид с еще с начала 90-х - в основном десктопный, но и немного ембеддед, в основном - пользователь, но иногда, если сильно жизнь заставит, ядро компилю, правда с большой опаской, чтобы не накосячить.

У меня возник вопрос, который не могу решить сам уже больше недели, помогите, пожалуйста, советом.

Есть ембеддед линукс, вернее его вариант на DE10-Nano или DE0-Nano-SoC на нем стоит:

Linux de10-nano 4.1.33-ltsi-altera #1 SMP Thu Mar 30 10:37:56 PDT 2017 armv7l GNU/Linux

с очень стародавним репозитарием на http://feeds.angstrom-distribution.org/feeds/v2016.12/

в котором нет lapack/blas, и есть желание собрать gcc, по возможности новее (или какой получится) с исходников, но чтоб там точно был gfortran и не менее С++14.

Пробовал gcc-10.2, gcc-9-3, gcc-linaro-7.5 собирать там, и кросскомпиллить на 20.04 убунте. Во всех случаях после пары часов сборки возникает ошибка:

/mnt/data/1/gcc-l1/./gcc/xgcc -B/mnt/data/1/gcc-l1/./gcc/ -B/usr/local/armv7l-unknown-linux-gnueabihf/bin/ -B/usr/local/armv7l-unknown-linux-gnueabihf/lib/ -isystem /usr/local/armv7l-unknown-linux-gnueabihf/include -isystem /usr/local/armv7l-unknown-linux-gnueabihf/sys-include -g -O2 -O2 -g -O2 -DIN_GCC -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wno-format -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -fPIC -fno-inline -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector -fPIC -fno-inline -I. -I. -I../.././gcc -I../../../gcc-linaro-snapshot-7.5-2019.11/libgcc -I../../../gcc-linaro-snapshot-7.5-2019.11/libgcc/. -I../../../gcc-linaro-snapshot-7.5-2019.11/libgcc/../gcc -I../../../gcc-linaro-snapshot-7.5-2019.11/libgcc/../include -DHAVE_CC_TLS -o _negdi2.o -MT _negdi2.o -MD -MP -MF _negdi2.dep -DL_negdi2 -c ../../../gcc-linaro-snapshot-7.5-2019.11/libgcc/libgcc2.c -fvisibility=hidden -DHIDE_EXPORTS In file included from /usr/include/features.h:392:0, from /usr/include/stdio.h:27, from ../../../gcc-linaro-snapshot-7.5-2019.11/libgcc/../gcc/tsystem.h:87, from ../../../gcc-linaro-snapshot-7.5-2019.11/libgcc/libgcc2.c:27: /usr/include/gnu/stubs.h:7:11: fatal error: gnu/stubs-soft.h: No such file or directory

include <gnu/stubs-soft.h>

       ^~~~~~~~~~~~~~~~~~

compilation terminated. make[3]: *** [Makefile:491: _muldi3.o] Error 1 make[3]: *** Waiting for unfinished jobs…. In file included from /usr/include/features.h:392:0, from /usr/include/stdio.h:27, from ../../../gcc-linaro-snapshot-7.5-2019.11/libgcc/../gcc/tsystem.h:87, from ../../../gcc-linaro-snapshot-7.5-2019.11/libgcc/libgcc2.c:27: /usr/include/gnu/stubs.h:7:11: fatal error: gnu/stubs-soft.h: No such file or directory

include <gnu/stubs-soft.h>

       ^~~~~~~~~~~~~~~~~~

compilation terminated. make[3]: *** [Makefile:491: _negdi2.o] Error 1 make[3]: Leaving directory ‘/mnt/data/1/gcc-l1/armv7l-unknown-linux-gnueabihf/libgcc’ make[2]: *** [Makefile:18001: all-stage1-target-libgcc] Error 2 make[2]: Leaving directory ‘/mnt/data/1/gcc-l1’ make[1]: *** [Makefile:22758: stage1-bubble] Error 2 make[1]: Leaving directory ‘/mnt/data/1/gcc-l1’ make: *** [Makefile:932: all] Error 2

Гугление на эту ошибку приводит к тому, что надо установить -mfloat-abi=hard во время компиляции.

Я пробовал собирать с такими флагами:

make BOOT_CFLAGS=‘-mfloat-abi=hard -O2’ -j 2

дополнительно засовывал в Makefile в каждый вызов компилера ‘-mfloat-abi=hard’ но падать не перестает.

В репозитарии прикомпилленого gfortran нет, в linaro подходящего уже собраннного gcc, который содержит хотя бы c,c++,fortran - тоже нет.

Пожалуйста, посоветуйте, что я делаю не так и куда правильно надо поместить эту опцию, чтобы избавитться от ошибки компилляции gcc c сорсов?

Спасибо!

Предлагаю тулчейн собирать через https://crosstool-ng.github.io/, gfortran там можно выбрать в конфигураторе, hardfloat-softfloat тоже можно выбирать. Это делается через ct-ng menuconfig

А на линаровские сборки забить.

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от SZT

Спасибо большое, за ответ!!!

как-то я с кросскомпилляцией - запутался.

Я хочу собрать gcc-10.2 на 64-битной бубунте, но мне надо, чтобы полученный компилятор запустился на ARM.

То есть target я поставлю, тут все понятно, но ведь мне как-то надо сказать, чтобы сам компилятор был для ARM, и генерил для ARM.

Наверное, я не все понял с настройками crosstool-ng.

Спасибо!

igorchem
() автор топика
Ответ на: комментарий от SZT

Спасибо за информацию!

То есть я вначале должен создать cross-compiler, а потом с его помощью собрать cross-native? Или есть какой-то более простой способ, скажите, пожалуйста?

igorchem
() автор топика
Ответ на: комментарий от igorchem

Все эти параметры настраиваются в этом ct-ng, а потом там на основе этого конфига собирается нужным образом, например https://crosstool-ng.github.io/docs/build/

[EXTRA]  =================================================================
[EXTRA]  Dumping internal crosstool-NG configuration
[EXTRA]    Building a toolchain for:
[EXTRA]      build  = x86_64-pc-linux-gnu
[EXTRA]      host   = x86_64-pc-linux-gnu
[EXTRA]      target = mipsel-sde-elf
[EXTRA]  Dumping internal crosstool-NG configuration: done in 0.05s (at 00:02)
build = x86_64-pc-linux-gnu значит что мы собираем компилятор на архитектуре x86_64-pc-linux-gnu.

host = x86_64-pc-linux-gnu значит что компилятор будет запускаться на архитектуре x86_64-pc-linux-gnu

target = mipsel-sde-elf значит что компилятор будет компилировать под mipsel-sde-elf.

Это должно через ct-ng menuconfig настраиваться. Что тут можно еще объяснять?

SZT ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.