На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
В этом разделе можно создавать темы, которые относятся к поколению 32-битных компиляторов.
Здесь решаются вопросы портирования кода из старого доброго Турбо Паскаля в FPC, TMT, VP, GPC компиляторы, а также особенностей программирования на них для Windows/Linux и других ОС.
Указывайте тип компилятора, его версию, а также платформу (Windows/Linux/..) компиляции, другими словами, Target.
Модераторы: volvo877
  
> Сборка FPC и Lazarus из SVN daily snapshot , Мой опыт + батник для автоматизации + некоторые подводные камни
    Итак, после долгих и кровопролитных боёв я всё-таки одолел эту басурманскую банду - ФП и Лазарус - и заставил их собраться. Что больше всего взбесило и вынесло мне мозг - это что нигде нет нормального мануала по данному вопросу! Везде ограничиваются 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 :wall: . Распаковываем содержимое в <NewFPCTmpDir>\fpcsrc\libgdb

    Action!
    1) Запускаем командную строку в директории <NewFPCTmpDir>
    2) Прописываем путь к имеющемуся FPC в Path:
    ExpandedWrap disabled
      SET Path=<OldFPCDir>;%Path%

    !!! Подставляем конкретное значение! Т.е. будет выглядеть как SET Path=D:\Coding\New_FPC\;%Path%
    3) Сохраняем опции и целевую платформу:
    ExpandedWrap disabled
      SET Opt=OPT="-gl"
      SET Target=OS_TARGET=win32 CPU_TARGET=i386

    3) Собираем сам компилятор
    ExpandedWrap disabled
      CD fpcsrc\compiler
      make cycle %Target% %Opt%
      CD ..\..

    4) Собираем дистрибутив
    ExpandedWrap disabled
      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 хоть и собирает исходники, но не берёт бинарники. Очень печально. Поэтому есть два способа: либо выполнить также
    ExpandedWrap disabled
      make sourcezip %Target% %Opt%

    и распаковать получившуюся прорву файлов в <NewFPCDir>, либо просто и без затей скопировать папки fpsrc\rtl и fpsrc\packages в <NewFPCDir>\sources. Я предпочёл второе.
    Итак, копируем в <NewFPCDir> папки fpsrc\rtl и fpsrc\packages.

    7) Думаете, всё? Щазз. Одно из странных требований FPC - жестко прописанные пути к себе самому в конфиге. Да и сам конфиг тоже требуется. Поэтому идём в <NewFPCDir>\bin\i386-win32 и запускаем следующую команду:
    ExpandedWrap disabled
      fpcmkcfg.exe -d "basepath=<NewFPCDir>" -o .\fpc.cfg

    Это создаст новый конфиг с нужными путями.

    8) Получаем свежие исходники Лазаруса (только из SVN, т.к. для него почему-то слепков не делают). Копируем исходники в <NewLazDir>.

    9) Запускаем командную строку в папке <NewLazDir> и выполняем команды:
    ExpandedWrap disabled
      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, хотя за каким лядом там что-то анзипить - для меня загадка. Всё решилось распаковкой исходного дистрибутива в чистую папку.

    Да, и обещанный батник. Был написан, чтобы автоматизировать самую дурную часть процесса.
    ExpandedWrap disabled
      :: 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%):
    ExpandedWrap disabled
      build clean|make W32|make W64


    Сборку под 64 еще потестирую, но т.к. соответствующей ОСью не обладаю - проверить смогу только кросс-компиляцию.
    Сообщение отредактировано: Fr0sT -
      :scratch:
      Ну, плюс тебе за это. :)
        Апдейт.
        1) Добавлена сборка Лазаруса из исходников (не имея его в бинарном виде).
        2) Чуть-чуть исправлен батник (странный косяк с опцией компилятора).
        3) Добавлено про отладчик
          А по этим инструкциям не срабатывает?
          wiki.lazarus.freepascal.org/Installing_Lazarus
            Не знаю, многое совпадает, но install самого ФП, например, не ставит исходники. Плюс там ничего не сказано про libgdb и gdb.exe. Сейчас попробую еще кое-что, но всё равно ручной работы до фига

            Добавлено
            Неа. Попробовал make install sourceinstall PREFIX=..\FPInst - не ту структуру делает, что нужно.
              Цитата 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)такого тоже нет.
              Сообщение отредактировано: 222222 -
                Цитата 222222 @
                В командной строке Windows XP нет команды make


                Цитата
                2) Прописываем путь к имеющемуся FPC в Path:
                SET Path=<OldFPCDir>;%Path%


                Вообще я уже значительно переработал метод, теперь сборка без лишних телодвижений, практически полностью в автомате
                  Цитата Fr0sT @
                  Цитата 222222 @
                  В командной строке Windows XP нет команды make


                  Цитата
                  2) Прописываем путь к имеющемуся FPC в Path:
                  SET Path=<OldFPCDir>;%Path%


                  Вообще я уже значительно переработал метод, теперь сборка без лишних телодвижений, практически полностью в автомате

                  Тогда почему Вы пишете, что конкретный путь станет:
                  Цитата

                  !!! Подставляем конкретное значение! Т.е. будет выглядеть как SET Path=D:\Coding\New_FPC\;%Path%

                  В общем разобрался. А как сделать в автомате? Батником? Где его найти?
                    Ну правильно, надо прописать в Path путь к бинарным утилитам, среди которых есть и make.
                    А батник пока не релизил, надо довести до ума.
                      Я делал так: Скачал установщик Lazarus под Win32 с офиц.сайта, установил, скачал SVN-клиент Tortoise SVN, установил, обновил Lazarus из SVN-репозитария (многие рекомендуют эту ветку), пересобрал. Готово! Оптимальное соотношение новизна/глюки.
                      :whistle:

                      Суть в том, что инсталлятор сам прописывает лазарус в системе, включая пути, конфиги и т.п. Остается только обновить исходники из репозитария и пересобраться.
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0425 ]   [ 16 queries used ]   [ Generated: 28.03.24, 20:40 GMT ]