Компиляция из SVN для DOS на Win32
 
В этом руководстве показано, как составить FreeBASIC DOS (компилятор и библиотеки) с помощью DJGPP и DOS версии FreeBASIC. На сегодняшний день кросс-компиляция (с помощью Win32 FBC с -target dos) не является необходимой, начиная с FBC версии 0.21.0 (возможно это будет непосредственно работать под DOS сейчас? ).

Настройка параметров окружающей среды

Выберите место для SVN FreeBASIC, например C:\FreeBASIC-dos. Далее проверьте текущую базу для разработки https://fbc.svn.sourceforge.net/svnroot/fbc/trunk/FreeBASIC в C:\FreeBASIC-dos используя SVN клиент.

Необходима рабочая установка FreeBASIC; в этом руководстве предполагается, что это в C:\FreeBASIC-0.21.1-dos, но конечно это может быть и в другом месте. Также можно использовать FB 0.20.0, и даже может быть более раннюю версию для компиляции текущего FB. Рабочий fbc должен быть указан в PATH, или вы можете указать FBC=C:/path/to/fbc вручную при конфигурации.

FreeBASIC(у) нужна конкретная установка DJGPP в настоящее время. Необходимые пакеты можно найти на домашней странице DJGPP. Загрузите DJGPP 2.03 (текущий) пакет, с djdev204.zip из DJGPP 2.04 (beta). Для большинства из следующих пакетов, один заканчивается в b для бинарных файлов необходим.
    • autoconf (acnf*.zip)
    • automake (amak*.zip)
    • binutils (bnu*b.zip, bnu*a.zip)
    • bash (bsh*.zip)
    • djdev (djdev*.zip) - получить djdev204.zip или поздние из каталога beta/
    • fileutils (fil*.zip)
    • gcc (gcc*.zip)
    • gpp (gpp*.zip)
    • grep (grep*.zip)
    • awk (gwk*.zip)
    • m4 (m4*.zip)
    • make (mak*.zip)
    • perl (perl*.zip)
    • sed (sed*.zip)
    • shellutils (shl*.zip)
    • textutils (txt*.zip)
Следуйте инструкциям DJGPP для настройки стандартной установки DJGPP. В настоящее время это сводится к:
    • Извлечь все в C:\DJGPP.
    • Добавьте в переменные среды имя "DJGPP":
DJGPP = C:\DJGPP\djgpp.env
Кроме того, вы должны скопировать
C:\DJGPP\lib\gcc\djgpp\4.42\libsupcxx.a
в
C:\DJGPP\lib\gcc\djgpp\4.42\libsupcx.a
потому что FBC ожидает короткие имена (возможно, эта проблема 8.3 имен файлов).

Добавьте C:\DJGPP\bin в PATH и проверьте что gcc реально сопоставляется из C:\DJGPP\bin\gcc.exe (тоже самое для binutils). В случае, если на win32 установлен MinGW или MSYS, возможно будет безопаснее временно удалить их параметры из PATH, или использовать пакетный скрипт:

set DJDIR=C:\djgpp
set DJGPP=%DJDIR%\djgpp.env

set PATH=%DJDIR%\bin;%PATH%
set PATH=C:\FreeBASIC-0.21.1-dos;%PATH%

cd C:\FreeBASIC-dos
cmd

Компиляция FreeBASIC

Введите следующие команды в командной строке DOS. Примечание: Bash DJGPP's могут быть использованы тоже, они содержат несколько ошибок, вызывающих некоторые проблемы с скриптом ./configure, но все равно это кажется, не делает разницы для построения FreeBASIC. Об плюсах bash: позволяет запускать сценарии настройки напрямую, без использования sh.

cd C:\FreeBASIC-dos

Скомпилируйте новый fbc.exe:

cd src\compiler\obj\dos
sh ../../configure --enable-standalone
make
make install
cd ..\..\..\..

Примечание:  ../../configure вывод должен сказать, что он строит для i386-pc-msdosdjgpp (а не с mingw).

Скомпилируйте новый libfb.a:

cd src\rtlib\obj\dos
sh ../../configure CFLAGS=-O2
make
make install
cd ..\..\..\..

Скомпилируйте новый libfbgfx.a:

cd src\gfxlib2\obj\dos
sh ../../configure CFLAGS=-O2
make
make install
cd ..\..\..\..

C:\FreeBASIC-dos теперь содержит новый fbc.exe,  C:\FreeBASIC-dos\lib\dos содержит новые fb/fbgfx библиотеки.

Создание нового дерева FreeBASIC

Несколько файлов должны копироваться в C:\FreeBASIC-dos дерево, с тем собрать FreeBASIC программы (и сам FreeBASIC снова; эти случаи отмечены "для восстановления").

Из C:\FreeBASIC-0.21.1-dos в C:\FreeBASIC-dos\lib\dos:
    • libc.a (Примечание: это не оригинал от DJGPP, мы используем модифицированную версию см. FreeBASIC/src/contrib/djgpp/crt0)
    • libintl.a (для восстановления)
    • libz.a (для восстановления)
Из C:\FreeBASIC-0.21.1-dos в C:\FreeBASIC-dos\bin\dos:
    • ar.exe
    • as.exe
    • ld.exe
Эти файлы должны быть скопированы из DJGPP в C:\FreeBASIC-dos дерево:

Из C:\DJGPP\lib\gcc\djgpp\<version> в C:\FreeBASIC-dos\lib\dos:
    • libgcc.a
    • libsupcx.a (Примечание: оригинальный файл называется libsupcxx.a, но мы используем короткую версию для FB, чтобы избежать проблем с длинными именами файлов)
Из C:\DJGPP\lib в C:\FreeBASIC-dos\lib\dos:
    • crt0.o
    • gcrt0.o
    • libbfd.a (для восстановления)
    • libemu.a
    • libiberty.a (для восстановления)
    • libm.a
Теперь вы можете использовать C:\FreeBASIC-dos вместо C:\FreeBASIC-0.21.1-dos для компиляции FB программ.

Перекомпиляция после обновления SVN или изменений в исходном коде

Для удобства можно восстановить компилятор и библиотеки (или просто изменить компоненты) в том же каталоге, что и прежде, используя те же команды, как раньше. Вместе с тем могут быть проблемы после обновления с созданием системы или с rtlib/gfxlib интерфейсом. Сборка FBC позволяет избежать проблем между FBC и runtime-библиотеками, но не всех проблем можно избежать при восстановлении в том же дерево. Более безопасным способом является использования двух отдельных FB каталогов (один из них является рабочей FB установкой, другой деревом для компиляции).

Полезные опции для построения rtlib и gfxlib

configure

    • CC=<c:/path/to/gcc.exe>
(Полезно, если не используете все, что находится в PATH)
    • RANLIB=<c:/path/to/ranlib.exe>
    • CFLAGS=<gcc compile options>
Полезно для переопределения по умолчанию "-O2 -g" и просто использовать "-O2", если вы не хотите отладочные символы.
Вы можете переадть их в makefile , но при передачи их для настройки они будут записаны в файл Makefile и вам не придется помнить о них в следующий раз.
make

    • AR=<c:/path/to/ar.exe>
(Переменная AR не пересылается в настоящее время, поэтому он должен быть передан в makefile)

Полезные опции для построения компилятора

configure

    • --disable-objinfo
Если указанный fbc не будет связан с libbfd/libiberty/libintl. Это может избежать много неприятностей во время компиляции fbc, за счет отключения objinfo функций
    • --enable-standalone (Это всегда используется для FreeBASIC-dos релиза)
Построит автономный FBC, можно запустить из FreeBASIC дерева. Так же по возможности binutils и библиотеки в FreeBASIC дереве.
    • FBC=<c:/path/to/fbc.exe>
make

    • DEBUG=1
fbc будет компилироваться с опцией -g. Полезно для отладки fbc.
Для примера:
make DEBUG=1
    • EXTRAERR=1
fbc будет компилироваться с опцией -exx. полезно для отладки fbc. В результате fbc будет работать медленнее.
    • FB_BFD=1 BFD_VER=<XXX>
В результате будет FBC с помощью FB libbfd заголовков, используя libbfd непосредственно, а не с помощью DJGPP C libbfd заголовков через C libbfd wrapper FBC по умолчанию . FB libbfd версия заголовков должна быть указана, например BFD_VER=217. libbfd.a, против которого будет связан этот fbc, должен соответствовать этой версии точно.