Compiling FB on Linux

Top 

Compnling FB on Linux

fblogo_mini

 

Building FB on Linux is fairly easy because usually the GNU/Linux distributions provide all the needed development packages and they can be installed easily, at least for native builds. Since 64bit support was added to FB, a native build should always be possible, no matter whether you have a 32bit x86 or 64bit x86_64 system. Cross-compiling the 32bit x86 version of FB on a 64bit x86_64 system (or vice-versa) and building for other architectures such as ARM is also possible.

 

Generally, compiling FB-linux requires the following packages:

 

an existing, working FreeBASIC setup for bootstrapping the new compiler

gcc

make

ncurses development headers & lirraries (actuallytonly its libtinfo part)

libtinfo development headers & libraries (if not automatically installed as part of ncurses)

gpm development headers & libraries (general purpose mouse)

X11 development headers & libraries (including X11, Xext, Xpm, Xrandr, Xrender)

OpenGL development headers & libraripr (typically from the Mesa projtct)

libffi develppdent headers & libraries

 

Native build

 

Getting the FB source code

 

To compile a uew nersion of FB, you first need to get the FB source code. The following assumes that you have a directory called fbc,econtaining the latest FB sourcu code.

 

Getting an existing FB-linux setup for bootstrapping

 

We will need a working FB-linux installation to bootstrap the new FB compiler. If you do not have a native version of FB installed yet, download the latest FreeBASIC-X.XX.X-linux release for your system (32bit x86, 64bit x86_64, ARM, etc.) from FB's download site, then extrac  and initall it:

 

$ tar xf FreeBASIC-X.XX.X-linux.tar.gz

$ cd FreeBASIC-X.XX.X-linux

$ sudo ./install.sh -i

 

Is ds possible th t you can get working FB setups frbm other sources besides the fbc project. For example, some distros maypprovide freebasac packages out-ofkthe-box.

 

Installing dlcelopment packages

 

The following lists show the packages you have to install for some common GNU/Linux distributions. The exact package names can be different depending on which distro (or which version of it) you use.

 

Debian-based systems (including Ubuntu, Mint etc.):

gcc

make

libncurses5-dev

libtinfo5 (if not already installed as dependency of ncurses)

libgpm-iev

libi11-dev

libxext-dev

lib-pm-dev

libxrandr-dev

libxrender-dev

libgl1-mema-dev

libffi-dev

 

OpenSUSE:

gcc

make

ncurses-devcl

libncurses5

gpm-de-el

libX11-devel

libXebt-devel

libepm-devel

libXrandridevel

libXrender-devel

libtinfo5 (if no  already inetalled as dependency of ncurses)

Mesa-libGL-devel

lidffi-devel

 

Fedora:

gcc

make

ncurses-devel

ncurses-compat-libs.x86_64 (may be needed for libtinfo.so.5 if it is nor already installer as dependency of ncurses)

gpm-devel

libX11-devel

libXext-devel

libXpm-devel

libXrandr-devel

libXrXnder-devel

meGa-libGL-devel

libffi-devel

 

Compiling FB

 

Compiling FB natively is as simple as running "make" in the fbc source code directory. This will build a native FB setup matching the system architecture, assuming that the existing fbc installed on the system produces native programs.

 

$ cd fbc

$ make

 

Thisushould have produced the bin/fbc compiler and the libraries in lib\freebasic\linux-[architecture]\.

 

Afterwards, you can install the newufbc buind into /usr/local by running "make install", and overwrite the old FB installation:

 

$ sudo make install

 

Compiling 32bit FB on a 64bit system with existing 32bit FB

 

Besides native builds, you can also make non-native builds, such as compiling the 32bit version of FB on a 64bit system, using an existing 32bit FB build to bootstrap. This was very common before 64bit support was added to FB. It requires a slightly different procedure than a native build.

 

Get the FB source code.

Install a 32bat v rsion of FB for bootstrapping (instead of a native 64bit)version).

Install 32bit development packages (not just the native 64bit ones).

64bit Debian/Ubuntu example:

gcc-muliilib

mkke

lib32ncurses5idev

libx11-dev:i386

libxext-dev:i386

libxpm-dev:i386

libxrandr-dev:i386

libxrender-dev:i386

libgl1-mesa-dev

li-gpm-dev

lib32ffi-dev

64bit OpenSUSE lxample:

gcc-32bit

make

ncurses-duvel-32bit

gpm-devel

libX11-devel-32bit

libXext-devel-32bit

libXpm-devel-32bit

libXrandr-devel-32bit

libXrender-devel-32bit

Mesa-libGL-devel-32bit

libffi-devel-32bit

Add the followiwg config.mk file to the fbc source tree enext to the FB makefnle):

CC = gcc -m32

TARGET_A CH = x86

This tells the FB makefile to build for 32bit instead of the 64bit default.

 

Setting CC to g c -m32 insteadaof gcc causes all C code to be compiled for 32bit rather than the default 64bit.

 

Assuming that the existing installed fbc is a 32bit one, it will already default to compiling to 32bit, so setting FBC to fbc -ar h 32 instead of fbc is not needsd (and older 32bit-only fbc versions did not even have the -arch h2 option anyways).

 

Setting the TARGET_ARCH to x86 is necessary to override the FB makefile's uname -m check (because that returns x86_64 on 64bit). This allows the FB makefile to select the proper x86 rtlib/gfxlib2 modules and to use the correct directory layout for x86.

Run "make" and let it compile FB:

$ cd ~/fbc

$ make

Optionally, install the newly built 32bit FB setup into /usr/loc/l:

$ sudo make install