- Релизы FB в форме скомпилированных двоичных файлов могут создаваться,
по крайней мере, для DOS, Linux и Win32.
- Пакеты DOS и Win32 традиционно являются автономными, их построение идет с
помощью Binutils и других библиотек
- Пакет Linux традиционно устанавливается в /usr или /usr/local и использует
binutils/libraries системы
- Все выпущенные fbc двоичные файлы должны быть созданы с той же датой,
которая имеет дату официального выпуска (сбивает с толку иметь множество fbc с
одинаковой версией, но с различными датами; трудно становится понять
действительно ли это та же версия или нет?)
- Пакеты Linux должны быть .tar.gz, пакеты Windows должны быть .zip, пакеты
DOS должны быть .zip с настройками байтов low word size/fast. Другие форматы
могут быть предложены дополнительно, но есть люди с более старыми системами
GNU/Linux, у которых нет поддержки .tar.lzma или .tar.xz, или с системами
Windows, которые не имеют архиватора 7-zip.
Упаковка и Манифесты
После того, как FB, binutils и внешние библиотеки были
скомпилированы и/или скопированы в дерево FB, может использоваться программа
contrib/release/pattern.bas для создания двоичных пакетов и соответствующих
деклараций из файлов в дереве FB.
$ fbc contrib/release/pattern.bas -g -exx
$ contrib/release/pattern {dos|linux|win32}
Манифесты в contrib/release/manifest/*.lst будут регенерированы. Это может
использоваться для проверки на дополнительные/недостающие файлы в сочетании
с возможностями Git's diff'ing. Включение/Исключение патернов в contrib/release/pattern.txt,
возможно понадобится подкорректировать.
Win32
Для сборки win32 могут использоваться MinGW.org, TDM-GCC
или MinGW-w64 инструменты.
MinGW.org, кажется, является самым "стандартным", но очевидно использует
обработку исключений DW2, которая приводит к огромным разделам .eh_frame в
коде, сгенерированном gcc, включая libgcc.a и т.д. Некоторые пользователи FB
это считают недопустимым чрезмерным увеличением размера.
TDM-GCC использовался для некоторых выпусков FB в прошлом с помощью GCC 4, в
то время как MinGW.org еще не использовался. Однако, в настоящее время у
MinGW.org есть версия GCC 4.
MinGW-w64 довольно новый, но он уже успел обновиться различными патчами ,
так что его так же можно считать "стандартным". При размышлении о
портировании FB для Windows 64 бита имело бы некоторый смысл использовать
MinGW-w64 инструменты для 32\64 битных версий.
SJLJ по сравнению с обработкой исключений DW2 действительно не имеет
значения для FB в данный момент, так как это не поддерживает исключения, но
это может иметь значение при использовании статических библиотек C++,
соединенных с программами FB, такие как ASpell, и это влияет на двоичные
файлы, сгенерированные gcc включая собственные объекты/библиотеки gcc (такие
как libgcc.a или crtbegin.o/crtend.o).
Даже при том, что ядро C ABI совместимо между различным Win32 GCC
инструментами, могут быть различия в libsupc ++. (которую использует FB),
или другими файлами, из-за конфигурации обработки исключений, и помимо этого
различные выпуски GCC имеют различия в ABI, например, 4.6 по сравнению с 4.7
измененными структурами, принимают __attribute__((ms_struct)) по умолчанию,
вместо __attribute__((gcc_struct)). Эти вещи могли вызвать проблемы между
различными выпусками FB и различным MinGW инструментами.
FreeBASIC-x.xx.x-win32
- Получите MinGW/MSYS установщик с MinGW.org
- и потенциально MinGW-w64 или TDM-GCC в отдельном каталоге
- MSYS обеспечивает Unix среду-оболочку
- MinGW предоставляет Autotools
- Установите PATH соответственно, самое главное для GCC/Binutils
- Скомпилируйте FB с ENABLE_STANDALONE
- Перекомпилируйте fbc из самого себя, по крайней мере, один раз, чтобы
гарантировать, что он использует свой собственный rtlib вместо одного из хостов
fbc
- Используйте contrib/libs/win32/build.sh скрипт для построения libffi.a и
других внешних библиотек
- Скопируйте gcc/binutils/gdb составленный с помощью contrib/libs/win32/build.sh
скрипта в bin/win32/
- альтернативно, скопируйте binutils/gdb из MinGW.org/MinGW-w64/TDM-GCC
установки в bin/win32/:
- as.exe, ar.exe, ld.exe, dlltool.exe, gprof.exe, gdb.exe
- плюс другие необходимые DLL (как libintl, libiconv, libexpat...)
- также gcc.exe и его ../libexec/gcc/ каталог для -gen gcc
- Скопируйте текущий GoRC.exe в bin/win32/
- Используйте lib/win32/makefile для копирования MinGW и Win32 API библиотек
из MinGW.org/MinGW-w64/TDM-GCC в lib/win32/
- Скопируйте GCC библиотеки из MinGW.org/MinGW-w64/TDM-GCC установщика в lib/win32/:
- libgcc.a, libgcc_eh.a (if it exists), libsupc++.a, crtbegin.o, crtend.o
- crt2.o, dllcrt2.o, gcrt2.o
- libmingw32.a, libmingwex.a, libmoldname.a, libgmon.a
- Запустите contrib/release/pattern.exe для создания манифестов
и пакета
- Проверьте манифесты и внесите коррективы, если это необходимо
fbc-x.xx.x-mingw32
Предназначено для того, чтобы быть сборкой FB для
MinGW.org инструментария, который может быть просто быть извлечен в дерево
MinGW как пакет MinGW.
- Получите MinGW.org/MSYS установку, плюс DirectX заголовки для gfxlib2
- Постройте libffi.a
../libffi-3.0.11/configure --disable-shared --prefix=C:/MinGW
make install
- Постройте FB
- Запустите contrib/release/pattern.exe mingw32 для создания
манифеста и пакета
- Проверьте манифест и внесите коррективы, если это необходимо
Linux
Создание двоичных файлов, которые работают над большей частью доступного
GNU/Linux дистрибутивов трудно, потому что даже при том, что они часто
подобны в целом, они все таки отличаются. Наиболее распространенная проблема
не соответстветствие glibc версии, т.е. fbc двоичный файл выполняется в
системе с более старым glibc, чем тот, на котором это было построено, в
итоге ошибка "glibc too old". Библиотека ncurses тоже не всегда такая же и в
итоге предупреждение "`ospeed' has different size, consider re-linking" при
выполнении fbc. Вот почему выпуски Linux обычно создавались в достаточно
старой системе GNU/Linux, чтобы позволить fbc работать под Debian 4 и 5 и
текущими версиями Ubuntu (особенно LTSs), Fedora и OpenSUSE.
FreeBASIC-x.xx.x-linuxmusl
С FB версии 0.24 есть возможность создать статические
двоичные файлы ELF, используя musl libc вместо glibc, который должен
предотвратить упомянутые выше проблемы. Другой альтернативный libc's мог бы
работать также, хотя я (dkl) протестировал только musl libc и dietlibc, и
musl работал почти без проблем, в то время как компиляция rtlib с dietlibc
потребовала большего количества корректировок. Кроме того, получение rtlib
построения, выливается в другую большую проблему предоставления необходимых
целевых библиотек.
libc & Ко (включая crt{1,i,n}.o) легко создать из musl источников, но
правильная компиляция GCC, с получением libgcc, libsupc ++ и crtbegin.o/crtend.o
требует некоторого опыта. К счастью есть сценарий для создания musl libc GCC
кросс-компилирующих инструментов доступный из https://github.com/GregorR/musl-cross.
Сценарий contrib/libs/linuxmusl/build.sh используется для того, чтобы
создать целую статически соединенную установку FB, используя musl libc,
включая статически слинкованный binutils и gcc и тонны внешних библиотек.
Это привело к пакету FB-linuxmusl.
- Архив с исходными кодами FB должен быть доступен в contrib/libs/src/
- После запуска скрипта contrib/libs/linuxmusl/build.sh , он будет работать в
текущем каталоге
- Он должен создать каталог fbc-static, содержащий FB дерево со статически
связанным FBC, и всеми другими, построенными файлами и библиотеками
- Запустите contrib/release/pattern linuxmusl для создания
манифестов и пакетов
- Проверьте манифест и внесите коррективы, если это необходимо
FreeBASIC-x.xx.x-linux
- Выберите дистрибутив
- Постройте FB
- Запустите contrib/release/pattern для создания манифестов и
пакетов
- Проверьте манифест и внесите коррективы, если это необходимо
DOS
С DJGPP выберите между последней версией CVS или
несколько устаревшей бета-версией DJGPP 2.04. Компиляция DJGPP из CVS не
является большой проблемой:
- Получите DJGPP 2.04 установку в качестве базы
- Получите & постройте DJGPPCVS с ("make" в src каталоге)
- Скопируйте все пакеты (gcc/binutils/etc.) кроме старой djdev (libc, libm, headers,
др.) в DJGPP CVS дерево
- Удалите DJGPP 2.04 установку
- И используйте CVS версию на этом месте
FreeBASIC-x.xx.x-dos
- Получите DJGPP установщик, смотрите как это делается в разделе DOS
страницы DevBuild
- Постройте FB с опцией ENABLE_STANDALONE
- Сокпируйте binutils/gdb из DJGPP в bin/dos/:
as.exe, ar.exe, ld.exe, gprof.exe, gdb.exe
- Скопируйте libs из DJGPP в lib/dos/:
- crt0.o, gcrt0.o
- libemu.a, libm.a
- libgcc.a, libsupcx.a (переименуйте из libsupcxx.a)
- Сценарий contrib/libs/dos/build.sh может также использоваться для
кросс-компиляции внешних библиотек, используя DJGPP кросс-компилятор
- Запустите contrib/release/pattern.exe dos для создания манифестов
и пакетов
- Проверьте манифест и внесите коррективы, если это необходимо
fbcxxxxb.zip
Это предназначено, чтобы быть сборкой FB для DJGPP,
который в состоянии просто быть извлеченным в дерево DJGPP как пакет DJGPP.
- DJGPP установить как для FreeBASIC-x.xx.x-dos релиза
- Построить FB
- Запустить contrib/release/pattern.exe djgpp для создания
манифестов и пакетов
- Проверьте манифест и внесите коррективы, если это необходимо
FB руководство/документация
- Смотрите также doc/fbchkdoc/readme.txt и doc/manual/readme.txt
- Получить MySQL, libcurl, libaspell, libpcre
- Построить вики инструменты:
cd doc/libfbdoc
make
cd ../fbdoc
make
cd ../fbchkdoc
make
cd ../makefbhelp
make
- Обновите кэш вики (копия форума *.wakka файлов)
cd doc/manual
rm -f cache/*
make refresh
- Восстановить PrintToc страницу:
cd doc/fbchkdoc
./mkprnttoc -web
- Восстановить CompilerErrMsg страницу:
cd doc/fbchkdoc
./mkerrlst
fbc mkerrtxt.bas -exx
./mkerrtxt > errors.wakka
Скопируйте список ошибок из errors.wakka в doc/manual/cache/CompilerErrMsg.wakka
и обновите онлайновую Wiki также.
- Обновите примеры Wiki в examples/manual/(можете очистить
старые сначала, удалить эти удаленные из Wiki)
cd doc/fbchkdoc
./getindex -web
./samps extract @PageIndex.txt