Building FlightGear - Linux: Difference between revisions

Jump to navigation Jump to search
Update build for CMake
m (Add CentOS)
(Update build for CMake)
Line 14: Line 14:
Or if you develop on Ubuntu or Debian, consider trying the script described in [[Scripted Compilation on Linux Debian/Ubuntu]].
Or if you develop on Ubuntu or Debian, consider trying the script described in [[Scripted Compilation on Linux Debian/Ubuntu]].


== Distro-specific instructions ==
= Distro-specific instructions =
=== Debian/Ubuntu ===
== Debian/Ubuntu ==
* You can use the [[Scripted Compilation on Linux Debian/Ubuntu]] script to have Flightgear compiled in one shot under both Ubuntu and Debian systems.
* You can use the [[Scripted Compilation on Linux Debian/Ubuntu]] script to have Flightgear compiled in one shot under both Ubuntu and Debian systems.
* Debian users who prefer to build it without script may look at [[Building Flightgear - Debian]].
* Debian users who prefer to build it without script may look at [[Building Flightgear - Debian]].
* Hints for [[Ubuntu]] users.
* Hints for [[Ubuntu]] users.


=== Gentoo ===
== Gentoo ==
* Gentoo users can also use overlays to build FlightGear without much hassle: [[Building Flightgear - Gentoo]].
* Gentoo users can also use overlays to build FlightGear without much hassle: [[Building Flightgear - Gentoo]].


=== CentOS ===
== CentOS ==
CentOS users can follow these instructions to build FlightGear on [[Building Flightgear - CentOS | CentOS 8]].
CentOS users can follow these instructions to build FlightGear on [[Building Flightgear - CentOS | CentOS 8]].


== Requirements ==
= Requirements =
{{Note|as of 12/2017, people may have to build using at least OSG 3.4 due to some compilation issues -for details, refer to [[Howto:Building FlightGear without HiDPI support]]}}
{{Note|as of 12/2017, people may have to build using at least OSG 3.4 due to some compilation issues -for details, refer to [[Howto:Building FlightGear without HiDPI support]]}}
Edit 12/9/15 - These instructions are out of date! Do not use for compiling.


Before you can compile FlightGear, you need to have the following installed on your computer:
Before you can compile FlightGear, you need to have the following installed on your computer:
Line 34: Line 33:
'''C++ compiler'''
'''C++ compiler'''


These are: c++, cpp, gcc, g++ found under the <code>/usr/bin</code> directory.  You will also need to have the tools '''autoconf''' and '''automake1.9''' installed.
These are: c++, g++ found under the <code>/usr/bin</code> directory.  You will also need to have the tools '''CMake''' installed.


'''GIT'''
'''GIT'''
Line 62: Line 61:
Don't panic yet.  This may just mean some required libraries for hardware accelerated graphic are missing.  Go ahead and try installing '''plib 1.8.5''' and its dependencies first.  If you still get the above message, then you will need to do some googling and troubleshoot yourself.
Don't panic yet.  This may just mean some required libraries for hardware accelerated graphic are missing.  Go ahead and try installing '''plib 1.8.5''' and its dependencies first.  If you still get the above message, then you will need to do some googling and troubleshoot yourself.


== Dependencies ==
= Dependencies =


FlightGear is dependent on quite a few number of libraries.  You do not need to compile all of them yourself, but you will at least need to have their development version installed.  For example, the development version for package <tt>plib1.8.5</tt> is <tt>plib1.8.5</tt>'''-dev'''.
FlightGear is dependent on quite a few number of libraries.  You do not need to compile all of them yourself, but you will at least need to have their development version installed.  For example, the development version for package <tt>plib1.8.5</tt> is <tt>plib1.8.5</tt>'''-dev'''.
Line 93: Line 92:
# <tt>simgear</tt> Simulation support libraries. If you are building FlightGear from Git, you need the Git version of SimGear. If you have strange build errors, one of the first things to check is that you have an up-to-date version of SimGear built and installed.
# <tt>simgear</tt> Simulation support libraries. If you are building FlightGear from Git, you need the Git version of SimGear. If you have strange build errors, one of the first things to check is that you have an up-to-date version of SimGear built and installed.


== Compiling ==
= Compiling =
Assuming you are root, do:


<syntaxhighlight lang="bash">
== Definitions ==
# cd /usr/local/src
The following environment variables must be set because they will be used in shell commands:
</syntaxhighlight>
* <code>NR_JOBS</code>: Number of jobs for parallel compilation. For example: <code>NR_JOBS=$(/usr/bin/nproc)</code>.
* <code>FGFS_PREFIX</code>: Prefix of the Flightgear installation. For example: <code>FGFS_PREFIX=${HOME}/Flightgear</code>. All the source code must be located under the directory <code>${FGFS_PREFIX}/src</code> and the installation will be done under the directory <code>${FGFS_PREFIX}</code> as <code>${FGFS_PREFIX}/bin</code>, <code>${FGFS_PREFIX}/include</code>, <code>${FGFS_PREFIX}/lib</code>,...
* <code>FGFS_PREFIX_LIB</code>: The default <code>lib</code> directory is different between RedHat and Debian based distributions. Usually on Debian based distributions
FGFS_PREFIX_LIB=${FGFS_PREFIX}/lib
Usually on RedHat based distribution
FGFS_PREFIX_LIB=${FGFS_PREFIX}/lib64


'''Note:''' When tracking a fast changing software like FlightGear/Git it is highly advisable to install it in a separate directory. That way one can also easily build and reinstall without being root, which greatly reduces the risk of messing up one's system.
== Simgear ==
To install in a directory of your choice add the <tt>--prefix</tt> argument to configure. E.g. <tt>./configure --prefix=$HOME/FlightGear</tt>. I would recommend installing all of OSG, plib, SimGear and FlightGear with the same prefix.
The source code of Simgear can be provided:
* as an official release that can be downloaded from [https://sourceforge.net/projects/flightgear/files/ here]. The environment variable <code>SIMGEAR_VERSION</code> must be set to the relevant version of Simgear, for example <code>SIMGEAR_VERSION=2019.1.1</code> and then using the following commands to extract the source code:


=== Getting and compiling SimGear ===
cd -- "${FGFS_PREFIX}/src/"
SIMGEAR_SRC=${FGFS_PREFIX}/src/simgear-${SIMGEAR_VERSION}
rm -Rf -- "${SIMGEAR_SRC}/"
tar axvf "${FGFS_PREFIX}/src/simgear-${SIMGEAR_VERSION}.tar.bz2"


'''Step 1:'''
* as a clone of the Simgear Git repo by using the following commands:


Clone the SimGear git repository and set it up to track the 'next' branch.
cd -- "${FGFS_PREFIX}/src/"
git clone https://git.code.sf.net/p/flightgear/simgear flightgear-simgear
SIMGEAR_SRC=${FGFS_PREFIX}/src/flightgear-simgear


<syntaxhighlight lang="bash">
* if you have already a clone of the Simgear Git repo, the local copy can be updated using the following commands:
$ git clone git://git.code.sf.net/p/flightgear/simgear simgear
</syntaxhighlight>


or if the git port is firewalled on you network, use the http transport
cd -- "${FGFS_PREFIX}/src/"
SIMGEAR_SRC=${FGFS_PREFIX}/src/flightgear-simgear
pushd -- "${SIMGEAR_SRC}/"
git pull
popd


<syntaxhighlight lang="bash">
Now that the source code of Simgear is available under the directory <code>${SIMGEAR_SRC}</code>, the build can be started using the following commands:
$ git clone http://git.code.sf.net/p/flightgear/simgear simgear
</syntaxhighlight>


By default after cloning you should have a local next branch that tracks the master next branch. It can be updated it with <code>git pull</code>.
cd -- "${FGFS_PREFIX}/src/"
rm -Rf -- "${FGFS_PREFIX}/src/sg_build/"
mkdir -- "${FGFS_PREFIX}/src/sg_build/"
pushd -- "${FGFS_PREFIX}/src/sg_build/"
cmake "${SIMGEAR_SRC}" \
      -DCMAKE_BUILD_TYPE=RelWithDebInfo \
      -DCMAKE_INSTALL_PREFIX="${FGFS_PREFIX}" \
      -DCMAKE_VERBOSE_MAKEFILE=TRUE
make --jobs=${NR_JOBS}
make -- test
make -- install
popd
rm -Rf -- "${FGFS_PREFIX}/src/sg_build/"


'''Step 2:'''
== Flightgear ==
The data for Flightgear can be provided:
* as an official release that can be downloaded from [https://sourceforge.net/projects/flightgear/files/ here].
rm -f -- "${FGFS_PREFIX_LIB}/FlightGear"
rm -Rf -- "${FGFS_PREFIX_LIB}/FlightGear-${FLIGHTGEAR_VERSION}/"
mkdir --parents -- "${FGFS_PREFIX_LIB}/FlightGear-${FLIGHTGEAR_VERSION}/"
pushd -- "${FGFS_PREFIX_LIB}/FlightGear-${FLIGHTGEAR_VERSION}/"
tar axvf "${FGFS_PREFIX}/src/FlightGear-${FLIGHTGEAR_VERSION}-data.tar.bz2"
popd
pushd -- "${FGFS_PREFIX_LIB}/"
ln --symbolic -- "FlightGear-${FLIGHTGEAR_VERSION}/fgdata/" FlightGear
popd


The source code will be downloaded into a directory called '''simgear'''.
* as a clone of the Flightgear Git repo by using the following commands:


Next, go into the directory and make preparations for the compilation:
pushd -- "${FGFS_PREFIX_LIB}/"
git clone --depth 1 https://git.code.sf.net/p/flightgear/fgdata flightgear-fgdata
ln --symbolic -- "flightgear-fgdata/" FlightGear
popd


<syntaxhighlight lang="bash">
* if you have already a clone of the Flightgear Git repo, the local copy can be updated using the following commands:
$ cd simgear
$ cmake .
</syntaxhighlight>
'''Note''' that if you don't want to install <tt>simgear</tt> globally on the system but in a specific directory, you can do so by adding <code>-DCMAKE_INSTALL_PREFIX=/path/to/your/fgInstallation</code> to the <code>cmake</code> command


'''Step 3:'''
pushd -- "${FGFS_PREFIX_LIB}/flightgear-fgdata/"
git pull
popd


Compile and install SimGear by doing:
The source code of Flightgear can be provided:
* as an official release that can be downloaded from [https://sourceforge.net/projects/flightgear/files/ here]. The version of Simgear and Flightgear must match. The environment variable <code>FLIGHTGEAR_VERSION</code> must be set to the relevant version of Flightgear, for example <code>FLIGHTGEAR_VERSION=2019.1.1</code> and then using the following commands to extract the source code:


<syntaxhighlight lang="bash">
cd -- "${FGFS_PREFIX}/src/"
$ make; make install
FLIGHTGEAR_SRC=${FGFS_PREFIX}/src/flightgear-${FLIGHTGEAR_VERSION}
</syntaxhighlight>
rm -Rf -- "${FLIGHTGEAR_SRC}/"
tar axvf "${FGFS_PREFIX}/src/flightgear-${FLIGHTGEAR_VERSION}.tar.bz2"


''Note:'' with <tt>gcc</tt> 4.2 or later,on some platforms, you can get compiling errors about <tt>alc.h</tt> like:  
* as a clone of the Flightgear Git repo by using the following commands:


  '<anonymous>' has incomplete type
  cd -- "${FGFS_PREFIX}/src/"
take a look at http://bugs.gentoo.org/166723
git clone https://git.code.sf.net/p/flightgear/flightgear flightgear-flightgear
FLIGHTGEAR_SRC=${FGFS_PREFIX}/src/flightgear-flightgear


=== Getting and compiling FlightGear ===
* if you have already a clone of the Flightgear Git repo, the local copy can be updated using the following commands:


'''Step 1:'''
cd -- "${FGFS_PREFIX}/src/"
FLIGHTGEAR_SRC=${FGFS_PREFIX}/src/flightgear-flightgear
pushd -- "${FLIGHTGEAR_SRC}/"
git pull
popd


Clone the FlightGear git repository and set it up to track the 'next' branch.
Now that the source code of Flightgear is available under the directory <code>${FLIGHTGEAR_SRC}</code>, the build can be started using the following commands:


<syntaxhighlight lang="bash">
cd -- "${FGFS_PREFIX}/src/"
$ git clone git://git.code.sf.net/p/flightgear/flightgear
rm -Rf -- "${FGFS_PREFIX}/src/fg_build/"
</syntaxhighlight>
mkdir -- "${FGFS_PREFIX}/src/fg_build/"
 
pushd -- "${FGFS_PREFIX}/src/fg_build/"
By default after cloning you should have a local next branch that tracks the master next branch. It can be updated it with git pull.
cmake "${FLIGHTGEAR_SRC}" \
 
      -DCMAKE_BUILD_TYPE=RelWithDebInfo \
'''Step 2:'''
      -DCMAKE_INSTALL_PREFIX="${FGFS_PREFIX}" \
 
      -DCMAKE_VERBOSE_MAKEFILE=TRUE
Next, go into the folder and make preparations for the compilation:
make --jobs=${NR_JOBS}
 
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${FGFS_PREFIX_LIB}/
<syntaxhighlight lang="bash">
FG_ROOT=${FGFS_PREFIX_LIB}/Flightgear make --jobs=${NR_JOBS} -- test_suite || true
$ cd flightgear
make -- test
$ ./autogen.sh
make -- install
$ ./configure
popd
</syntaxhighlight>
rm -Rf -- "${FGFS_PREFIX}/src/fg_build/"
 
Note that if you don't want to install simgear globally on the system but in a specific directory, you can do so by adding --prefix=/path/to/your/fgInstallation to the ./configure command.
If you didn't install OSG globally or in the same prefix as SimGear and FlightGear, you have to pass the OSG directory to the configure-command like this:
 
<syntaxhighlight lang="bash">
$ ./configure --prefix=/path/to/fgInstallation --with-osg=/path/to/osg/installation --enable-osgviewer
</syntaxhighlight>
 
In this case you have to tell your system where to find the OSG libraries before you can run flightgear:
 
<syntaxhighlight lang="bash">
$ export LD_LIBRARY_PATH=/path/to/osgInstallation/lib:$LD_LIBRARY_PATH
</syntaxhighlight>
 
'''Step 3:'''
 
Now you can compile and install Flightgear by:
 
<syntaxhighlight lang="bash">
$ make; make install
</syntaxhighlight>
 
'''Step 4:'''
 
Clone the data directory:
 
<syntaxhighlight lang="bash">
$ git clone git://git.code.sf.net/p/flightgear/fgdata
</syntaxhighlight>
 
The data directory is large (almost 2.5GB) so it will take considerable time to download.
There mirror of fgdata that might be faster to download from:
 
<syntaxhighlight lang="bash">
$ git clone git://mapserver.flightgear.org/fgdata
</syntaxhighlight>
 
The mirror is synchronized with the master so either will do.
 
And install it in (or as) /usr/local/share/FlightGear
 
<syntaxhighlight lang="bash">
$ mv fgdata /usr/local/share/flightgear
</syntaxhighlight>


== External links ==
= External links =
=== Instructions ===
== Instructions ==
*  [[MSYS]]  
*  [[MSYS]]  
*  [[MinGW/cross-compiler]]  
*  [[MinGW/cross-compiler]]  
Line 222: Line 217:
* [http://www.oflebbe.de/oflebbe/FlightGear/index.html MSVC8 aka Visual 2005]
* [http://www.oflebbe.de/oflebbe/FlightGear/index.html MSVC8 aka Visual 2005]
* [http://macflightgear.sourceforge.net/home/documents/ Mac OS X]
* [http://macflightgear.sourceforge.net/home/documents/ Mac OS X]
== Important note for GIT users ==
= Important note for GIT users =
As of latest development in GIT, only cmake is now required for building both SimGear and FlightGear. So if you build GIT (for what any reason) please don't try to use autogen.sh as it is removed from repository.
As of latest development in GIT, only cmake is now required for building both SimGear and FlightGear. So if you build GIT (for what any reason) please don't try to use autogen.sh as it is removed from repository.


88

edits

Navigation menu