В этом руководстве показано, как составить 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:
Эти файлы должны быть скопированы из 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
(Полезно,
если не используете все, что находится в PATH)
- RANLIB=<c:/path/to/ranlib.exe>
- CFLAGS=<gcc compile options>
Полезно для переопределения по умолчанию "-O2 -g" и просто использовать "-O2",
если вы не хотите отладочные символы.
Вы можете переадть их в makefile , но при передачи их для настройки они
будут записаны в файл Makefile и вам не придется помнить о них в
следующий раз.
make
(Переменная AR не пересылается в настоящее время, поэтому он должен быть
передан в makefile)
Полезные опции для построения компилятора
configure
Если указанный
fbc не будет связан с libbfd/libiberty/libintl.
Это может избежать много неприятностей во время компиляции fbc, за счет
отключения
objinfo функций
- --enable-standalone (Это всегда
используется для FreeBASIC-dos релиза)
Построит автономный FBC, можно запустить из FreeBASIC дерева. Так же по
возможности binutils и библиотеки в FreeBASIC дереве.
make
fbc
будет компилироваться с опцией
-g. Полезно для отладки fbc.
Для примера:
make DEBUG=1
fbc
будет компилироваться с опцией -exx. полезно для отладки fbc. В
результате fbc будет работать медленнее.
В
результате будет FBC с помощью FB libbfd заголовков, используя libbfd
непосредственно, а не с помощью DJGPP C libbfd заголовков через C libbfd
wrapper FBC по умолчанию . FB libbfd версия заголовков должна быть
указана, например BFD_VER=217. libbfd.a, против которого будет
связан этот fbc, должен соответствовать этой версии точно.