Компиляция из SVN для Win32, используя MinGW/MSYS
 
В этом руководстве показано, как составить 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/)
MinGW среды с binutils 2.19.1 (из http://sourceforge.net/downloads/mingw)
Это то, что в настоящее время работает с исходным кодом 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

    • CC=<c:/path/to/gcc.exe>
(Полезно, если не используется по умолчанию в системе)
    • 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-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
    • 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, должен соответствовать этой версии точно.