Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сборка toolchain в MinGW
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Krom
Решил-таки перебраться из Линукс в Винду, ибо много чего требуется в ней, а перегружаться туда-сюда надоело уже... Установил MinGW, пытаюсь собрать toolchain для Cortex (в Дебиан процесс освоен давно) - не выходит. Спустя минут 10 после начала сборки самого gcc (binutils собрались нормально) вываливается с ошибкой. Думал, скрипты оптимизировал под винду неверно. Взял скрипты yagarto. Результат аналогичный. Крутил и так, и эдак, пока не заметил странную вещь: в процессе сборки постоянно растет объем используемой памяти (смотрю в Диспетчере задач) и когда доходит до 1.72ГБ (+/- несколько процентов) вываливаемся с ошибкой fork: Resource temporarily unavailable или ля-ля-ля: Permission denied. Память освобождается только после перезагрузки компа.
Работаю на ноутбуке, проц Core 2 Duo 2.2 ГГц T7500, ОЗУ 2 ГБ. Ось - Win XP Pro (32 бит). Манипуляции с файлом покачки не помогли - похоже, MinGW его просто не видит (пробовал отключать вообще - тоже самое).
Встречался кто-нибудь с аналогичной проблемой?
RISCovyj
А этот пойдет?

Sourcery G++ Lite
Krom
Цитата(RISCovyj @ Apr 24 2011, 01:09) *
А этот пойдет?
Sourcery G++ Lite

Предпочитаю собирать собственноручно sm.gif. В принципе, я уже вышел из положения - отказался от автоматизированной сборки с помощью скрипта и собрал поэтапно (геморрой еще тот я вам скажу). Осталось только разобраться как OpenOCD в MinGW собирать sm.gif
Сергей Борщ
QUOTE (Krom @ Apr 28 2011, 00:45) *
Осталось только разобраться как OpenOCD в MinGW собирать sm.gif
Было бы неплохо, если бы вы записали и выложили здесь весь процесс сборки, начиная от скачивания/установки git (в идеале - и mingw).
MrYuran
Цитата(Сергей Борщ @ Apr 28 2011, 10:12) *
Было бы неплохо, если бы вы записали и выложили здесь весь процесс сборки, начиная от скачивания/установки git (в идеале - и mingw).

++
Давно мечтаю mspgcc собрать, времени урывками по полтора-два часа хватает только на то, чтобы начать разбираться и опять отложить до следующего раза.
Более подробная инструкция с картой потенциальных граблей очень бы помогла.
Krom
Цитата(Сергей Борщ @ Apr 28 2011, 10:12) *
Было бы неплохо, если бы вы записали и выложили здесь весь процесс сборки, начиная от скачивания/установки git (в идеале - и mingw).

Ну надеюсь домучить это дело в ближайшие пару дней. Как только получится - распишу. В Цигвине собралось без особых проблем, но хотелось бы обойтись только MinGW.
ЗЫ. Собрал, но попробовать не на чем, все на работе sad.gif. Завтра притащу с работы какую-нить железяку и проверю на счет работоспособности.
Krom
В общем, практически все собрал. Open OCD тоже, прошивка через него заливается, а отладку проверить не могу. Оказывается, финальная сборка gcc до конца не проходит, и проект собрать невозможно. Для проверки заливки через собранный OpenOCD брал бинарник, собранный в никсах. А вот в Винде под MinGW финальная сборка gcc никак не идет sad.gif. Пробовал и 4.5.3, и 4.6.0 - вылетает на этапе сборки libgcc с сообщением:
In file included .../arm-elf/include/sys/types.h:126:16: error: expected identifier or '(' before 'char'

ПРичем ничего такого особенного там нет:
typedef long daddr_t;
typedef char * caddr_t; // ругаеццо сюда

С этими же скриптами собирал 4.5.1 под никсами без проблем. Кто-нить сталкивался с подобным? help.gif
ПРобовал ягартовские скрипты(только собирал arm-elf, а не arm-none-eabi) - аналогично. В общей сложности дня три уже потратил crying.gif Думаю, проще было бы собрать в nix-ах, но хотелось бы освоить процесс сборки именно в MinGW под вынем

gcc для сборки newlib собирается вот этим скриптом:
if [ "$OSTYPE" == "msys" ]
then
export CFLAGS=-D__USE_MINGW_ACCESS
fi

CFLAGS="-I$PREFIX/include" \
LDFLAGS="-L$PREFIX/lib" \

../$GCC_SRC/configure \
--target=$TARGET --prefix=$PREFIX \
--disable-nls --disable-shared --disable-threads \
--with-gcc --with-gnu-ld --with-gnu-as --with-dwarf2 \
--enable-languages=c,c++ --enable-interwork --enable-multilib \
--with-newlib --with-headers=../newlib-$NEWLIB_VER/newlib/libc/include \
--with-gmp=$PREFIX \
--with-mffr=$PREFIX \
--with-mpc=$PREFIX \
--disable-libssp --disable-libstdcxx-pch --disable-libmudflap \
--disable-libgomp -v \
|| { echo "Error configuring gcc"; exit 1; }

mkdir -p libiberty libcpp fixincludes

$MAKE all-gcc || { echo "Error building gcc"; exit 1; }
$MAKE install-gcc || { echo "Error installing gcc"; exit 1; }


сами newlib:
../$NEWLIB_SRC/configure \
--target=$TARGET --prefix=$PREFIX \
--enable-interwork --enable-multilib \
--disable-newlib-supplied-syscalls \
|| { echo "Error configuring newlib"; exit 1; }

$MAKE || { echo "Error building newlib"; exit 1; }
$MAKE install || { echo "Error installing newlib"; exit 1; }


финальная сборка gcc:
if [ "$OSTYPE" == "msys" ]
then
export CFLAGS=-D__USE_MINGW_ACCESS
fi

CFLAGS="-I$PREFIX/include" \
LDFLAGS="-L$PREFIX/lib" \

../$GCC_SRC/configure \
--target=$TARGET --prefix=$PREFIX \
--disable-nls --disable-shared --disable-threads \
--with-gcc --with-gnu-ld --with-gnu-as --with-dwarf2 \
--enable-languages=c,c++ --enable-interwork --enable-multilib \
--with-newlib --with-headers=$PREFIX/$TARGET/include \
--with-gmp=$PREFIX \
--with-mffr=$PREFIX \
--with-mpc=$PREFIX \
--disable-libssp --disable-libstdcxx-pch --disable-libmudflap \
--disable-libgomp -v \
|| { echo "Error configuring gcc"; exit 1; }

mkdir -p libiberty libcpp fixincludes

$MAKE all || { echo "Error building gcc"; exit 1; }
$MAKE install || { echo "Error installing gcc"; exit 1; }


никак не въеду, где собака порылась cranky.gif
ЗЫ. Только тут увидел ошибку в скрипте: --with-mffr=$PREFIX \ а надо ведь --with-mpfr=$PREFIX \ Ну, сделаю еще попытку
Krom
Что интересно - под никсами и для никсов все собирается прекрасно.
ЗЫ. Что еще интереснее - под никсами, но для Виндовса ( с опцией --host=i586-mingw32msvc ) таже хрень - финальная сборка gcc падает на том же месте и с той же ошибкой:
-c ../../gcc-4.6.0/gcc/crtstuff.c -DCRT_BEGIN \
-o /home/krom/arm-elf-tool/fingcc-build/arm-elf/thumb/libgcc/crtbegin.o
In file included from /usr/local/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/sys-include/stdio.h:46:0,
from ../../gcc-4.6.0/gcc/tsystem.h:87,
from ../../gcc-4.6.0/gcc/crtstuff.c:61:
/usr/local/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/sys-include/sys/types.h:126:16: error: expected identifier or '(' before 'char'
make[5]: *** [/home/krom/arm-elf-tool/fingcc-build/arm-elf/thumb/libgcc/crtbegin.o] Ошибка 1
make[5]: Leaving directory `/home/krom/arm-elf-tool/fingcc-build/gcc'
make[4]: *** [gcc-extra-parts] Ошибка 2
make[4]: Leaving directory `/home/krom/arm-elf-tool/fingcc-build/arm-elf/thumb/libgcc'
make[3]: *** [multi-do] Ошибка 1
make[3]: Leaving directory `/home/krom/arm-elf-tool/fingcc-build/arm-elf/libgcc'
make[2]: *** [all-multi] Ошибка 2
make[2]: Leaving directory `/home/krom/arm-elf-tool/fingcc-build/arm-elf/libgcc'
make[1]: *** [all-target-libgcc] Ошибка 2
make[1]: Leaving directory `/home/krom/arm-elf-tool/fingcc-build'
make: *** [all] Ошибка 2
Error building gcc


Что еще заметил - какого-то хрена лезет в /usr/local/lib/gcc/arm-elf/4.5.1/ - вообще непонятка, зачем ему туда
Krom
В общем, так и не нашел я откуда у этой ошибки ноги растут. Пробовал собирать и под MinGW в Windows, и в Линуксе для Виндовса - результат один и то же. На версиях 4.5.3, 4.6.0 и 4.6.1. Причем все три версии под Линуксом собираются прекрасно и с первого тыка. Нифига непонятно, как у ягарто собиралось - пробовал его же скриптами, с теми же исходниками - ошибка остается. Видимо, патчик какой приныкал.
Пока остановился на таком варианте: финальную сборку gcc провожу командами make all-gcc и make install-gcc (а надо бы make и install), а библиотеки подсовываю от собранной в линуксе версии. Бинарник собирал, прошивал, тестил - работает.
MrYuran
Цитата(Krom @ May 11 2011, 18:23) *
Пока остановился на таком варианте: финальную сборку gcc провожу командами make all-gcc и make install-gcc (а надо бы make и install), а библиотеки подсовываю от собранной в линуксе версии.

Ну а что - тоже мысль. Библиотеки же от системы вообще никак не зависят.
Надо будет тоже попробовать таки чего-нето собрать.
Krom
Цитата(MrYuran @ May 11 2011, 18:47) *
Ну а что - тоже мысль. Библиотеки же от системы вообще никак не зависят.
Надо будет тоже попробовать таки чего-нето собрать.

Не зависят, но нет ощущения завершенности. Опять же собирать в двух OS это как-то совсем садо-мазо (хотя под Линукс собирается почти в два раза быстрее wink.gif )... Но пока выхода другого не вижу, и так чистым временем дней пять на эти эксперименты убил... В общем, могу выложить на фтп полный комплект (Эклипс со всеми плагинами и собраный тулчейн arm-elf под кортексы, включая openocd 0.4.0). Смысл есть? Нужно кому?
ЗЫ. Прошу прощения за чайниковский вопрос, но все-таки - а чем в двух словах отличаются arm-elf и arm-none-eabi?
demiurg_spb
Цитата(Krom @ May 12 2011, 10:09) *
а чем в двух словах отличаются arm-elf и arm-none-eabi?
ИМХО практически ничем.
Вот нашёл по теме:
http://embdev.net/topic/129737
John Doe
Цитата(Krom @ May 5 2011, 13:55) *
Что интересно - под никсами и для никсов все собирается прекрасно.
ЗЫ. Что еще интереснее - под никсами, но для Виндовса ( с опцией --host=i586-mingw32msvc ) таже хрень - финальная сборка gcc падает на том же месте и с той же ошибкой:
-c ../../gcc-4.6.0/gcc/crtstuff.c -DCRT_BEGIN \
-o /home/krom/arm-elf-tool/fingcc-build/arm-elf/thumb/libgcc/crtbegin.o
In file included from /usr/local/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/sys-include/stdio.h:46:0,
from ../../gcc-4.6.0/gcc/tsystem.h:87,
from ../../gcc-4.6.0/gcc/crtstuff.c:61:
/usr/local/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/sys-include/sys/types.h:126:16: error: expected identifier or '(' before 'char'
make[5]: *** [/home/krom/arm-elf-tool/fingcc-build/arm-elf/thumb/libgcc/crtbegin.o] Ошибка 1
make[5]: Leaving directory `/home/krom/arm-elf-tool/fingcc-build/gcc'
make[4]: *** [gcc-extra-parts] Ошибка 2
make[4]: Leaving directory `/home/krom/arm-elf-tool/fingcc-build/arm-elf/thumb/libgcc'
make[3]: *** [multi-do] Ошибка 1
make[3]: Leaving directory `/home/krom/arm-elf-tool/fingcc-build/arm-elf/libgcc'
make[2]: *** [all-multi] Ошибка 2
make[2]: Leaving directory `/home/krom/arm-elf-tool/fingcc-build/arm-elf/libgcc'
make[1]: *** [all-target-libgcc] Ошибка 2
make[1]: Leaving directory `/home/krom/arm-elf-tool/fingcc-build'
make: *** [all] Ошибка 2
Error building gcc


Что еще заметил - какого-то хрена лезет в /usr/local/lib/gcc/arm-elf/4.5.1/ - вообще непонятка, зачем ему туда

Столкнулся с той же проблемой при сборке gcc 4.6.2. Оказалось, что косяк в файле auto_host.h, который неправильно генерит configure. Если точнее, то проблема в этой строчке (пишу по памяти):
#define caddr_t char *
Для исправления проблемы достаточно закомментировать (/*...*/) эту строчку в $(gcc_source_dir)/gcc/configure.
Krom
Попробую. Хорошо бы, если бы все было так просто. Интересно, как тогда все остальные собирают? Пробовал даже ягартовскими скриптами собирать - та же хрень. А ведь он собирал 4.6.2, и патчи у него к скриптам прилагаются...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.