Перейти к содержанию
    

Сборка toolchain в MinGW

Решил-таки перебраться из Линукс в Винду, ибо много чего требуется в ней, а перегружаться туда-сюда надоело уже... Установил 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 его просто не видит (пробовал отключать вообще - тоже самое).

Встречался кто-нибудь с аналогичной проблемой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А этот пойдет?

Sourcery G++ Lite

Предпочитаю собирать собственноручно :). В принципе, я уже вышел из положения - отказался от автоматизированной сборки с помощью скрипта и собрал поэтапно (геморрой еще тот я вам скажу). Осталось только разобраться как OpenOCD в MinGW собирать :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Осталось только разобраться как OpenOCD в MinGW собирать :)
Было бы неплохо, если бы вы записали и выложили здесь весь процесс сборки, начиная от скачивания/установки git (в идеале - и mingw).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Было бы неплохо, если бы вы записали и выложили здесь весь процесс сборки, начиная от скачивания/установки git (в идеале - и mingw).

++

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

Более подробная инструкция с картой потенциальных граблей очень бы помогла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Было бы неплохо, если бы вы записали и выложили здесь весь процесс сборки, начиная от скачивания/установки git (в идеале - и mingw).

Ну надеюсь домучить это дело в ближайшие пару дней. Как только получится - распишу. В Цигвине собралось без особых проблем, но хотелось бы обойтись только MinGW.

ЗЫ. Собрал, но попробовать не на чем, все на работе :(. Завтра притащу с работы какую-нить железяку и проверю на счет работоспособности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем, практически все собрал. Open OCD тоже, прошивка через него заливается, а отладку проверить не могу. Оказывается, финальная сборка gcc до конца не проходит, и проект собрать невозможно. Для проверки заливки через собранный OpenOCD брал бинарник, собранный в никсах. А вот в Винде под MinGW финальная сборка gcc никак не идет :(. Пробовал и 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:

ПРобовал ягартовские скрипты(только собирал arm-elf, а не arm-none-eabi) - аналогично. В общей сложности дня три уже потратил :crying: Думаю, проще было бы собрать в 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:

ЗЫ. Только тут увидел ошибку в скрипте: --with-mffr=$PREFIX \ а надо ведь --with-mpfr=$PREFIX \ Ну, сделаю еще попытку

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что интересно - под никсами и для никсов все собирается прекрасно.

ЗЫ. Что еще интереснее - под никсами, но для Виндовса ( с опцией --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/ - вообще непонятка, зачем ему туда

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем, так и не нашел я откуда у этой ошибки ноги растут. Пробовал собирать и под MinGW в Windows, и в Линуксе для Виндовса - результат один и то же. На версиях 4.5.3, 4.6.0 и 4.6.1. Причем все три версии под Линуксом собираются прекрасно и с первого тыка. Нифига непонятно, как у ягарто собиралось - пробовал его же скриптами, с теми же исходниками - ошибка остается. Видимо, патчик какой приныкал.

Пока остановился на таком варианте: финальную сборку gcc провожу командами make all-gcc и make install-gcc (а надо бы make и install), а библиотеки подсовываю от собранной в линуксе версии. Бинарник собирал, прошивал, тестил - работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока остановился на таком варианте: финальную сборку gcc провожу командами make all-gcc и make install-gcc (а надо бы make и install), а библиотеки подсовываю от собранной в линуксе версии.

Ну а что - тоже мысль. Библиотеки же от системы вообще никак не зависят.

Надо будет тоже попробовать таки чего-нето собрать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну а что - тоже мысль. Библиотеки же от системы вообще никак не зависят.

Надо будет тоже попробовать таки чего-нето собрать.

Не зависят, но нет ощущения завершенности. Опять же собирать в двух OS это как-то совсем садо-мазо (хотя под Линукс собирается почти в два раза быстрее ;) )... Но пока выхода другого не вижу, и так чистым временем дней пять на эти эксперименты убил... В общем, могу выложить на фтп полный комплект (Эклипс со всеми плагинами и собраный тулчейн arm-elf под кортексы, включая openocd 0.4.0). Смысл есть? Нужно кому?

ЗЫ. Прошу прощения за чайниковский вопрос, но все-таки - а чем в двух словах отличаются arm-elf и arm-none-eabi?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а чем в двух словах отличаются arm-elf и arm-none-eabi?
ИМХО практически ничем.

Вот нашёл по теме:

http://embdev.net/topic/129737

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что интересно - под никсами и для никсов все собирается прекрасно.

ЗЫ. Что еще интереснее - под никсами, но для Виндовса ( с опцией --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.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробую. Хорошо бы, если бы все было так просто. Интересно, как тогда все остальные собирают? Пробовал даже ягартовскими скриптами собирать - та же хрень. А ведь он собирал 4.6.2, и патчи у него к скриптам прилагаются...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...