Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.236.100.210] |
|
Сообщ.
#1
,
|
|
|
Итак, после долгих и кровопролитных боёв я всё-таки одолел эту басурманскую банду - ФП и Лазарус - и заставил их собраться. Что больше всего взбесило и вынесло мне мозг - это что нигде нет нормального мануала по данному вопросу! Везде ограничиваются make install, и всё! Более того, в самом FPC нет даже ридмишки с описанием параметров и способов сборки!
Ну да ладно - это опенсорс, чего ж тут еще требовать. Исходные данные: установленный FPC более-менее свежей версии, доступной в бинарном виде. Задача: собрать Lazarus на основе самого свежего FPC (я испытывал на 2.4.4 и 2.5.1). Подготовка Предположим, что мы действуем на платформе Win32 и собирать будем под неё же. 1) Перво-наперво у нас должна быть хоть какая-то версия компилятора. В моём случае это был установленный с Lazarus 2.4.3, но может быть любой, доступный в бинарном виде. Пускай он лежит в D:\Coding\IDE\Lazarus\fpc\2.4.3\bin\i386-win32 (Далее <OldFPCDir>) 2) Теперь нужны исходники свежего FPC - скачиваем файл fpcbuild-2.4.4.tar.gz или берём fpcbuild.zip с самой свежей версией из SVN. Пускай он лежит в D:\Coding\New_FPC\ (Далее <NewFPCTmpDir>) 3) Для сборки с поддержкой дебуггера нужны бинарники libgdb, скачиваем соответствующий файл с сервера. Там есть версии только под Винды, причём для W32 это 7.2, а для W64 это уже 7.2.50 . Распаковываем содержимое в <NewFPCTmpDir>\fpcsrc\libgdb Action! 1) Запускаем командную строку в директории <NewFPCTmpDir> 2) Прописываем путь к имеющемуся FPC в Path: SET Path=<OldFPCDir>;%Path% !!! Подставляем конкретное значение! Т.е. будет выглядеть как SET Path=D:\Coding\New_FPC\;%Path% 3) Сохраняем опции и целевую платформу: SET Opt=OPT="-gl" SET Target=OS_TARGET=win32 CPU_TARGET=i386 3) Собираем сам компилятор CD fpcsrc\compiler make cycle %Target% %Opt% CD ..\.. 4) Собираем дистрибутив make singlezipinstall %Target% %Opt% Замечание. У мейкфайла куча опций и режимов сборки, но install, к примеру, просто переписывает в указанное место бинарники и доки - а Лазарусу нужна определённая структура. Больше всего этим целям отвечает опция singlezipinstall, которая делает одиночный файл вида fpc-2.4.4.i386-win32.zip. Несмотря на то, что в мейкфайле она описана как Alias for zipinstall, этот zipinstall пакует разные куски в отдельные файлы, что в нашем случае совершенно бесполезно. Хотя и singlezipinstall тоже глючный, что мы увидим далее - но он наиболее близок к нужному результату. Если всё сделано правильно, и звёзды благоволят, и Сатурн находится в третьей фазе*, получим архив со свежесобранными бинарными файлами FPC. 5) Создаём папку D:\Coding\IDE\Lazarus_new (далее <NewLazDir>) и распаковываем получившийся fpc-2.4.4.i386-win32.zip в D:\Coding\IDE\Lazarus_new\fpc\2.4.4\ (далее <NewFPCDir>) 6) Если попробовать натравить Lazarus на этот получившийся FP, получим ошибку - нет исходников для rtl и packages. В то же время параметр sourcezip хоть и собирает исходники, но не берёт бинарники. Очень печально. Поэтому есть два способа: либо выполнить также make sourcezip %Target% %Opt% и распаковать получившуюся прорву файлов в <NewFPCDir>, либо просто и без затей скопировать папки fpsrc\rtl и fpsrc\packages в <NewFPCDir>\sources. Я предпочёл второе. Итак, копируем в <NewFPCDir> папки fpsrc\rtl и fpsrc\packages. 7) Думаете, всё? Щазз. Одно из странных требований FPC - жестко прописанные пути к себе самому в конфиге. Да и сам конфиг тоже требуется. Поэтому идём в <NewFPCDir>\bin\i386-win32 и запускаем следующую команду: fpcmkcfg.exe -d "basepath=<NewFPCDir>" -o .\fpc.cfg Это создаст новый конфиг с нужными путями. 8) Получаем свежие исходники Лазаруса (только из SVN, т.к. для него почему-то слепков не делают). Копируем исходники в <NewLazDir>. 9) Запускаем командную строку в папке <NewLazDir> и выполняем команды: SET Path=<NewFPCDir>\bin\i386-win32;%Path% make all Если всё удачно (опять же см. про фазы Сатурна и т.д. ), то можно доставать пиво, мы близки к цели. 10) Запускаем Лазарус. Сервис - Параметры - Окружение. Настраиваем пути к компилятору, исходным кодам и make на <NewFPCDir>. К сожалению, Лазарус очень странно себя ведёт с макросами/переменными окружения, поэтому указать пути как $(LazarusDir)fpc\$(FPCVer)\... и жонглировать только версией FPC не выйдет. Я указал полные пути во всех трех комбобоксах. 11) Сервис - Параметры - Отладчик. Здесь надо указать путь к программе gdb.exe. Откуда её взять, если собираешь из исходников - в душе не шарю. Я скопировал из имеющейся установки Лазаруса (старой версии). 12) Сервис - Пересмотреть каталог исходного кода FPC. Вроде бы нужная штука, без неё Лазарус не сможет найти нужные юниты. 13) Сервис - Параметры сборки - указать нужные и нажать Собрать. Если фортуна всё ещё с нами, и боги на нас не гневаются, получим собранную новым компилятором среду. ------ * Это не шутка. Я столкнулся с такой невероятной кучей странных необъяснимых вещей при сборке, что не раз был близок к тому, чтобы что-то разбить или сломать. Крайне неустойчивая и непродуманная система. К примеру, была ошибка unzip \fpcsrc\packages\fcl-process: nothing to unzip, хотя за каким лядом там что-то анзипить - для меня загадка. Всё решилось распаковкой исходного дистрибутива в чистую папку. Да, и обещанный батник. Был написан, чтобы автоматизировать самую дурную часть процесса. :: Batch file to build FPC from sources. :: %1 : action = clean (remove all compiled stuff) / make (compile) :: %2 : target = W32 / W64 :: !!! don't forget to set YOUR path to current FPC !!! @ECHO OFF SET CurrFP= <your path to fpc>\bin\i386-win32 SET OldPath=%Path% SET Path=%CurrFP%;%OldPath% SET Opts=-gl IF "%1"=="clean" ( make clean all %Opt% FPC=%CurrFP%\ppc386.exe GOTO Exit ) :: "Target" stuff works only if this option is set SETLOCAL ENABLEDELAYEDEXPANSION IF "%1"=="make" ( SET Opt=OPT="%Opts%" SET Target= IF "%2"=="W32" ( SET Target=OS_TARGET=win32 CPU_TARGET=i386 ) IF "%2"=="W64" ( SET Target=OS_TARGET=win64 CPU_TARGET=x86_64 ) :: ... IF "!Target!"=="" ( ECHO Target is abscent or unknown... quitting GOTO Exit ) ECHO Will compile for !Target! PAUSE SET /P ans=Compile the compiler? [y/n] IF "!ans!"=="y" ( CD fpcsrc\compiler make cycle !Target! %Opt% CD ..\.. ) SET /P ans=Compile other units? [y/n] IF "!ans!"=="y" ( make singlezipinstall !Target! %Opt% ) GOTO Exit ) ECHO Unknown param SETLOCAL DISABLEDELAYEDEXPANSION :Exit SET Path=%OldPath% PAUSE Запуск (если сохранить как build.bat в папке %NewFPCTmpDir%): build clean|make W32|make W64 Сборку под 64 еще потестирую, но т.к. соответствующей ОСью не обладаю - проверить смогу только кросс-компиляцию. |
Сообщ.
#2
,
|
|
|
Ну, плюс тебе за это. |
Сообщ.
#3
,
|
|
|
Апдейт.
1) Добавлена сборка Лазаруса из исходников (не имея его в бинарном виде). 2) Чуть-чуть исправлен батник (странный косяк с опцией компилятора). 3) Добавлено про отладчик |
Сообщ.
#4
,
|
|
|
А по этим инструкциям не срабатывает?
wiki.lazarus.freepascal.org/Installing_Lazarus |
Сообщ.
#5
,
|
|
|
Не знаю, многое совпадает, но install самого ФП, например, не ставит исходники. Плюс там ничего не сказано про libgdb и gdb.exe. Сейчас попробую еще кое-что, но всё равно ручной работы до фига
Добавлено Неа. Попробовал make install sourceinstall PREFIX=..\FPInst - не ту структуру делает, что нужно. |
Сообщ.
#6
,
|
|
|
Цитата Fr0sT @ 3) Собираем сам компилятор CD fpcsrc\compiler make cycle %Target% %Opt% CD ..\.. В командной строке Windows XP нет команды make. Командная строка мне пишет: C:\fpcbuild\fpcbuild\fpcsrc\compiler>make cycle %Target% %Opt % "make" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Добавлено Если речь идет про какой-то файл с именем make , то в указанной папке (fpcsrc\compiler)такого тоже нет. |
Сообщ.
#7
,
|
|
|
Цитата 222222 @ В командной строке Windows XP нет команды make Цитата 2) Прописываем путь к имеющемуся FPC в Path: SET Path=<OldFPCDir>;%Path% Вообще я уже значительно переработал метод, теперь сборка без лишних телодвижений, практически полностью в автомате |
Сообщ.
#8
,
|
|
|
Цитата Fr0sT @ Цитата 222222 @ В командной строке Windows XP нет команды make Цитата 2) Прописываем путь к имеющемуся FPC в Path: SET Path=<OldFPCDir>;%Path% Вообще я уже значительно переработал метод, теперь сборка без лишних телодвижений, практически полностью в автомате Тогда почему Вы пишете, что конкретный путь станет: Цитата !!! Подставляем конкретное значение! Т.е. будет выглядеть как SET Path=D:\Coding\New_FPC\;%Path% В общем разобрался. А как сделать в автомате? Батником? Где его найти? |
Сообщ.
#9
,
|
|
|
Ну правильно, надо прописать в Path путь к бинарным утилитам, среди которых есть и make.
А батник пока не релизил, надо довести до ума. |
Сообщ.
#10
,
|
|
|
Я делал так: Скачал установщик Lazarus под Win32 с офиц.сайта, установил, скачал SVN-клиент Tortoise SVN, установил, обновил Lazarus из SVN-репозитария (многие рекомендуют эту ветку), пересобрал. Готово! Оптимальное соотношение новизна/глюки.
Суть в том, что инсталлятор сам прописывает лазарус в системе, включая пути, конфиги и т.п. Остается только обновить исходники из репозитария и пересобраться. |