Older distributions and compilers might work, but they aren't tested by Github CI (Actions)
To compile, the following packages (and their development counterparts) are needed to build:
For Ubuntu and Debian you need to install this list of packages:
sudo apt-get install cmake g++ clang 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 libboost-iostreams-dev qtbase5-dev libqt5svg5-dev libtbb-dev libluajit-5.1-dev liblzma-dev libsqlite3-dev libminizip-dev qttools5-dev ninja-build ccache
Alternatively if you have VCMI installed from repository or PPA you can use:
sudo apt-get build-dep vcmi
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 boost-iostreams zlib-devel ffmpeg-free-devel qt5-qtbase-devel qt5-qttools-devel tbb-devel luajit-devel xz-devel sqlite-devel minizip-devel ccache
NOTE: VCMI bundles the fuzzylite lib in its source code.
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.
On NixOS or any system with nix available, it is recommended to use nix-shell. Create a shell.nix file with the following content:
with import <nixpkgs> {};
stdenv.mkDerivation {
name = "build";
nativeBuildInputs = [ cmake ];
buildInputs = [
cmake clang clang-tools llvm ccache ninja
boost zlib minizip xz
SDL2 SDL2_ttf SDL2_net SDL2_image SDL2_sound SDL2_mixer SDL2_gfx
ffmpeg tbb vulkan-headers libxkbcommon
qt6.full luajit
];
}
And put it into build directory. Then run nix-shell
before running any build commands.
We recommend the following directory structure:
.
├── vcmi -> contains sources and is under git control
└── build -> contains build output, makefiles, object files,...
You can get the latest source code with:
git clone -b develop --recursive https://github.com/vcmi/vcmi.git
mkdir build
cd build
cmake -S ../vcmi
[!NOTE] The
../vcmi
is not a typo, it will place Makefiles into the build dir as the build dir is your working dir when calling CMake.
See CMake for a list of options
cmake --build . -j8
(-j8 = compile with 8 threads, you can specify any value. )
This will generate vcmiclient
, vcmiserver
, vcmilauncher
as well as .so libraries in the build/bin/
directory.
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
Enable RPMFusion free repo to access to ffmpeg libs:
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
[!NOTE] The stock ffmpeg from Fedora repo is no good as it lacks a lots of codecs
Perform a git clone from a tagged branch for the right Fedora version from https://github.com/rpmfusion/vcmi; for example for Fedora 38:
git clone -b f38 --single-branch https://github.com/rpmfusion/vcmi.git
Copy all files to ~/rpmbuild/SPECS with command:
cp vcmi/* ~/rpmbuild/SPECS
Fetch all sources by using spectool:
sudo dnf install rpmdevtools
spectool -g -R ~/rpmbuild/SPECS/vcmi.spec
Fetch all dependencies required to build the RPM:
sudo dnf install dnf-plugins-core
sudo dnf builddep ~/rpmbuild/SPECS/vcmi.spec
Go to ~/rpmbuild/SPECS and open terminal in this folder and type:
rpmbuild -ba ~/rpmbuild/SPECS/vcmi.spec
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:
mock -r fedora-38-aarch64-rpmfusion_free path_to_source_RPM
mock -r fedora-38-x86_64-rpmfusion_free path_to_source_RPM
For other distributions that uses RPM, chances are there might be a spec file for VCMI. If there isn't, you can adapt the RPMFusion's file
Available root environments and their names are listed in /etc/mock.
Install debhelper and devscripts packages
Run dpkg-buildpackage command from vcmi source directory
sudo apt-get install debhelper devscripts
cd /path/to/source
dpkg-buildpackage
To generate packages for different architectures see "-a" flag of dpkg-buildpackage command