Difference between revisions of "How to build VCMI (Linux)"

From VCMI Project Wiki
Jump to: navigation, search
(Add notes on ffmpeg header for Fedora 32)
(Replaced content with "{{Template:MovedToWebpage|https://vcmi.eu/developers/Building_Linux/}}")
 
(14 intermediate revisions by 7 users not shown)
Line 1: Line 1:
= Compiling VCMI =
+
{{Template:MovedToWebpage|https://vcmi.eu/developers/Building_Linux/}}
* Current baseline requirement for building is Ubuntu 14.04
 
* Supported C++ compilers for UNIX-like systems are GCC 4.8+ and Clang 3.4+
 
 
 
Older distributions and compilers might work, but they aren't tested by [https://travis-ci.org/vcmi/vcmi/ Travis CI]
 
 
 
= Installing dependencies =
 
 
 
== Prerequisites ==
 
 
 
To compile, the following packages (and their development counterparts) are needed to build:
 
* CMake 2.8.12 or newer
 
* SDL2 with devel packages: mixer, image, ttf
 
* zlib and zlib-devel
 
* Optional of launcher: Qt 5, widget and network modules
 
* FFmpeg libraries: libavformat and libswscale. Their name could be libavformat-devel and libswscale-devel, or ffmpeg-libs-devel or similar names.
 
* Boost C++ libraries v1.48+: program-options, filesystem, system, thread, locale
 
 
 
== Manual Installation ==
 
 
 
For older OS versions the latest prerequisite packages may not be readily available via the system installer. Some brief instructions for manual install are given below (tested on Ubuntu 14.04, update version numbers as desired).
 
 
 
* CMake (see also https://askubuntu.com/questions/355565/how-do-i-install-the-latest-version-of-cmake-from-the-command-line/865294)
 
<pre>
 
wget https://cmake.org/files/v3.11/cmake-3.11.0.tar.gz
 
tar xfz cmake-3.11.0.tar.gz
 
cd cmake-3.11.0
 
./bootstrap
 
make -j2
 
sudo checkinstall --pkgname cmake --pkgversion 3.11.0 -y
 
</pre>
 
Note: Will only be visible in new terminals. Test with cmake --version.
 
 
 
* Boost (see also https://ubuntuforums.org/showthread.php?t=1180792)
 
<pre>
 
wget https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.gz
 
tar xfz boost_1_66_0.tar.gz
 
cd boost_1_66_0
 
./boostrap.sh --with-library=program-options,filesystem,system,thread,locale
 
./b2
 
sudo ./b2 install
 
</pre>
 
Note: Boost 1.66.0 produces a bug in asio.hpp when used with old gcc versions (see https://svn.boost.org/trac10/ticket/13368).
 
 
 
* GCC (for Ubuntu - compile from source is lengthy)
 
<pre>
 
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
 
sudo apt-get update
 
sudo apt-get install gcc-7 g++-7
 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7
 
</pre>
 
Note: Test with gcc --version (and g++ --version).
 
 
 
* Clang (for Ubuntu 14.04 - for later versions first line is not needed, and 'trusty' should be replaced with version name)
 
<pre>
 
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
 
sudo add-apt-repository "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-6.0 main"
 
sudo apt-get update
 
sudo apt-get install clang-6.0
 
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-6.0 60 --slave /usr/bin/clang++ clang++ /usr/bin/clang++-6.0
 
</pre>
 
Note: Test with clang --version (and clang++ --version).
 
 
 
== On Debian-based systems (e.g. Ubuntu) ==
 
 
 
<pre>
 
sudo apt-get install cmake g++ libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev zlib1g-dev libavformat-dev libswscale-dev libboost-dev libboost-filesystem-dev libboost-system-dev libboost-thread-dev libboost-program-options-dev libboost-locale-dev qtbase5-dev
 
</pre>
 
 
 
Alternatively if you have VCMI installed from repository or PPA you can use:
 
<pre>
 
sudo apt-get build-dep vcmi
 
</pre>
 
 
 
== On RPM-based distributions (e.g. Fedora) ==
 
 
 
<pre>
 
sudo yum install cmake gcc-c++ SDL2-devel SDL2_image-devel SDL2_ttf-devel SDL2_mixer-devel boost boost-devel boost-filesystem boost-system boost-thread boost-program-options boost-locale zlib-devel ffmpeg-devel ffmpeg-libs qt5-qtbase-devel
 
</pre>
 
 
 
NOTE:
 
 
 
The ffmpeg-devel 4.2.2-5 on Fedora 32 installs headers under /usr/include/ffmpeg/. Therefore the compiler would not be able to pick up correct headers unless they are put under /usr/include. To workaround this issue, simply create soft links to require headers:
 
 
 
<pre>
 
sudo mkdir -p /usr/include/libavformat/
 
sudo ln -sf /usr/include/ffmpeg/libavformat/* /usr/include/libavformat/
 
sudo mkdir -p /usr/include/libavcodec/
 
sudo ln -sf /usr/include/ffmpeg/libavcodec/* /usr/include/libavcodec/
 
sudo mkdir -p /usr/include/libavutil
 
sudo ln -sf /usr/include/ffmpeg/libavutil/* /usr/include/libavutil
 
sudo mkdir -p /usr/include/libswscale
 
sudo ln -sf /usr/include/ffmpeg/libswscale/* /usr/include/libswscale/
 
</pre>
 
 
 
== On Arch-based distributions ==
 
On Arch-based distributions, there is a development package available for VCMI on the AUR.
 
 
 
It can be found at: https://aur.archlinux.org/packages/vcmi-git/
 
 
 
Information about building packages from the Arch User Repository (AUR) can be found at the Arch wiki.
 
 
 
= Getting the sources =
 
 
 
VCMI is still in development. We recommend the following initial directory structure:
 
<pre>
 
.
 
├── vcmi -> contains sources and is under git control
 
└── build -> contains build output, makefiles, object files,...
 
</pre>
 
 
 
You can get latest sources with:
 
<pre>
 
git clone -b develop --depth 1 --recursive https://github.com/vcmi/vcmi.git
 
</pre>
 
 
 
= Compilation =
 
 
 
== Configuring Makefiles ==
 
<pre>
 
mkdir build && cd build
 
cmake ../vcmi
 
 
 
# Additional options that you may want to use:
 
## To enable debugging:
 
cmake ../vcmi -DCMAKE_BUILD_TYPE=Debug
 
</pre>
 
'''Notice''':
 
The ../vcmi/ is not a typo, it will place makefile scripts into the build dir as the build dir is your working dir when calling CMake.
 
 
 
== Trigger build ==
 
<pre>
 
cmake --build . -- -j2
 
# -j2 = compile with 2 threads, you can specify any value
 
</pre>
 
That will generate vcmiclient, vcmiserver, vcmilauncher as well as 4 .so libraries in '''build/bin/''' directory.
 
 
 
= Package building =
 
 
 
== RPM package ==
 
 
 
The first step is to prepare a RPM build environment. On Fedora systems you can follow this guide: http://fedoraproject.org/wiki/How_to_create_an_RPM_package#SPEC_file_overview
 
 
 
1. Download the file rpm/vcmi.spec from any tagged VCMI release for which you wish to build a RPM package via the SVN Browser trac at this URL for example(which is for VCMI 0.9): http://sourceforge.net/apps/trac/vcmi/browser/tags/0.9/rpm/vcmi.spec
 
 
 
2. Copy the file to ~/rpmbuild/SPECS
 
 
 
3. Follow instructions in the vcmi.spec. You have to export the corresponding SVN tag, compress it to a g-zipped archive and copy it to ~/rpmbuild/SOURCES. Instructions are written as comments and you can copy/paste commands into terminal.
 
 
 
4. Go to ~/rpmbuild/SPECS and open terminal in this folder and type: <pre>rpmbuild -ba vcmi.spec (this will build rpm and source rpm)</pre>
 
 
 
5. Generated RPM is in folder ~/rpmbuild/RPMS
 
 
 
If you want to package the generated RPM above for different processor architectures and operating systems you can use the tool mock. Moreover, it is necessary to install mock-rpmfusion_free due to the packages ffmpeg-devel and ffmpeg-libs which aren't available in the standard RPM repositories(at least for Fedora). Go to ~/rpmbuild/SRPMS in terminal and type:
 
<pre>mock -r fedora-17-i386-rpmfusion_free path_to_source_RPM
 
mock -r fedora-17-x86_64-rpmfusion_free path_to_source_RPM</pre>
 
 
 
Available root environments and their names are listed in /etc/mock.
 
== Debian/Ubuntu ==
 
1. Install debhelper and devscripts packages
 
 
 
2. Run dpkg-buildpackage command from vcmi source directory
 
<pre>
 
sudo apt-get install debhelper devscripts
 
cd /path/to/source
 
dpkg-buildpackage
 
</pre>
 
To generate packages for different architectures see "-a" flag of dpkg-buildpackage command
 
 
 
== Documentation ==
 
 
 
To compile using Doxygen, the UseDoxygen CMake module must be installed. It can be fetched from: http://tobias.rautenkranz.ch/cmake/doxygen/
 
 
 
Once UseDoxygen is installed, run:
 
<pre>
 
cmake .
 
make doc
 
</pre>
 
 
 
The built documentation will be available from ./doc
 

Latest revision as of 16:06, 16 July 2024

Logo256.png    Page moved to VCMI-Homepage