В этом руководстве показано, как составить win32 FreeBASIC (компилятор и
библиотеки) с помощью MinGW/MSYS и FreeBASIC версии win32.
Настройка среды
Выбрать место для SVN FreeBASIC, например
C:\FreeBASIC.
Далее проверить текущую разрабатываемую базу https://fbc.svn.sourceforge.net/svnroot/fbc/trunk/FreeBASIC
в
C:\FreeBASIC используя SVN клиент.
Необходима существующая рабочая сборка FreeBASIC; в этом руководстве
предполагается, что это в C:\FreeBASIC-0.21.1-win32, но конечно это может
быть и в другом месте. Также можно использовать FB 0.20.0 и возможно даже
более ранние версии для компиляции текущего FB. Путь до рабочего fbc должен
быть указан в переменной
PATH, или вам нужно
задать это вручную при конфигурировании:
FBC=C:/path/to/fbc .
MinGW и MSYS можно найти на их странице Sourceforge и http://www.mingw.org
/.
MinGW/MSYS разделены на множество пакетов, представляющих отдельные
инструменты. «Основные» (GCC, binutils, mingw
runtime,
библиотеки Windows API) можно найти на Sourceforge. Для загрузки и
извлечения необходимых пакетов можно использовать установщик,
предоставляемый MinGW. Помимо MinGW GCC порта, также существует
TDM-GCC,
который может быть использован вместо MinGW GCC. TDM-GCC представляется
более стабильным\ недавно обновленным, по сравнению с MinGW GCC.
Необходимые пакеты MinGW в целом:
- gcc-core
- gcc-g++
- binutils
- mingwrt
- w32api
- make
Это пакеты, используемые для создания релиза
FreeBASIC 0.21:
TDM-GCC 4.4.1 (из http://sourceforge.net/downloads/tdm-gcc/)
- gcc-4.4.1-tdm-2-core.tar.gz (ссылка)
- gcc-4.4.1-tdm-2-g++.tar.gz (ссылка)
MinGW среды с binutils 2.19.1 (из http://sourceforge.net/downloads/mingw)
- binutils-2.19.1-mingw32-bin.tar.gz (ссылка)
- mingwrt-3.17-mingw32-dev.tar.gz (ссылка)
- mingwrt-3.17-mingw32-dll.tar.gz (ссылка)
- w32api-3.14-mingw32-dev.tar.gz (ссылка)
- make-3.81-20090914-mingw32-bin.tar.gz (ссылка)
- gettext-0.17-1-mingw32-dev.tar.lzma (для libintl.a) (ссылка)
Это то, что в настоящее время работает с
исходным кодом FreeBASIC. Текущая GCC (например, GCC 4.5.0) может
потребовать дополнительную работу для компиляции FreeBASIC, если
FreeBASIC не был обновлен до этой версии. Например, libgcc.a от MinGW в
GCC 4.5.0 в настоящее время требует libgcc_eh.a , с которой при
компиляции FBC могут возникнуть проблемы при линковке. TDM-GCC 4.5.0
должен работать, потому что он не требует libgcc_eh. Предыдущие версии
MinGW должны работать тоже нормально (например GCC 3.4.5 с Binutils
2.16/2.17).
MinGW/TDM-GCC пакеты, как предполагается, извлечены в C:\MinGW, и MSYS
должен быть установлен в C:\msys\1.0. Вы должны добавить C:\MinGW\bin
в переменную PATH, таким образом, gcc & co будет найден. Если Вы
добавляете C:\msys\1.0\bin в вашу PATH, вы можете собрать
FreeBASIC из cmd.exe, вместо того, чтобы использовать оболочку MSYS.
Чтобы собрать gfxlib FreeBASIC, необходимы заголовки DirectX в C:\MinGW\include,
а именно ddraw.h и dinput.h. Вы можете получить
заголовки отсюда: http://alleg.sourceforge.net/files/dx80_mgw.zip
Компиляция FreeBASIC
Откройте MSYS оболочку и введите следующие команды. Можно
также использовать cmd.exe/DOS; может потребоваться использовать обратную
косую черту вместо прямой косой черты в командах cd и вызвать
../../configure скрипты через
sh ../../configure.
cd C:/FreeBASIC
Скомпилировать новый fbc.exe:
cd src/compiler/obj/win32
../../configure --enable-standalone
make
make install
cd ../../../..
Скомпилировать новые libfb.a и libfbmt.a:
cd src/rtlib/obj/win32
../../configure CFLAGS=-O2
make
make MULTITHREADED=1
make install
cd ../../../..
Скомпилировать новую libfbgfx.a:
cd src/gfxlib2/obj/win32
../../configure CFLAGS=-O2
make
make install
cd ../../../..
C:\FreeBASIC теперь содержит новый fbc.exe, в то время как C:\FreeBASIC\lib\win32
содержит новые библиотеки fb/fbmt/fbgfx.
Создание нового применимого дерева FreeBASIC
Несколько файлов должны быть скопированы в каталог C:\FreeBASIC
чтобы собирать программы FreeBASIC (и сам FreeBASIC заново; те случаи
отмечены с "для пересборки").
Из C:\FreeBASIC-0.21.1-win32 в C:\FreeBASIC\bin\win32:
- ar.exe
- as.exe
- dlltool.exe
- ld.exe
- GoRC.exe
Из C:\MinGW\lib\gcc\mingw32\4.4.1 в C:\FreeBASIC\lib\win32:
- crtbegin.o
- crtend.o
- libgcc.a
- libsupc++.a
Из C:\MinGW\lib в C:\FreeBASIC\lib\win32:
- crt2.o
- dllcrt2.o
- gcrt2.o
- libadvapi32.a
- libbfd.a (для пересборки)
- libgdi32.a
- libgmon.a
- libiberty.a (для пересборки)
- libintl.a (для пересборки)
- libkernel32.a
- libmingw32.a
- libmingwex.a
- libmoldname.a
- libmsvcrt.a
- libuser32.a
- libwinmm.a
- libwinspool.a
Библиотеки advapi32, gdi32, kernel32, msvcrt, user32, winmm
и winspool могут также быть переименованы в *.dll.a вместо *.a если
нужно.
Теперь Вы можете использовать C:\FreeBASIC вместо C:\FreeBASIC-0.21.1-win32
для компиляции FB программ.
Вы можете скопировать больше библиотек Windows
API (или другие), если нужно.
Перекомпилирование после обновлений SVN или изменений
исходного кода
Для удобства можно восстановить компилятор и библиотеки
(или просто изменить компоненты) в том же каталоге, что и прежде, используя
те же команды, как раньше. Вместе с тем могут быть проблемы после обновления
с созданием системы или с rtlib/gfxlib интерфейсом. Сборка FBC позволяет
избежать проблем между FBC и runtime-библиотеками, но не всех проблем можно
избежать при восстановлении в том же дерево. Более безопасным способом
является использования двух отдельных FB каталогов (один из них является
рабочей FB установкой, другой деревом для компиляции).
Полезные опции при построении rtlib и gfxlib
configure
(Полезно,
если не используется по умолчанию в системе)
- 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-win32 релиза)
Построит автономный FBC, который можно
запустить из FreeBASIC каталога. Он будет искать binutils и библиотеки в
каталоге FreeBASIC.
- --prefix=C:/path/to/somewhere
Префикс/usr/local изменяет что-то другое. Полезно только для не
автономной (non-standalone) сборки.
Для примера:
../../configure --prefix=C:/FreeBASIC
При
install.sh -i будет установлен в C:\FreeBASIC вместо /usr/local
(и fbc будет использовать C:\FreeBASIC вместо /usr/local для поиска binutils,
библиотек и заголовков).
Примечание: MSYS maps
/usr/local в
C:\msys\1.0\local.
- --enable-crosscomp-<target>
FBC будет составлен с поддержкой кросс-компиляции для указанной цели. На
самом деле для кросс-компиляции потребуются дополнительные binutils и
библиотеки в каталогах FreeBASIC/bin/<target> и FreeBASIC/lib/<target>.
Кроме того это может работать только со сборкой
fbc
standalone.
Для примера:
../../configure --enable-crosscomp-dos
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, должен соответствовать этой версии точно.