Куда при сборке gcc с сорсов написать -mfloat-abi=hard ?
Добрый день,
У меня возник вопрос, который не могу решить сам уже больше недели, помогите, пожалуйста, советом.
Есть ембеддед линукс, вернее его вариант на 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>
#include <gnu/stubs-soft.h>
Гугление на эту ошибку приводит к тому, что надо установить -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://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
Рекомендуют в makefile добавить
FLAGS = -mfloat-abi=hard
или так
gcc test.o test1.o mfloat-abi=hard
Но что то кажется, что проблема в чём то другом.
ну, тут этой опции не видно. а Вы ./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 но я ее же во все вызовы компилятора поставил, и все равно не помогает...
Сильно сомневаюсь, что бы кто еще сталкивался с подобной проблемой сейчас.
скажите, пожалуйста, а почему Вы так думаете, борда-то вроде только двухлетней давности, и, как я понимаю, проблема будет аналогичной, если кто-то просто захочет развести тот же Cyclone V SoC и поставить туда не бареметал, а линукс.
Ну железячников тут вроде не так уж и много.
это верно, хотя если смотреть на проблему так: есть борда от интела (вроде не последний производитель) надо бы в ее софтвере наладить что-то, чтоб по крайней мере работало.
Да и в продакшине использовать самособранный компилятор не каждый решится.
ой, золотые слова, если бы Вас еще в Интеле услышали, где эту борду спроектировали и по универам ее барыжат, а для нее даже живого репозитория нет и с сорсов почти ничего не ставится.
где эту борду спроектировали
Название платы я как то пока не заметил и с универами дел не имел Да и с железяк слез уже фиг знает когда.
Но зачем брать то, что нельзя нормально пользовать?
А это чем не подходит? 32 Бита тоже есть...
https://www.ni.com/de-de/support/downloads/software-produc...
Хотя похоже интел не спит
https://software.intel.com/content/www/us/en/develop/artic...
Название платы я как то пока не заметил
Простите, ссылка не вставилась, а так, да, 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 не прилинкуешь.
Есть ембеддед линукс, вернее его вариант на DE10-Nano или DE0-Nano-SoC на нем стоит
Я подумал что это о каких то вариантах линукса
обычный gcc с поддержкой трех компиляторов c,c++,fortran
Так получается в этом и состоит проблема С и С++ и fortran?
Хотя для меня немного странно звучит комбинация компилятора для С и фортрана.
А что lapack нельзя самому скомпилить?
https://math.nist.gov/lapack++/
http://lapackpp.sourceforge.net/
Удалите все сгенерированные файлы и деректории, которые автоматически были созданы при ошибочной компиляции и запустите компиляцию заново с уже известным флагом (-mfloat-abi=hard).
я только так и делаю, и собираю всегда в новой директории, чтоб ничего случайно не осталось. Флаг хоть в configure, хоть в Makefiile внутри ручками прописывай, все равно падает одинаково.
Можно залинковать soft + hard - тогда в этом месте компиляции все проходит, но падает позже где-то на час. До этого места компилируется около двух часов.
А что lapack нельзя самому скомпилить?
можно конечно, только там миллион строк на фортране и без фортрановского компилятора это довольно сложно сделать.
Можно сделать f2c, но тогда упадет производительность, причем упадет в 10-20 раз, так как во время компиляции происходит подгонка параметров, чтобы все в кеш влазило и по процессорным конвейерам распихивалось. Борда и так дохлая, если там вычисления в 10 раз медленнее будут проходить, то тогда ее уже использовать будет нельзя.
Хотя для меня немного странно звучит комбинация компилятора для С и фортрана.
может и не видно со стороны, но эту комбинацию используют все подряд, и NumPy, Octave, Matlab, Mathematics, Ansys, Comsol, и, с большой вероятностью остальные тоже. Просто от фортрана там фактически lapack, blas, иногда еще что-то, но в основном в виде библиотек.
скажите, пожалуйста, а почему Вы так думаете, борда-то вроде только двухлетней давности, и, как я понимаю, проблема будет аналогичной, если кто-то просто захочет развести тот же Cyclone V SoC и поставить туда не бареметал, а линукс.
У меня Cyclone V, вполне себе крутится линукс уже лет 5 как.
в котором нет lapack/blas, и есть желание собрать gcc, по возможности новее (или какой получится) с исходников, но чтоб там точно был gfortran и не менее С++14.
Возьми yocto посвежее, собери что надо и залей на свою плату весь дистр. Я посмотрел, lapack там есть. Если тебе нужно существующий расширить, то тут только секс.
Возьми yocto посвежее, собери что надо и залей на свою плату весь дистр. Я посмотрел, lapack там есть. Если тебе нужно существующий расширить, то тут только секс.
спасибо за совет! Это наверное очень правильное решение, ибо у меня там еще заморочки с USB имеются (не все драйверы есть и кернел всяко компиллить придется).
Единственно, что очень сильно останавливает, так это перетаскивание конфигурации ног FPGA-HPS на новый дистрибутив. Возможно я не нагуглил, или чего-то кординально не понимаю.
Скажите, пожалуйста, как перетащить такую "железячную" конфигурацию из моей сборки на свежую yoct-у?
Спасибо!