Существует некая среда разработки Xilinx ISE, имеющая ограниченную поддержку под линукс. В ходе работы с ней вызывается симулятор схемы, который собирает из исходных кодов verilog/vhdl некие .С-файлы, и затем, для симуляции компилирует их при помощи GCC.
В логе это выглядит следующим образом:
Compiling isim/Barrel_Shifter_isim_beh.exe.sim/work/m_02392917152912931626_1577402672.c to isim/Barrel_Shifter_isim_beh.exe.sim/work/m_02392917152912931626_1577402672.lin64.o with command:
"/usr/bin/gcc" -Wa,-W -O -fPIC -m64 -c -o "isim/Barrel_Shifter_isim_beh.exe.sim/work/m_02392917152912931626_1577402672.lin64.o" -I"/opt/Xilinx/14.7/ISE_DS/ISE/./data/include" "isim/Barrel_Shifter_isim_beh.exe.sim/work/m_02392917152912931626_1577402672.c"
Прошу заметить, что gcc вызывается по абсолютному пути «/usr/bin/gcc».
Исходно, он при этом выдает ошибку «Implicit function geclaration», после чего, из-за наличия ошибки, дальнейшая симуляция не запускается.
«Ошибка» в .С файлах вызвана тем, что подготовка их из исходников verilog/vhdl происходит без явного написания прототипов. Что по сути не критично и может быть погашено вызовом gcc c опцией «-Wno-implicit».
Я стал думать как это исправить:
-
Повлиять я внутреннюю работу среды я вроде как не могу, а вот повлиять на запуск компилятора — могу.
-
Однако, оказывается, CFLAGS и прочие переменные среды — это лажа, так как gcc их не смотрит.
-
Я думал, можно перед запуском среды разработки дополнить PATH cпереди:
#export PATH=«somedir:$PATH»
и положить скрипт:
somedir/gcc
#!/bin/sh
exec /usr/bin/gcc -Wno-implicit $*
Однако, как было выше сказано, среда запускает gcc по абсолютному пути.
-
Пришлось сделать:
#mv /usr/bin/gcc /usr/bin/_gcc
/usr/bin/gcc
#!/bin/sh
exec /usr/bin/_gcc -Wno-implicit $*
Это, естественно, работает, но, по сути своей — ужасно.
Вопрос: как сделать это правильно?