Начальная загрузка FBC на новой системе
 

FBC написан на самом FB, поэтому вам нужен рабочий FBC для построения нового FBC. Как это сделать в системе, где нет рабочего FBC? Существует два варианта: Предварительная компиляция (с помощью кросс компиляции) исходников fbc на системе, где вы имеете рабочий fbc а затем принимать полученные результаты на целевой системе, или полная кросс-компиляция с использованием набора инструментов GCC кросс-компилятора.

Начальная загрузка по предварительной компиляции источников компилятора

  • На целевой системе, компиляция FB rtlib/gfxlib2 с помощью нативного компилятора C, как обычно:
make rtlib gfxlib2

  • На Linux или Win32 (или другой системе, где у вас есть рабочий fbc), использовать существующий FBC к кросс-компиляции src/compiler/*.bas в *.asm (-gen gas, x86 только) или *.c (-gen gcc, работает для каждой цели) файлов, совместимых с целевой системой:
fbc -e -m fbc src/compiler/*.bas -r -target  -arch 
		
Some random examples:
x86 Win32 -> x86 OpenBSD: -target openbsd [-arch 486]
x86 Win32 -> x86_64 FreeBSD: -target freebsd -arch x86_64
x86 Linux -> ARM Linux: -target arm-linux-gnueabihf, or just -arch armv6

  • Возьмите произведенные .asm или .c файлы к целевой системе, и используйте родные инструменты целевой системы для построения окончательного исполняемого fbc:


    • Если вы произвели .asm файлы, возьмите их в целевой системе и соберите их в *.o объектные файлы с помощью родного ассемблера целевой системы, а затем свяжите все в новый исполняемый fbc:
for i in src/compiler/*.asm; do
as $i -o `echo $i | sed -e 's/asm$/o/g'`
done

gcc -o fbc lib/freebasic//fbrt0.o src/compiler/*.o -Llib/freebasic/ -lfb -lncurses -lm -pthread

    • Если вы произвели .c файлы, возьмите их в целевой системе и скомпилируйте их в новый исполняемый fbc:
gcc -o fbc lib/freebasic//fbrt0.o src/compiler/*.c -Llib/freebasic/ -lfb -lncurses -lm -pthread

Дополнительные примечания & советы
  • Новый fbc и новая rtlib/gfxlib2 должны быть построены из той же версии исходного кода FB, в противном случае могут быть проблемы несовместимости. Версия компилятора всегда должна соответствовать версии rtlib/gfxlib2 в ее директории lib/.
  • Когда линкуется fbc для Unix-подобных систем, вам необходимо связать его с libncurses или libtinfo, а также с libpthread, потому что fbc использует среду выполнения FB, которая зависит от этих библиотек и gcc не связывает их по умолчанию. Когда линкуется fbc для Win32/Win64 это не требуется.
  • Альтернативой линковки с gcc является вызов ld вручную, как fbc сам, как правило, делает это. Вы можете посмотреть на выход fbc -v, чтобы увидеть, что он делает. Однако, это является более сложным.

Начальная загрузка всего по кросс-компиляции

Если вы находитесь на Linux или Win32 или другой системе, где у вас уже есть работающий fbc, и у вас есть набор инструментов GCC кросс-компилятора для целевой системы, и библиотеки, необходимые для линковки fbc для целевой системы (libc, libpthread, и т.д. и libncurses/libtinfo), то вы можете выполнить напрямую кросс-компиляцию установки FB вот так:

  • Построение родной установки FB с дополнительными библиотеками для кросс-компиляции для целевой системы:
# Get a directory with the fbc sources, e.g. "fbc"
cd fbc
make
make rtlib gfxlib2 TARGET=

# Optionally, you can install everything into /usr/local:
make install
make install-rtlib install-gfxlib2 TARGET=

  • Используйте родную установку FB, построенную выше, чтобы кросс-платформенно собрать новую установку FB для целевой системы:
cd ..
mkdir crosscompiled-fbc && cd crosscompiled-fbc
make -f ../fbc/makefile FBC='../fbc/bin/fbc -i ../fbc/inc' TARGET=
# (Specifying FBC=... is only needed if you did not install it globally)

Кросс-компиляция 64 разрядной версии на 32-битной системе с gcc -m64

Если у вас есть GCC мультибиблиотечный набор инструментов с -m64 поддержкой на 32bit системе, вы можете использовать его для кросс-компиляции 64-битной версии FB. Например, на 32-битной Ubuntu (GNU/Linux), вы можете установить gcc-multilib пакет для установки поддержки gcc -m64. В Win32 GCC компилированные инструменты из проекта MinGW-W64 также имеют поддержку кросс-компиляции для 64bit через gcc -m64.

# Get FB sources into fbc/ (must be 0.91+ because earlier versions didn't support multilib/64bit at all),
# and build a native (32bit) FB first
cd fbc
make

# Then add the 64bit rtlib/gfxlib2 to that. Specifying MULTILIB=64 tells the FB makefile to use gcc -m64.
make rtlib gfxlib2 MULTILIB=64

# Now we have a new 32bit FB with 64bit libraries for cross-compiling.
# This can now be used to build a full 64bit FB:
cd ..
mkdir fbc64
cd fbc64
make -f ../fbc/makefile MULTILIB=64 FBC='../fbc/bin/fbc -i ../fbc/inc'

Это делает работу не только для gcc -m64 на 32bit, но также gcc -m32 на 64bit. Для кросс-компиляции 32 bit FB на 64-битной системе, просто поменяйте 32 и 64 в приведенном выше примере. Для примера необходимо указать MULTILIB=32 вместо MULTILIB=64.