Компиляция FB на Windows
 

Подготовка

Получение исходного кода FB

Для компиляции новой версии FB, сначала необходимо получить исходный код FB. Предполагается, что у вас есть каталог с названием fbc, содержащий последний FB исходный код.

Установка набор инструментов MinGW-w64

В этом руководстве мы будем использовать 32 битный или 64 битный набор инструментов MinGW-w64 для создания 32-битной или 64-битной версии FB, соответственно. Пройдите на http://sourceforge.net/projects/mingw-w64/files/ и найдите скомпилированные инструменты Win64 или скомпилированные инструменты Win32 , в зависимости от того, что вы хотите составить 32-битную или 64-битную версию FB. Введите Personal Builds/mingw-builds/ подкаталог, выберите последнюю GCC версию, затем введите threads-win32/sjlj/ подкаталог и загрузите пакет инструментария оттуда.

Извлеките набор инструментов в новую папку C:\MinGW-w64 , таким образом в итоге вы получите C:\MinGW-w64\bin\gcc.exe.

Если вы знаете, что делаете, вы также можете использовать другой набор инструментов MinGW-W64, или даже один из различных проектов, таких как MinGW.org или TDM-GCC. У нас есть еще немного информации о выборе средств по MinGW на странице DevGccToolchainChoice.

Установка MSYS

MSYS (оригинальное ответвление Cygwin) даст Unix-подобную среду оболочки для Windows, в том числе GNU make, оболочку Bash и Unix командную строку инструментов, такие как cp и rm. Для FB мы должны запустить FB Makefile и тестовый набор FB.

Необходимые пакеты MSYS можно скачать и распаковать с помощью последней версии mingw-get установка из проекта MinGW.org.

Запустите инсталлятор и выберите каталог инсталляции C:\MinGW. Таким образом, это будет отдельно от C:\MinGW-w64, во избежание потенциальных конфликтов. Менеджер установки MinGW (C:\MinGW\bin\mingw-get.exe) после должен быть открыт автоматически. Используйте для установки mingw-developer-toolkit пакет BASIC из основного раздела Setup, нажав на окно слева имени пакета и выбора "Mark for Installation", затем выберите Installation -> Apply Changes из меню приложения.

Это должно установить наиболее часто используемые компоненты MSYS. Мы не хотим устаноавливать mingw32-base или mingw32-gcc-* пакеты здесь, потому что мы используем внешний набор инструментов MinGW-W64 вместо MinGW.org. Если вы не хотите использовать программу установки MinGW.org, вы также можете скачать пакеты MinGW/MSYS вручную из MinGW проектов с сайта загрузки.

В конечном счете, MSYS должен быть установлен в C:\MinGW\msys\1.0\. Теперь есть три важных каталога: C:\MinGW-w64\bin\, C:\MinGW\bin\ и C:\MinGW\msys\1.0\bin\. Все они должны быть добавлены к переменной PATH среды (в данном порядке), так чтобы программы, которые они включают были найдены при вызове из командной строки или из Makefile FB.

Для того чтобы избежать изменения системной PATH, вы можете использовать скрипт open-msys.bat приведенный ниже, чтобы открыть bash MSYS с необходимыми настройками PATH, каждый раз, вы должны использовать его:

set PATH=C:\MinGW\msys\1.0\bin;%PATH%
set PATH=C:\MinGW\bin;%PATH%
set PATH=C:\MinGW-w64\bin;%PATH%
C:\MinGW\msys\1.0\msys.bat

Получение libffi

FB rtlib исходный код зависит от заголовков libffi (ffi.h и ffitarget.h) , которые должны быть доступны в наборе инструментов gcc в папке include (C:\MinGW-w64\i686-w64-mingw32\include для 32 bit MinGW-w64 и C:\MinGW-w64\x86_64-w64-mingw32\include для 64 бит MinGW-w64). Кроме того, библиотека libffi.a потребуется позже при компиляции программ FB, которые используют Threadcall.

Готовые версии libffi доступны в fbc области загрузок.

Если вы не хотите использовать готовые версии, но предпочитаете компилировать libffi вручную, вместо этого, то это довольно просто. libffi использует автоутилиты (autoconf, automake, libtool) построения системы, таким образом соответствующие пакеты должны быть установлены для MinGW/MSYS. Откройте MSYS bash (с надлежащими настройками PATH).

  • 32бит:
$ ./configure
$ make
  • 64бит: Это требует работы вокруг MSYS' uname которая по-прежнему возвращает 32bit даже на 64-битных:
$ ./configure --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32
$ make

Это должно произвести libffi заголовки в подкаталоге include/  и собранную библиотеку в подкаталоге .libs/ . Вы можете затем скопировать их в соответствующие каталоги набора инструментов MinGW-w64, таким образом, чтобы gcc нашел их.

Автономная сборка (автономная FB)

Получение существующей установки FB для начальной загрузки

Нам понадобится рабочая установка FB-win32 для загрузки нового компилятора FB. Если у вас еще не установлен FB-win32, скачайте последний релиз FreeBASIC-X.XX.X-win32 с FB сайта загрузки. Он должен быть извлечен в C:\FreeBASIC-X.XX.X-win32.

Построение новой установки FB

Если вы хотите создать традиционную автономную FB-win32 установку как один из пакетов FreeBASIC-X.XX.X-win32, вам нужно установить переменную ENABLE_STANDALONE в FB makefile. Кроме того, для компиляции для 64 bit необходимо установить переменную TARGET_ARCH вручную, потому что MSYS' uname -m команда не поддерживает 64-бит и таким образом FB makefile будет неправильно определять систему. Предполагая, что FB источники расположены в C:\fbc, создайте файл C:\fbc\config.mk содержащий следующее:

  • 32бит:
ENABLE_STANDALONE = 1
  • 64бит:
ENABLE_STANDALONE = 1

# Manually set TARGET_ARCH to override uname check for 64bit
TARGET_ARCH = x86_64

Затем откройте MSYS bash используя скрипт .bat , упомянутый выше (с надлежащими настройками PATH), перейдите в каталог с FB исходным кодом, запустите "make" с FBC=... переменной, указывающей на существующий fbc.exe и пусть он компилируется:

$ cd /c/fbc
$ make FBC=C:/FreeBASIC-X.XX.X-win32/fbc.exe

Это должно создать компилятор fbc.exe и библиотеки lib\win32\ или lib\win64\ соответственно. Для выполнения этой новой установки FB, вам нужно добавить binutils (as.exe, ar.exe, ld.exe, dlltool.exe) в bin\win32\ и скопировать некоторые библиотеки MinGW в lib\win32\.

  • Скопируйте в C:\fbc\bin\win32 (32бит) или C:\fbc\bin\win64 (64бит):
    • C:\MinGW-w64\bin\{ar,as,ld,dlltool}.exe
    • GoRC.exe из http://www.godevtool.com/
  • Скопируйте в C:\fbc\lib\win32 (32бит) или C:\fbc\lib\win64 (64бит):
    • C:\MinGW-w64\[target]\lib\{crt2,dllcrt2,gcrt2}.o
    • C:\MinGW-w64\[target]\lib\lib{gmon,mingw32,mingwex,moldname}.a
    • C:\MinGW-w64\[target]\lib\lib{advapi32,gdi32,kernel32,msvcrt,user32,winmm,winspool}.a (переименовать lib*.dll.a если хотите)
    • C:\MinGW-w64\lib\gcc\[target]\[version]\{crtbegin,crtend}.o
    • C:\MinGW-w64\lib\gcc\[target]\[version]\libgcc.a
    • libffi.a (пакет готовых libffi или свою собственную сборку)
([target] относится к i686-w64-mingw32 для 32bit MinGW-w64 или x86_64-w64-mingw32 для 64bit MinGW-w64, и [version] - это номер версии gcc)

Если вам требуется , можно скопировать больше библиотек C:\MinGW-w64\lib\gcc\[target]\[version]\libsupc++.a C++ библиотеки, или другие Win32 API DLL библиотеки импорта из C:\MinGW-w64\[target]\lib\ .

Теперь новая установка FB должна быть готова к использованию. Вы можете использовать ее прямо из исходного дерева или скопировать ее в другое место. Ниже приведены соответствующие файлы и каталоги:

  • fbc.exe
  • bin/win32/ (32бит) или bin/win64/ (64бит)
  • inc/
  • lib/win32/ (32бит) или lib/win64/ (64бит)

Обычная сборка (как в Linux)

Получение существующей установки FB для начальной загрузки

Нам понадобится рабочая установка fbc для загрузки нового компилятора FB. Если вы не имеете еще установленный fbc, скачайте последний fbc-X.XX.X-mingw-w64-i686 (32бит) или fbc-X.XX.X-mingw-w64-x86_64 (64бит) пакет с FB сайта загрузки, и распакуйте его в каталог MinGW-w64 (C:\MinGW-w64) как пакет MinGW. Это добавит работающий fbc в вашу установку MinGW-w64.

Построение новой установки FB

Для того чтобы создать обычную (не автономную) сборку, просто скомпилируйте FB без указания ENABLE_STANDALONE. Однако, для того, чтобы скомпилировать для 64 бит необходимо установить переменную TARGET_ARCH вручную, потому что MSYS' uname -m команда не поддерживает 64-бит и таким образом FB makefile будет неправильно определять систему.

  • 32бит: не нужно config.mk.
  • 64бит: создать config.mk содержащий следующее:
# Manually set TARGET_ARCH to override uname check for 64bit
TARGET_ARCH = x86_64

Затем откройте MSYS bash используя скрипт .bat , упомянутый выше (с надлежащими настройками PATH), перейдите в каталог с FB исходным кодом, запустите "make" и пусть компилируется:

$ cd /c/fbc
$ make

Это должно создать компилятор bin/fbc.exe  и библиотеки lib\freebasic\win32\ или lib\freebasic\win64\ соотвественно.

При желании, вы можете скопировать эту установку в дерево C:\MinGW-w64 запустив "make install":

$ make install prefix=C:/MinGW-w64

Может быть полезным сохранить префикс переменной в config.mk, так чтобы запускать make install в будущем без необходимости беспокоиться об этом:

# config.mk:
prefix = C:/MinGW-w64

Установка FBC в каталог MinGW означает, что он действует, как если бы он был частью MinGW. Однако FBC можно использовать из исходного дерева, без установки его в другом месте. Он будет вызывать gcc -print-file-name=... для того, чтобы найти MinGW binutils и библиотеки.