Пробую собрать кросскомпилятор.

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
yantux
постоялец
Сообщения: 133
Зарегистрирован: 29.10.2007 15:02:33
Откуда: Санкт-Петербург
Контактная информация:

Пробую собрать кросскомпилятор.

Сообщение yantux »

Код: Выделить всё

[root@localhost fpcbuild-2.2.2]# make NOGDB=1 CPU_TARGET=arm OS_TARGET=linux build
Makefile:129: *** Compiler ppcrossarm not found.  Останов.
[root@localhost fpcbuild-2.2.2]#   



Как решить эту проблему?
haword
постоялец
Сообщения: 301
Зарегистрирован: 02.03.2006 10:34:40

Сообщение haword »

сначало собери кроскомпилятор, зайди в исходниках фрипаскаля в папку компиляторы там и make сделай
Sergunoid
незнакомец
Сообщения: 3
Зарегистрирован: 25.02.2009 23:58:26

Сообщение Sergunoid »

Всем привет.
Столкнулся с аналогичной проблемой и нахожусь в тупике - перепробовал много вариантов, по нескольку раз перечитал статьи.
Видимо просто небольшой ступор, бывает :D
Нужна помощь.
Задача - собрать кросскомпиллер линух 386 -> linux arm (Для смартфона). Все это делается на Ubuntu (предупреждаю - пару дней на линуксе только :oops: ).
Что делаю:
1. скачал и установил FPC 2.2.2.
2. скачать из свн полностью исходники фпс
3. сделал make clean -> make all. В итоге получил сборку для 386го линуха, на укоем и работаю (что и понятно - таргет не указан, все по дефолту). При этом все хорошо, никаких ошибок. make install тоже проходит без ошибок.
4. теперь пытаюсь сделать следующий шаг, т.е. получить из исходников кросскомпиллер. Все делаю как тут http://www.codenet.ru/progr/other/FreePascal-WinCE.php.
Строки
make all CPU_TARGET=arm OS_TARGET=wince (это не для меня строка, но ее я тоже пробовал)
как и
make all CPU_TARGET=arm OS_TARGET=linux (это уже как раз то что мне надо)
выдают мне ошибку что ppcrossarm не может быть запущен.
При этом пробовал как сборку папки compiler, так и всего fpc.
Поиском определяю что никаких файлов с похожим именем и вовсе нет на компьютере...
Не могу понять, явно что-то упустил но не пойму что...
Да, бинутилсы тоже устанавливал, но там ничего похожего нет (как я понимаю это для следующего шага).
Вообще кроссарм собирается из тех-же исходников тем-же компилятором но с другими флагами или как?
Прошу помощи у спецов.
Заранее спасибо.

PS: был бы рад любой ссылке на информацию, особенно на качественный и глубокий обзор структуры FPC, как работает и все такое. На нем я уже писал под винду достаточно, а вот нутро его мне неизвестно, как собрать что куда... Опятьже бинутилсы и тулчейны для меня загадка :roll: ...
Logo
постоялец
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Сообщение Logo »

1). Необходимы исходники fpc, желательно 2.2.3 (он уже довольно хорошо допилен). Взять можно:
svn checkout http://svn.freepascal.org/svn/fpc/branches/fixes_2_2 fpc-2.2.3
2). Необходимо иметь компилятор fpc ppc386. Если стоит ppcx64, то придется, как минимум, взять один файл - ppc386. 64-х разрядный не компилирует в ARM.
3). Проверяем компиляцию под родную платформу. Заходим в каталог fpc-2.2.3 и делаем make clean all PP=/путь к компилятору/ppc386. Затем sudo make install PP=/путь к компилятору. Иногда sudo не дает результата, тогда задите командо su под рута и выполните make install PP=/путь к компилятору/ppc386

Если все прошло удачно, то можно переходить к кросс компиляции

4). Обязательно устанавливаем binutils. Я не знаю есть ли готовая сборка в Убунте, но думаю, что должна быть, ведь туда пихают все, что нужно и не нужно. В SuSE, нужный нам пакет называется cross-arm-binutils, подобное нужно искать и в Убунту. Если нет, то берем исходники binutils и компилируем для arm-linux.
5). Открываем консоль
6). Указываем пути к папке Компилятора fpc и к binutils: export PATH=$PATH:/путь к исходникам fpc-2.2.3/compiler:/opt/cross/bin
Binutils обычно ставится в директорию /opt/cross/, но проверьте у себя, точно ли оно там находится.
7). Переходим в каталог исходников fpc - fpc-2.2.3
8 ). make clean
9). На всякий случай выполняем: fpcmake -Tall -r , это для конфигурирования make-файло, какие платформы поддерживать. Выбираем все, чтобы не морочиться.
10). make all PP=/usr/local/lib/fpc/2.2.3/ppc386 CPU_TARGET=arm . После того, как мы раньше, откомпилировали и установили fpc, - он обычно находится в: /usr/local/lib/fpc/2.2.3/ppc386, Его и указываем, система не всегда сама разбирается.
11). Если пошло без ошибок - инсталируем под рутом:
> su
> export PATH=/usr/local/lib/fpc/2.2.3/bin:/opt/cross/bin:$PATH - пути проверьте и приведите к своим
> make crossinstall PP=/usr/local/lib/fpc/2.2.3/ppc386 CPU_TARGET=arm - путь к компилятору проверьте

При помощи sudo, у меня на SUSE не инсталируется, если у Вас получится, то воспользуйдесь sudo вместо входа под root`ом

Вроде ничего не пропустил.

Кросс компилятор будет находиться в корневом каталоге fpc:
/usr/local/lib/fpc/2.2.3/ppcrossarm
а модули в:
/usr/local/lib/fpc/2.2.3/units/arm-linux
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Не далее как вчера занимался тем же самым, руководствуясь уже упомянутой статьей, только в винде. Пришел к выводу, что в статье написана какая-то хрень.
Описанная во всех подробностях процедура сборки "родного" компилятора для обычных (т.е. тех, кто пользуется релизными версиями) пользователей представляет, как бы это сказать... довольно сомнительную ценность. А "необычные" и так проделают ее во сне десять раз на бис.

Дальше, вот это:

Код: Выделить всё

make all CPU_TARGET=arm OS_TARGET=wince

может собрать кросскомпилятор только в том случае, если он уже есть (а если он уже есть - зачем его собирать?)

Методом проб и ошибок выяснил, что если есть только исходники и "родной" компилятор, то компилятор для другого процессора нужно собирать вот так:

Код: Выделить всё

make PPC_TARGET=arm

В результате получается компилятор с именем ppcarm[.exe], который умеет компилить как для Linux, так и для WinCE.

Получился ppcarm, но все попытки собрать что-то для ARM требуют ppcrossarm. Чем один отличается от другого - так и не понял. Поэтому просто ткнул make носом в то, что есть, и все, как ни странно, собралось (следующими командами вначале в папке rtl, потом в папке packages):

Код: Выделить всё

make PP=ppcarm OS_TARGET=wince
make install PP=ppcarm OS_TARGET=wince

Т.к. ppcarm знает только об ARM, указание CPU_TARGET не обязательно.
Юра
постоялец
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение Юра »

Может hands.sys не правильно установлен? :wink:

Нужно иметь правильно установленный родной компилятор последней зарелизеной версии, а также cross-binutils для целевой платформы. cross-binutils должны иметь "правильные" имена (например, as должен иметь имя arm-wince-as, итд), а также находиться в пути.

Вот эти строки чудесно собирают и устанавливают снапшот кросс компилятора у меня винде:

Код: Выделить всё

make distclean
make all OS_TARGET=wince CPU_TARGET=arm
make install CROSSINSTALL=1 OS_TARGET=wince CPU_TARGET=arm SNAPSHOT=1 INSTALL_PREFIX=C:/Develop/FPC/pp23


Аналогично делается и в линуксе.
Последний раз редактировалось Юра 26.02.2009 16:58:13, всего редактировалось 1 раз.
Sergunoid
незнакомец
Сообщения: 3
Зарегистрирован: 25.02.2009 23:58:26

Сообщение Sergunoid »

Большое спасибо!
Все собралось.
Главная загвоздка была в том что установленный бинутилс был не совсем тот, и имена файлов не совпадали.
Да в добавок я к ним PATH не прописал (хотя это все равно, ведь бинутилсы были не те).
Установил бинутилсы (точнее просто распаковал все что в архиве в bin папке), прописал пути, сделал кросс компиляцию и появился ppcrossarm.
Тестовое приложение также собралось без проблем.

Еще раз спасибо! :)
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

А почему ppcx64 (Linux) самосборный или из коробки (Debian Squeeze) не хочет работать с платформами отличными от Linux (-Tlinux). Когда я собираю компилятор ppc386 (используется ppcx64, make PPC_TARGET=i386) такой странности не наблюдается, т.е. такой компилятор готов работать со всеми платформами (-Twin32 и т.д.)?

p.s. Спасибо Sergei I. Gorelkin за PPC_TARGET :-).

..bw
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

При запуске "ppcx64 -i" он печатает список платформ. Поддерживаются только платформы с тем же процессором, для которого собран компилятор, т.е. у ppcx64 будет win64, а не win32.
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

И то верно. Поленился перечитать какие у него ещё опции есть. Да и про win64 не сразу сообразил.
А чего он сбивает меня с толку и показывает только "-Tlinux" из доступных опций, косяк! У ppc386 с этим нормально.

p.s. Решил тряхнуть стариной, а то незаслуженно забросил язык :-).

..bw
Ответить