Compile In Linux

From FreeOrionWiki
Revision as of 18:29, 28 November 2010 by OndrejR (Talk | contribs) (GiGi requires Boost 1.44)

Jump to: navigation, search

Each linux distribution will come with varying components already installed, although some libraries may be older than the version required by FreeOrion. Hopefully the notes below will help to identify what is required for your particular distribution.


Compiler

Required compiler is gcc and g++ in version 4.3.3 or above.

Kernel

If you compile using kernel 2.6.22 or above, your binary will likely not run on any other system having a lower numbered kernel version. This is due to a feature called "eventfd" which boost uses if a kernel 2.6.22 or above is found.

To avoid this incompatibility, you can specify CPPDEFINES="BOOST_ASIO_DISABLE_EVENTFD" as a parameter to scons to disable usage of eventfd.

This issue should not be a problem at all if you don't share your binaries.

Platform specifics

Ubuntu (Maverick and Lucid)

To build gigi or FreeOrion you first need to install the following packages using Synaptic (you will need to have the Universe repository included):

  • build-essential
  • pkg-config
  • python2.6-dev
  • cmake
  • libltdl3-dev
  • subversion
  • libfreetype6-dev
  • libsdl1.2-dev
  • graphviz
  • graphviz-dev
  • libalut-dev
  • libvorbis-dev
  • libois-dev
  • libopenal-dev
  • libogre-dev

You can install all of these (including dependencies) from the command line using this:

sudo apt-get install build-essential subversion pkg-config libltdl3-dev cmake
sudo apt-get install python2.6-dev libfreetype6-dev libsdl1.2-dev graphviz graphviz-dev libalut-dev libvorbis-dev libois-dev libtiff4-dev libopenal-dev libogre-dev

Bullet 2.73(or later), which is required to compile, is not in the official Ubuntu repository.

Ubuntu Maverick Boost

sudo apt-get install libboost-dev libboost1.42-all-dev --install-recommends

Ubuntu Lucid Boost

You have to compile required version of Boost(in Lucid there is no version 1.42 or later) or get it from some repository.

Debian

Same as Ubuntu, but Bullet 2.73(or later), which is required to compile, is not in Debian repository. Also remove sudo from all commands and run these commands under root(to login type su). Ogre3D in required version is available only from Squeeze up.

Lenny

Lenny provides version 1.35 of boost. You have to compile version 1.42 (or later) yourself.

Squeeze (testing) & Sid (unstable)

You can install Boost and Ogre3D with command(under user root):

apt-get install libboost-dev libboost1.42-all-dev --install-recommends

Ogre3D

Packages

From Debian Squeeze and Ubuntu Lucid up there is no need to do next Ogre3D steps. However Debian Lenny does not provide ogre-dev binary package in required version. One can be found from http://www.cazfi.net/deb or in Andrew Fenn's repository.

(sudo) add-apt-repository ppa:andrewfenn
(sudo) apt-get install libogre-dev

and install new Ogre3D. If you prefer to compile Ogre3D yourself, read on.

Ogre3D requirements

Ubuntu and Debian

Install Ogre3D requirements

(sudo) apt-get install automake
(sudo) apt-get install libzzip-dev libfreeimage-dev x11proto-xf86vidmode-dev libxxf86vm-dev
(sudo) apt-get install libpcre3-dev libfreetype6-dev libxrandr-dev libxaw7-dev libmng-dev libglew1.5-dev libxt-dev

Compiling

Download Ogre3D sources and unpack them. Supported compiler g++ and gcc versions is only version 4.3 or 4.4.

g++ --version

and

gcc --version

should return version 4.3 or 4.4

Compile Ogre3D with

aclocal
./bootstrap
./configure
make

and install with:

(sudo) make install
(sudo) ldconfig

GiGi

Before attempting to build FreeOrion you will first need to build and install the GiGi library. Before building GiGi you also need Ogre installed.

The GiGi source should be automatically downloaded from SVN along with the FreeOrion source code. However GiGi now requires Boost 1.44 which is not common in linux distributions, therefore is easier use revision 853 of GiGi:

cd freeorion/FreeOrion/GG
svn update -r 853

Change into the GiGi directory and build the library:

cd freeorion/FreeOrion/GG
cmake -DBUILD_TUTORIALS=off .
make
(sudo) make install
(sudo) ldconfig

There is an older SCons build system which you can try, but is not guaranteed to be up to date:

cd freeorion/FreeOrion/GG
scons configure debug=0
scons debug=0
(sudo) scons install
(sudo) ldconfig

Add line as root

/usr/local/lib

to file /etc/ld.so.conf

Bullet

Bullet debian packets for some Debian/Ubuntu releases and architectures can be found from http://www.cazfi.net/deb/

Building Bullet

Install Bullet compilation requirements

(sudo) apt-get install freeglut3-dev

After downloading and unpacking downloaded bullet archive, compile it with:

cmake -D BUILD_SHARED_LIBS=true .
make

and install with:

(sudo) make install
cd /usr/local/lib
(sudo) ln -s libBulletCollision.so libbulletcollision.so
(sudo) ln -s libBulletDynamics.so libbulletdynamics.so
(sudo) ln -s libLinearMath.so libbulletmath.so
(sudo) ldconfig

Symlinks libbulletcollision.so, libbulletdynamics.so and libbulletmath.so are required to create because bullet build system is inconsistent on different platforms.

FreeOrion

Ogre3D configuration

  • Create symlinks of Ogre plugins to locations where plugins are installed /usr/lib/OGRE (from repository Ogre3D) or /usr/local/lib/OGRE (compiled Ogre3D):
cd freeorion/FreeOrion
ln -s /usr/lib/OGRE/Plugin_OctreeSceneManager.so  .
ln -s /usr/lib/OGRE/Plugin_ParticleFX.so  .
ln -s /usr/lib/OGRE/RenderSystem_GL.so .
ln -s /usr/lib/OGRE/Plugin_BSPSceneManager.so .
ln -s /usr/lib/OGRE/Plugin_OctreeZone.so .
ln -s /usr/lib/OGRE/Plugin_PCZSceneManager.so .
  • or change Ogre3D plugin folder location in file ogre_plugins.cfg to where OGRE libs are installed(need to be done after every FreeOrion compilation):
PluginFolder=/usr/lib/OGRE

Graphviz patch for version 2.26(from Debian Squeeze and Ubuntu Maverick up)

cd freeorion/FreeOrion
cd ..
patch -p0 <graphviz.patch
rm graphviz.patch

where graphiz.patch is file from this patch saved to directory freeorion

Compiling FreeOrion

After GiGi is compiled and installed, compile FreeOrion:

cd freeorion/FreeOrion
cmake .
make

Or, using the older SCons build system:

cd freeorion/FreeOrion
scons configure debug=0
scons debug=0

Updating FreeOrion

When improvements have been made to FreeOrion, you should keep it up to date with:

cd freeorion/FreeOrion
svn update

This should update GG and FreeOrion from subversion. After compiling and installing GG compile FreeOrion.

Clean After Dependency Changes

It may be necessary to clean your old build before rebuilding GiGi or FreeOrion after updates that make changes to dependencies or versions of dependencies used, such as Boost. Do this in FreeOrion and GG directory:

rm CMakeCache.txt
make clean

Or, using the SCons build:

scons --clean

...and delete all files that have extension .cache

User stories

Compilation Errors

Bogus build errors

You may see errors during the build process like this:

-- Build platform: linux
-- Configuring GiGi
-- Configuring GiGiSDL
-- Configuring GiGiOgre
-- checking for one of the modules 'OGRE'
Warning: Ogre could not be found. Disabling the Ogre build.
-- Configuring Ogre OIS Input Plugin
-- checking for one of the modules 'OIS'
Warning: OIS could not be found. Disabling the OIS build.
-- Configuring Tutorials
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
Warning: Doxygen could not be found. Disabling the documentation build.
-- Configuring done
-- Generating done

These failed messages refer to cmake not finding an installed package for these components.

Cmake can't find libraries/dependencies

If cmake is not able to find a library (e.g. Ogre, OIS, etc) that is installed, please see this thread

SCons can't find libraries/dependencies

If SCons is not able to find a library (e.g. Boost, GiGi, etc) that is installed, you need to be certain SCons is looking in the right directories. Your distribution may install the library in an unexpected location, or you may have manually installed the library in a non-standard directory (e.g. /home/user/freeorion/Boost). You will need to configure scons to look in these additional directories. The command:

scons -h

lists the command-line options for SCons, including how to configure dependency directories. The command (add or remove options to match your needs):

scons configure prefix=/usr/local/freeorion with_boost_include=/usr/local/include/boost with_ogre_include=/usr/include/OGRE

will store these options permanently in the file options.cache. Run configure again, or edit options.cache, to change the settings.

boost 1.42 and higher

  • Scons can't find boost library. Then you have to tell scon to use mt version of boost with commands:
scons boost_lib_suffix=-mt debug=0 --config=force
  • If in your distribution is only newer boost library(boost 1.42 is missing) and scons can't find this library with above suffix, see this forum post

no matching function for call to 'swap(adobe::version_1::any_regular_t&, adobe::version_1::any_regular_t&)'

  • Upgrade compiler gcc and g++ at least to version 4.3.3 or
  • Change line 734 of GG/adobe/any_regular.hpp from
swap(r, result);

to

std::swap(r, result);

Runtime Errors

Segmentation Fault

If after compiling everything, you run freeorion and get a segmentation fault:

$ ./freeorion
Segmentation fault
  • Be certain that currently installed driver for your graphic card supports OpenGL 2.0 or later
  • You might be mixing dependencies compiled with different versions of GCC or different optimization level for Ogre, GiGi and FreeOrion. See this post
  • You have graphic card which doesn't support shader model 3 or above(Nvidia 6600 and above have, some AMD HD series also). There are known problems with AMD drivers on Linux. In future there will be functional Gallium driver(r300g or r600g) in Mesa. These new drivers will be available probably in Ubuntu 11.04.

Video mode set failed: Couldn't find matching GLX visual

Your video mode is probably set to 16-bit instead of 32-bit, which is what FreeOrion defaults to. You need to either change your X server color depth to 32-bit, or edit the FreeOrion config file in ~/freeorion/config.xml and change color-depth from 32 to 16. You can also try the command line argement:

./freeorion --color-depth 16

IDE for development

  • Text editor and scons to compile
  • Eclipse is open source multiplatform IDE and can be used to compile FreeOrion, but plugins to support subversion and python have to be installed. See howto Compile With Eclipse.

Debugging

Adding debug symbols to binary

Turn on debugging symbols on GG and FreeOrion with:

cmake -DBUILD_DEBUG=1 .

and then rebuild GG and FreeOrion.

backtrace

Install debugger gdb and run freeorion in window mode(not in fullscreen) with:

gdb ./freeorion

and after it starts gdb type

run

and wait until segfault occurs. Then to print backtrace type

bt full