Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

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

1276  1 2 все
wasja-de Забанен до 1/4/24 00:03 посетитель22.03.21 13:30
22.03.21 13:30 

Добрый день,


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


Есть ембеддед линукс, вернее его вариант на 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 сорсов?


Спасибо!

#1 
schizo коренной житель22.03.21 16:40
schizo
NEW 22.03.21 16:40 
в ответ wasja-de 22.03.21 13:30

ну, тут этой опции не видно. а Вы ./configure как запускали?

Храни Вас Г-дь!
#2 
AlexNek патриот22.03.21 16:55
AlexNek
NEW 22.03.21 16:55 
в ответ wasja-de 22.03.21 13:30

Сильно сомневаюсь, что бы кто еще сталкивался с подобной проблемой сейчас.

Для АРМа придется повозится, думаю.

https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html


Рекомендуют в makefile добавить

FLAGS = -mfloat-abi=hard


или так

gcc test.o test1.o mfloat-abi=hard


Но что то кажется, что проблема в чём то другом.

#3 
wasja-de Забанен до 1/4/24 00:03 посетитель22.03.21 18:33
NEW 22.03.21 18:33 
в ответ schizo 22.03.21 16:40
ну, тут этой опции не видно. а Вы ./configure как запускали?

спасибо большое за содействие! Запускал по классике, в другой директории

../gcc-10.2.0/configure --enable-languages=c,c++,fortran

экспериментировал по включению и выключению использования тредов, причем запускал на самой борде, то есть в "native" режиме.


Уже после "configure" выставлял опции при компиляции


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


чтобы включить такую оптимизацию, так как в стандартном компилере нет режима -mfloat-abi=soft (там и include соответсвующих нет)


Это не помогало.


Пошел дальше, влез во внутренности Makefile и дописал эту опцию во все вызовы компилера, и родного, и того, что собираю. То есть


FLAGS = -mfloat-abi=hard

и более хардкорно я прописывал, но это не помогало... (спасибо большое, AlexNek за советы)


https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html


регулярно читаю, некоторые опции, как то -march, -mtune, -mcpu, -mfpu постоянно использую. Пробовал их тоже выставить, но тоже не помогло.


Пробовал реально и линаор и 4 разных версии обычного компилятора, везде одно и то же, то есть я, похоже, что-то кардинально не понимаю. В гугле пишут, что это стандартная ошибка, которая лечится опцией -mfloat-abi=hard но я ее же во все вызовы компилятора поставил, и все равно не помогает...

#4 
wasja-de Забанен до 1/4/24 00:03 посетитель22.03.21 18:37
NEW 22.03.21 18:37 
в ответ AlexNek 22.03.21 16:55
Сильно сомневаюсь, что бы кто еще сталкивался с подобной проблемой сейчас.

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


#5 
AlexNek патриот22.03.21 19:23
AlexNek
NEW 22.03.21 19:23 
в ответ wasja-de 22.03.21 18:37
а почему Вы так думаете

Ну железячников тут вроде не так уж и много. А еще и самому компилер собирать смущ

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

По крайне мере, раньше так было. спок

#6 
wasja-de Забанен до 1/4/24 00:03 посетитель22.03.21 19:34
NEW 22.03.21 19:34 
в ответ AlexNek 22.03.21 19:23
Ну железячников тут вроде не так уж и много.

это верно, хотя если смотреть на проблему так: есть борда от интела (вроде не последний производитель) надо бы в ее софтвере наладить что-то, чтоб по крайней мере работало.


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

ой, золотые слова, если бы Вас еще в Интеле услышали, где эту борду спроектировали и по универам ее барыжат, а для нее даже живого репозитория нет и с сорсов почти ничего не ставится.

#7 
AlexNek патриот22.03.21 21:17
AlexNek
NEW 22.03.21 21:17 
в ответ wasja-de 22.03.21 19:34, Последний раз изменено 22.03.21 21:33 (AlexNek)
где эту борду спроектировали

Название платы я как то пока не заметил и с универами дел не имел смущ Да и с железяк слез уже фиг знает когда.

Но зачем брать то, что нельзя нормально пользовать?


А это чем не подходит? 32 Бита тоже есть...

https://www.ni.com/de-de/support/downloads/software-produc...


Хотя похоже интел не спит

https://software.intel.com/content/www/us/en/develop/artic...

#8 
wasja-de Забанен до 1/4/24 00:03 посетитель22.03.21 22:54
NEW 22.03.21 22:54 
в ответ AlexNek 22.03.21 21:17
Название платы я как то пока не заметил


Простите, ссылка не вставилась, а так, да, DE10-Nano https://software.intel.com/content/www/us/en/develop/topic...


и ее младший вариант от Треасика DE0-Nano-SoC https://www.terasic.com.tw/cgi-bin/page/archive.pl?Languag...


Но зачем брать то, что нельзя нормально пользовать?


Честно говоря, я пользовал до этого два десятка кривых и всяких борд от очень даже noname производителей и таких косяков ни разу не видел.


В борде есть одна важная вещь, которой нет ни в одной другой - FPGA совмещенная с армом, мне именно это нужно, ну и чуть-чуть из софта, совсем стандартного - обычный gcc с поддержкой трех компиляторов c,c++,fortran, так как вся математика через lapack вычисляется, а собранных вариантов lapack-blas-fft на эту архитектуру не нашлось. Причем нужны не абы какие, а с максимальной производительностью, типа как делает ATLAS (Automatically Tuned Linear Algebra Software). То есть нужны либо эти библиотеки, либо компилятор фортрана, чтобы ATLAS сам скомпилировал и оптимизировал.


А это чем не подходит? 32 Бита тоже есть...

не, к сожалению, тут только С и С++ и из-за этого lapack-blas-fft не прилинкуешь.

#9 
AlexNek патриот22.03.21 23:12
AlexNek
NEW 22.03.21 23:12 
в ответ wasja-de 22.03.21 22:54, Последний раз изменено 22.03.21 23:20 (AlexNek)
Есть ембеддед линукс, вернее его вариант на DE10-Nano или DE0-Nano-SoC на нем стоит

Я подумал что это о каких то вариантах линукса смущ


обычный gcc с поддержкой трех компиляторов c,c++,fortran

Так получается в этом и состоит проблема С и С++ и fortran?

Хотя для меня немного странно звучит комбинация компилятора для С и фортрана.


А что lapack нельзя самому скомпилить?

https://math.nist.gov/lapack++/

http://lapackpp.sourceforge.net/

#10 
Wanderer_ завсегдатай22.03.21 23:14
NEW 22.03.21 23:14 
в ответ wasja-de 22.03.21 13:30

Удалите все сгенерированные файлы и деректории, которые автоматически были созданы при ошибочной компиляции и запустите компиляцию заново с уже известным флагом (-mfloat-abi=hard).

#11 
wasja-de Забанен до 1/4/24 00:03 посетитель22.03.21 23:21
NEW 22.03.21 23:21 
в ответ Wanderer_ 22.03.21 23:14
Удалите все сгенерированные файлы и деректории, которые автоматически были созданы при ошибочной компиляции и запустите компиляцию заново с уже известным флагом (-mfloat-abi=hard).

я только так и делаю, и собираю всегда в новой директории, чтоб ничего случайно не осталось. Флаг хоть в configure, хоть в Makefiile внутри ручками прописывай, все равно падает одинаково.


Можно залинковать soft + hard - тогда в этом месте компиляции все проходит, но падает позже где-то на час. До этого места компилируется около двух часов.

#12 
wasja-de Забанен до 1/4/24 00:03 посетитель22.03.21 23:26
NEW 22.03.21 23:26 
в ответ AlexNek 22.03.21 23:12
А что lapack нельзя самому скомпилить?

можно конечно, только там миллион строк на фортране и без фортрановского компилятора это довольно сложно сделать.


Можно сделать f2c, но тогда упадет производительность, причем упадет в 10-20 раз, так как во время компиляции происходит подгонка параметров, чтобы все в кеш влазило и по процессорным конвейерам распихивалось. Борда и так дохлая, если там вычисления в 10 раз медленнее будут проходить, то тогда ее уже использовать будет нельзя.

#13 
AlexNek патриот22.03.21 23:28
AlexNek
NEW 22.03.21 23:28 
в ответ wasja-de 22.03.21 22:54

Вроде фортрана на 32 бита нет

https://pkgs.org/download/gcc-gfortranhttps://pkgs.org/dow...

#14 
wasja-de Забанен до 1/4/24 00:03 посетитель22.03.21 23:30
NEW 22.03.21 23:30 
в ответ AlexNek 22.03.21 23:12
Хотя для меня немного странно звучит комбинация компилятора для С и фортрана.


может и не видно со стороны, но эту комбинацию используют все подряд, и NumPy, Octave, Matlab, Mathematics, Ansys, Comsol, и, с большой вероятностью остальные тоже. Просто от фортрана там фактически lapack, blas, иногда еще что-то, но в основном в виде библиотек.


#15 
wasja-de Забанен до 1/4/24 00:03 посетитель22.03.21 23:36
NEW 22.03.21 23:36 
в ответ AlexNek 22.03.21 23:28
Вроде фортрана на 32 бита нет


в lubuntu 32 битной есть, а в обычной убунте - вроде 32 битного ничего уже не осталось.

#16 
schizo коренной житель23.03.21 00:03
schizo
NEW 23.03.21 00:03 
в ответ wasja-de 22.03.21 18:33

ну, запустите configure -march=что-у-Вас-там -mfloat-abi=hard


Вам ещё -target надо, если кроскомпилите на убунте

Храни Вас Г-дь!
#17 
wasja-de Забанен до 1/4/24 00:03 посетитель23.03.21 00:14
NEW 23.03.21 00:14 
в ответ schizo 23.03.21 00:03
ну, запустите configure -march=что-у-Вас-там -mfloat-abi=hard


так я же и писал, что именно так и делал, но, к сожалению, не помогло. Для простоты функций не кросс-компиллил, то есть собирал прямо на борде.

#18 
UVV старожил23.03.21 09:55
NEW 23.03.21 09:55 
в ответ wasja-de 22.03.21 18:37, Последний раз изменено 23.03.21 09:56 (UVV)
скажите, пожалуйста, а почему Вы так думаете, борда-то вроде только двухлетней давности, и, как я понимаю, проблема будет аналогичной, если кто-то просто захочет развести тот же Cyclone V SoC и поставить туда не бареметал, а линукс.

У меня Cyclone V, вполне себе крутится линукс уже лет 5 как.

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

Возьми yocto посвежее, собери что надо и залей на свою плату весь дистр. Я посмотрел, lapack там есть. Если тебе нужно существующий расширить, то тут только секс.

#19 
wasja-de Забанен до 1/4/24 00:03 посетитель23.03.21 10:16
NEW 23.03.21 10:16 
в ответ UVV 23.03.21 09:55
Возьми yocto посвежее, собери что надо и залей на свою плату весь дистр. Я посмотрел, lapack там есть. Если тебе нужно существующий расширить, то тут только секс.


спасибо за совет! Это наверное очень правильное решение, ибо у меня там еще заморочки с USB имеются (не все драйверы есть и кернел всяко компиллить придется).


Единственно, что очень сильно останавливает, так это перетаскивание конфигурации ног FPGA-HPS на новый дистрибутив. Возможно я не нагуглил, или чего-то кординально не понимаю.


Скажите, пожалуйста, как перетащить такую "железячную" конфигурацию из моей сборки на свежую yoct-у?


Спасибо!

#20 
1 2 все