Table of Contents
- System requirements
- Introduction
- Windows
- Getting the code
- Getting the libraries
- Setting up the build environment
- Build configuration
- Building Atlas
- Running
- Keeping up to date
- Linux
- Distributed C/C++ compiling (distcc)
- Dependencies
- ArchLinux, Manjaro, Parabola
- Debian, Ubuntu
- Fedora
- Mageia, ROSA Linux
- openSUSE
- Solus
- Slackware
- CentOS
- VoidLinux
- Getting the code
- Getting the libraries
- Building
- Testing
- Running
- Keeping up to date
- Creating Linux packages
- macOS
- Create macOS distributable app bundle
- BSD
- Known problems and solutions
This page describes how to generate the latest development version of the code. This may be unstable and is intended for those that want to actively follow or contribute to the software development. To install the latest alpha release, Download the Latest Alpha instead.
You may also be interested in the nightly build of the game. This version, updated daily, allows you to play and test the development version without having to build the game yourself on Windows. However, it is not suited for contributing.
The development version of the game is aimed at software developers (not regular players). As such, these instructions assume a higher level of technical proficiency. If you encounter difficulties, please consult the forum.
System requirements
You'll need:
- An adequately high-spec computer:
- At least 30 GB of free disk space
- At least 1 GB of RAM for compiling, more if compiling multiple jobs in parallel (using -j)
- 32 or 64-bit x86-compatible CPU, or an ARMv5+ processor
- Modern graphics hardware is also recommended, though the game can run (slowly) on fairly old devices (GeForce 4, Intel 945GM, etc)
- One of the following operating systems:
- [#Windows Windows] (7 or newer)
- [#Linux Linux]
- [#macOS macOS / OS X] (10.13/High Sierra or newer)
- [#BSD FreeBSD/OpenBSD] (only experimental support at this time)
- Up-to-date system software (Windows service packs, graphics driver updates, etc)
- Some technical proficiency. We try to make the build process as smooth and painless as possible, but it's designed to be followed by programmers - if you just want to play the game, wait for a pre-packaged installer instead.
Introduction
The development environment for 0 A.D. is comprised of three layers. Each goes on top of the previous:
- Source code.
- Libraries.
- Build workspaces.
Libraries are external dependencies (such as SpiderMonkey). Linux users will install most of them through their package manager. Then, in order to download and build the other libraries, scripts located under libraries
should be used. For Windows, get-windows-libs.sh
downloads all prebuilt libraries. On Linux, build-source-libs.sh
should be run to build bundled versions of some specific libraries. For macOS, the build-osx-libs.sh
downloads and builds all necessary libraries.
Workspaces contain the integrations for code editors (such as Visual Studio, Xcode, etc.) as well as the Makefile for the main source code. The workspaces are auto-generated by the update-workspaces
script from the build/workspaces/
directory. Once ready, the integrations are ready for use, such as build/workspaces/gcc/Makefile
(for Linux and macOS) and build\workspaces\vs2017
(for Windows).
After that, you can build the source code inside the workspace.
Windows
The main supported versions are:
- Windows 11
- Windows 10
- Windows 8.1
- Windows 8
- Windows 7
If you want to develop, the only supported IDE is:
- Visual C++ 2017 (even though XP is deprecated, you still need to install the XP toolset). You might also need the W7.1 SDK (You might encounter this https://social.msdn.microsoft.com/Forums/sqlserver/en-US/1de7c9b4-1feb-4c98-b426-f7f02cbafa99/windows-sdk-71-on-windows-10?forum=windowssdk)
Important notes:
- We have dropped support for older versions of Visual Studio when moving to C++14, see #5862.
- XP and Vista are no longer supported - SpiderMonkey 78 has dropped support for both. It is plausible that some fancy patching would work, but we haven't had the material means to try it.
- Only 32-bit builds are supported, though they can be compiled and run on 64-bit Windows.
Getting the code
See Getting the Code.
Getting the libraries
Download all the pre-built libraries by running the script libraries\get-windows-libs.bat
.
If you ever need to rebuild libraries yourself, please see BuildingWindowsDependencies.
Setting up the build environment
The game must be compiled with Microsoft Visual C++. You can get the free 2017 Community edition here: Visual Studio older downloads. You can also install Visual Studio 2019 (or 2022) and choose to install the 2017 compiler (version 15.0).
The Visual Studio project/solution files are automatically generated from the source files:
- Run
build\workspaces\update-workspaces.bat
. - Open
build\workspaces\vs2017\pyrogenesis.sln
.
Build configuration
Make sure to select the "Release" configuration to build an optimized, more playable version of the game (the target will be pyrogenesis.exe
). The "Debug" configuration can be more useful for debugging but has significantly reduced performance (the target will be pyrogenesis_dbg.exe
). Both "Release" and "Debug" builds include debug symbols, see Debugging and Debugging on Windows for more details on debugging.
Now you should be able to build the code from within Visual Studio, using "Build Solution" (F5 in VS 2017 and Ctrl+B in VS 2019).
Building Atlas
If you also wish to test the Atlas Scenario Editor or Actor Editor tools, you will need to download and build the wxWidgets library separately (version 3.0 and above; see libraries\win32\wxwidgets\README.txt
for details), then supply the --atlas
option when running update-workspaces.bat
. Atlas projects will now be included when you open pyrogenesis.sln
in Visual C++.
Running
Rightclick on "pyrogenesis" in the solution explorer panel on the right hand side and select "Set as StartUp Project". Run the game with F5 inside Visual Studio. You can close the game with SHIFT + F5 from inside vs studio if it becomes unresponsive. If you want to run it outside the debugger, run binaries\system\pyrogenesis.exe
.
To run the automated tests, run the "test" project. (Right click on "test" and "set as StartUp Project" and F5; or right click, "Debug", "Start new instance"). In VS's debug output window, ignore any "first-chance exception" messages; it should say ".......OK!" if it succeeded.
Keeping up to date
Whenever you pull an update from a remote git repository, take a glance at the files that were modified:
- If
libraries\get-windows-libs.bat
was touched, run it again in order to pull updates to libraries. - If source files were added or removed, run
update-workspaces.bat
again. - In both cases and whenever source files are touched, build the game again.
Updates in which only binaries are touched do not warrant a rebuild of the game.
Linux
0 A.D. should work on any reasonably modern Linux distro, on x86 and x86_64 (amd64). The details depend on exactly which distro you use.
Distributed C/C++ compiling (distcc)
If you have access to more than 1 computer on a LAN, you may want to consider using distcc to reduce the build time. If you use distcc, you must provide the --without-pch
argument when running update-workspaces.sh
. To get the maximum benefit, remember to increase the value of the number following the -j
argument. For example, if distributing the build to 3 computers where each has 4 cores, try -j12
or -j15
.
Dependencies
First you need to install various standard tools and development libraries:
- a C++17 conforming compiler
- LLVM-objdump, which is part of the LLVM binaries. You don't need clang itself.
- the rust compiler and cargo (NB: A27 needs rust 1.51.0 and later won't work without)
- Boost (at least 1.57 since r21726)
- cargo
- CMake (only needed if you use bundled NVTT)
- Python 3 (required for cxxtest and non-system SpiderMonkey)
- libcurl (at least 7.32)
- libenet (1.3, the older 1.2 is not compatible)
- libfmt (at least 4.0)
- libgloox (needed for the lobby; at least 1.0.10, previous versions are know to have connection problems; pass
--without-lobby
toupdate-workspaces.sh
to exclude the lobby) - libicu
- libogg
- libpng
- libsodium (>= 1.0.14, follow the instructions at https://doc.libsodium.org/installation/ if your distro is behind)
- libvorbis
- libxml2
- miniupnpc (at least 1.6)
- OpenAL
- OpenGL
- rustc
- SDL2 (at least 2.0.2)
- Subversion (in order to download the bundled copies of some libraries)
- zlib
To compile editing tools (enabled by default; pass the flag --disable-atlas
to update-workspaces.sh
to disable):
- wxWidgets (at least 3.0; packages are probably called wxgtk)
To use shared system libraries instead of bundled copies (default) of libraries (pass the flag --with-system-$COMPONENT
to update-workspaces.sh
to use the non-bundled copy):
- SpiderMonkey 91 (
--with-system-mozjs
) - NVTT (
--with-system-nvtt
) Note: the version of NVTT provided by your package manager is probably too old and we don't check it yet (#5757).
For a list of all options to update-workspaces.sh
see premake.
ArchLinux, Manjaro, Parabola
Install the dependencies with:
sudo pacman -S --needed awk openal m4 boost cmake curl enet fmt gcc gloox grep icu libgl libogg \
libpng libsodium libvorbis libxml2 llvm make miniupnpc patch pkg-config python \
rust sdl2 subversion wxwidgets-gtk3 zip zlib
Parabola i686
If building [Atlas]Atlas_Manual (happens by default), you will need to:
- Change
wxwidgets-gtk3
towxgtk3
in the list above; - Set the
WX_CONFIG
variable, else the build process might fail outright or attempt to use thegtk2
frontend instead. For example, run this command before runningupdate-workspaces.sh
:
export WX_CONFIG=wx-config-gtk3
If not correct, you will get errors about missing "wx/*.h" includes.
You can skip building Atlas altogether (and negate the wxWidgets dependency) by passing the --disable-atlas
option to update-workspaces.sh
.
Debian, Ubuntu
- On Debian 12 (bookworm) or Ubuntu 23.04 (lunar) or later install the required dependencies with:
sudo apt install build-essential cargo cmake libboost-dev libboost-system-dev \
libboost-filesystem-dev libcurl4-gnutls-dev libenet-dev libfmt-dev \
libfreetype-dev m4 libgloox-dev libicu-dev libminiupnpc-dev libnvtt-dev \
libogg-dev libopenal-dev libpng-dev libsdl2-dev libsodium-dev libvorbis-dev \
libwxgtk3.2-dev libxml2-dev python3 rustc subversion zlib1g-dev
- If you want to use a packaged SpiderMonkey, which will be made available for example in 0ad.dev PPA:
- you should add
libmozjs--dev
and runupdate-workspace.sh
with--with-system-mozjs
.
- you should add
- When not using system nvidia-texture-tools,
libnvtt-dev
can be omitted, butcmake
is needed to build the bundled NVTT. - You can also use
libcurl4-openssl-dev
instead oflibcurl4-gnutls-dev
(it's not possible to install both at once). Note that versions of openssl prior to 3.0.0 are not GPL compatible and those resulting binaries could not be redistributed. - On older Debian / Ubuntu versions you may have to replace
libwxgtk3.2-dev
withlibwxgtk3.0-gtk3-dev
.
Fedora
Install the dependencies with:
sudo dnf install cargo cmake boost-devel enet-devel fmt-devel gcc-c++ \
gloox-devel libcurl-devel libicu-devel libpng-devel libsodium-devel \
libvorbis-devel libxml2-devel miniupnpc-devel mozjs91-devel openal-soft-devel \
patch pkgconfig python SDL2-devel subversion wxGTK-devel zip
- Until issue #6895 is resolved, use packaged SpiderMonkey by running
build-source-libs.sh
andupdate-workspaces.sh
using--with-system-mozjs
Mageia, ROSA Linux
TODO: outdated, please update
Install the dependencies with:
urpmi gcc-c++ python subversion zip cmake boost-devel libcurl-devel \
libenet-devel libgloox-devel libpng-devel libsodium-devel libvorbis-devel \
libxml2-devel libwxgtku2.8-devel openal-soft-devel libicu-devel
openSUSE
Install the dependencies with:
sudo zypper install gcc-c++ python subversion zip cmake boost-devel \
libcurl-devel enet-devel libpng-devel libsodium-devel libvorbis-devel \
libxml2-devel openal-soft-devel pkg-config wxWidgets-devel libSDL2-devel \
gloox-devel libicu-devel libminiupnpc-devel fmt-devel
Solus
sudo eopkg install libboost-devel curl-devel enet-devel gloox-devel libicu-devel libogg-devel libpng-devel libsodium-devel libvorbis-devel libxml2-devel miniupnpc-devel openal-soft-devel mesalib-devel sdl2-devel zlib-devel wxwidgets-devel libgnutls-devel fmt-devel
Slackware
Note: These instructions have been tested on the 64-bit version of Slackware.
Slackware 14.2
If you've done the full install of Slackware, most of the [#Dependencies dependencies] are already installed. The other required dependencies you can install from the Slackbuilds repo using sbopkg:
- enet
- gloox
- libsodium
- miniupnpc
- OpenAL
- SDL2
Required to build Atlas:
- wxGTK3 (install/build this first, required by wxPython3)
- wxPython3
Default 14.2 packages:
a/sed-4.2.2-x86_64-1.txz
d/autoconf-2.6.9-noarch-1.txz
d/binutils-2.26-x86_64-3.txz
d/cmake-3.5.2-x86_64-1.txz
d/flex-2.6.0-x86_64-1.txz
d/guile-2.0.11-x86_64-2.txz
d/make-4.1-x86_64-2.txz
d/perl-5.22.2-x86_64-1.txz
d/python-2.7.16-x86_64-1_slack14.2.txz
d/python-setuptools-22.0.5-x86_64-1.txz
l/boost-1.59.0-x86_64-1
l/icu4c-56.1-x86_64-2
l/libogg-1.3.2-x86_64-1
x/libSM-1.2.2-x86_64-2.txz
x/mesa-11.2.2-x86_64-1.txz
Upgraded packages:
OpenAL-1.18.0-x86_64-1_SBo.tgz
curl-7.74.0-x86_64-1_slack14.2.txz
enet-1.3.17-x86_64-1_SBo.txz
gcc-5.5.0-x86_64-1_slack14.2.txz
gcc-g++-5.5.0-x86_64-1_slack14.2.txz
gloox-1.0.24-x86_64-1_SBo.tgz
libpng-1.6.27-x86_64-1_slack14.2.txz
libsodium-1.0.18-x86_64-1_SBo.txz
libvorbis-1.3.7-x86_64-1_slack14.2.txz
libxml2-2.9.5-x86_64-1_slack14.2.txz
libzip-1.0.1-x86_64-3_slack14.2.txz
miniupnpc-2.0-x86_64-1_slonly.txz
pkg-config-0.29.2-x86_64-1_slack14.2.txz
SDL2-2.0.14-x86_64-1_SBo.txz
wxGTK3-3.0.5-x86_64-1_SBo.txz
zlib-1.2.11-x86_64-1_slack14.2.txz
Special packages:
kernel-headers-4.4.261-x86-1.txz
Kernel headers must match your kernel version.
Use the 0ad-data and 0ad slackbuilds from https://slackbuilds.org/repository/14.2/games/0ad-data/ and https://slackbuilds.org/repository/14.2/games/0ad/ this is fine for v0.0.23b . Newer versions require gcc>=7 so you'll have to use slackware-current or wait till slackware 15.0 comes out if you want to try them out.
Slackware 15.0
If you've done the full install of Slackware, most of the [#Dependencies dependencies] are already installed. The other required dependencies you can build and install from the Slackbuilds repo using sbopkg:
- enet
- fmt
- gloox
- miniupnpc
- wxGTK3 (which has it's own dependencies)
- webkit2gtk (which requires)
- bubblewrap
- geoclue2
- xdg-dbus-proxy
- wpebackend-fdo (which requires)
- libwpe
- webkit2gtk (which requires)
- 0ad-data
then build and install 0ad with the ATLAS=enable
option for the map editor
Slackware-current
Get the updated build scripts from: http://ponce.cc/slackware/testing/0ad/ http://ponce.cc/slackware/testing/0ad-data/
Make the following modifications to both 0ad.SlackBuild and 0ad-data.SlackBuild build scripts:
Modify 0ad.SlackBuild to skip the build-tests: Old: build/workspaces/update-workspaces.sh \
--without-pch \ --bindir=/usr/games \ --datadir=/usr/share/games/0ad \ --libdir=/usr/lib${LIBDIRSUFFIX}/0ad \ --${ATLAS:-disable}-atlas
New: build/workspaces/update-workspaces.sh \
--without-pch \ --bindir=/usr/games \ --datadir=/usr/share/games/0ad \ --libdir=/usr/lib${LIBDIRSUFFIX}/0ad \ --without-tests \ --${ATLAS:-disable}-atlas
Slackware-Current(no-root,dev,alternative)
Optional way is without using SlaCkBuilds, not making a package. For keeping a local, constantly modified, rebuilt and custom patched version under /home/$(whoami) https://bitbucket.org/subslackstock/scripts/src/master/bash/LatestBuild.sh
CentOS
Discussion of installing on CentOS 7 can be found on the forums here.
Note: The advice below is derived from installing in a Virtual Machine with CentOS 7 64-bit minimally installed. If you have CentOS 6 (or earlier), the following steps may not be possible. Installation on a physical machine, a machine with more stuff already installed upon it, or a machine that is 32-bit, may differ slightly.
-
Firstly, you will need to enable the "Extra Packages for Enterprise Linux" (or "EPEL") repository (if you haven't already). You can do this by running (as root/via sudo)
#!sh yum install epel-release
-
Install some auxiliary packages. These are not dependencies of 0 A.D. itself, but are necessary to run update_workspaces.sh successfully. They might already be installed on your system:
#!sh yum install bzip2 patch
-
Install the 0 A.D. dependencies that are available directly from repos:
#!sh yum install cmake gcc-c++ enet-devel libglvnd-devel gloox-devel libicu-devel \ libogg-devel libpng-devel libsodium-devel libvorbis-devel libxml2-devel \ miniupnpc-devel openal-soft-devel subversion wxGTK3-devel zlib-devel SDL2-devel
-
Acquire a sufficiently recent version of libcurl:
- From this site: https://mirror.city-fan.org/ftp/contrib/libraries/, download the two files that satisfy one of the following patterns:
libssh2-{version}.cf.rhel7.{arch}.rpm
libssh2-devel-{version}.cf.rhel7.{arch}.rpm
- From this site: https://mirror.city-fan.org/ftp/contrib/sysutils/Mirroring/, download the three files that satisfy one of the following patterns:
curl-{version}.cf.rhel7.{arch}.rpm
libcurl-{version}.cf.rhel7.{arch}.rpm
libcurl-devel-{version}.cf.rhel7.{arch}.rpm
- Install some dependencies from repos:
#!sh yum install nss-devel libnghttp2 libpsl libmetalink
- Install dependencies from downloaded packages.
Note: This will replace the version of libssh2 that is provided by the CentOS official repos. This is necessary as the version of libcurl we're installing needs a more up-to-date version than what the official repos can provide. As the packages we've acquired are compiled as to be interoperable with CentOS systems, this shouldn't cause any problems with other programs installed on your system.
Install thelibssh2-*
andlibssh2-devel-*
packages usingrpm -Uvh
. For example:#!sh rpm -Uvh libssh2-1.8.0-8.0.cf.rhel7.x86_64.rpm libssh2-devel-1.8.0-8.0.cf.rhel7.x86_64.rpm
- Install the updated curl packages (
curl-*
,libcurl-*
andlibcurl-devel-*
) usingrpm -Uvh
. For example:#!sh rpm -Uvh curl-7.61.1-3.0.cf.rhel7.x86_64.rpm libcurl-7.61.1-3.0.cf.rhel7.x86_64.rpm libcurl-devel-7.61.1-3.0.cf.rhel7.x86_64.rpm
- Acquire a sufficiently recent version of boost:
- From https://www.boost.org/users/history/version_1_70_0.html, download
boost_1_70_0.tar.gz
. - Uncompress archive:
- $
tar -xf boost_1_70_0.tar.gz
- $
- Enter folder:
- $
cd ./boost_1_70_0
- $
- Compile the parts that are needed to be compiled, and install the libraries:
- $
./bootstrap.sh --with-libraries=filesystem,system
- $
./b2 install
- (Compiled files end up in
/usr/local/lib/
, header files in/usr/local/include/boost/
)
- $
- Make sure the runtime linker can find the updated boost libraries:
- Navigate to
/etc/ld.so.conf.d
and create a blank file calledpyro.conf
. - Within this file, enter the text
/usr/local/lib
and save.
- Navigate to
- Acquire a sufficiently recent version of fmt:
- From https://github.com/fmtlib/fmt/releases, download the latest release.
- Follow the instructions to build and install.
- Continue by getting the code, as described below. When you get to libraries building and workspace generation, when you run
build-source-libs.sh
andupdate-workspaces.sh
, you must use the arguments--with-system-mozjs
and--with-system-nvtt
.
VoidLinux
sudo xbps-install -Syv base-devel boost-devel cmake curl fmt-devel gcc icu-devel libcurl-devel libenet-devel libogg-devel libopenal-devel libpng-devel libsodium-devel libvorbis-devel libxml2 MesaLib-devel miniupnpc-devel patch pkg-config SDL2-devel wxWidgets-devel zip zlib
If there are issues, install more header files depending on the compiler's error message. pyrogenesis requires MesaLib-devel
to provide header files for libGL. Custom compile gloox
for the Lobby or use xbps source packages or use update-workspaces.sh --without-lobby
. If there are unresolved shlibs or an update breaks a package, then e.g.
sudo xbps-install -Syv SDL2-devel dbus dbus-x11 # credit Vaelatern
sudo xpbs-install -Su # update, add -d for debugging, credit duncaen
Getting the code
See Getting the Code.
Getting the libraries
Download and build the bundled dependencies by running the script libraries/build-source-libs.sh
. If you prefer using system-installed versions of the libs, you may pass --with-system-mozjs
and/or --with-system-nvtt
to avoid spending time on this step.
Building
Prepare the build workspace and compile the code with:
cd 0ad/build/workspaces
./update-workspaces.sh -j3 # if using system-installed versions of the libs, pass --with-system-mozjs and/or --with-system-nvtt
cd gcc
make -j3
- -j3 gives the number of parallel builds to run, and should typically be one plus the number of CPU cores available.
- The Release mode builds (which are the default) are more optimised, but are harder to debug. Use
make config=debug
(and runpyrogenesis_dbg
) if you need better debugging support. See Debugging for more details.
If you encounter any build errors, review the existing bug reports, check the [#Knownproblemsandsolutions known problems section] or please file a new bug in the tracker.
Testing
Run the automated tests to verify that everything works as expected like this:
cd ../../../
binaries/system/test
Running
If everything went well, compiling the code worked and all tests passed, it's finally time to run the game:
binaries/system/pyrogenesis
Keeping up to date
If you want to rebuild quickly after pulling from a git remote, you can usually get away with:
cd build/workspaces
./update-workspaces.sh -j3
cd gcc
make -j3
If the make
line gives errors, you may need to run make clean
before it. If the update-workspaces.sh
gives errors, you may need to run clean-workspaces.sh
before it.
Creating Linux packages
If you want to create packages for a Linux distribution see the current 0ad and 0ad-data packages on Salsa for examples (especially the control
and rules
files).
#!comment Keep anchor for convenient fragment links to the former "OS X" heading.
macOS
The process on macOS is similar to Linux:
Dependencies
- Install Xcode, version 10.1+ is recommended. Only 10.13+ are supported to compile the game.
- Install the command line tools for Xcode:
- Open a Terminal window and enter
xcode-select --install
.
- Install the rust toolchain.
- (recommended) If you have Homebrew installed, use
brew install rust
. - Alternatively, open a Terminal window and enter
curl --proto '=https' --tlsv1.2 -sSf <https://sh.rustup.rs> | sh
. - See https://www.rust-lang.org/tools/install for more information.
- CMake:
- (recommended) If you have Homebrew installed, use
brew install cmake
. - Alternatively, download a prebuilt macOS package at https://cmake.org/download/. If prompted, choose to install the "CMake command line tools" to the default location.
- Note: Recent versions have no installer, so after copying the app bundle to Applications, you need to run CMake with elevated permissions to install the command line tools. From the terminal:
sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install
. - If the install command fails, you can manually add the following line to the end of
/etc/paths
:/Applications/CMake.app/Contents/bin
.
- Note: Recent versions have no installer, so after copying the app bundle to Applications, you need to run CMake with elevated permissions to install the command line tools. From the terminal:
Getting the code
See Getting the Code.
Now you have two options:
Build the game
- Run
build-macos-libs.sh
, the macOS libraries build script, this will download and build the game's dependencies (except CMake, see above). This script will take some time to finish when first run, after that it will reuse the old build. - NOTE: Command Line Tools for Xcode version 15.3 is missing m4 which is required to build some libraries. One possible workaround is to run
sudo ln -s /Library/Developer/CommandLineTools/usr/bin/gm4 /Library/Developer/CommandLineTools/usr/bin/m4
cd libraries
./build-macos-libs.sh -j3
- -j3 gives the number of parallel builds to run, and should typically be one plus the number of CPU cores available.
- To force a rebuild for some reason, e.g. the SVN folder is moved or Xcode / macOS is upgraded, pass in the
--force-rebuild
flag. - Next, to build the game on the command line, use the following commands:
cd build/workspaces
./update-workspaces.sh -j3
cd gcc
make -j3
- The Release mode builds (which are the default) are more optimised, but are harder to debug. Use
make config=debug
(and runpyrogenesis_dbg
) if you need better debugging support. See Debugging for more details. - If you encounter any build errors, review the existing bug reports, check the [#Knownproblemsandsolutions known problems section] or please file a new bug in the tracker.
- Or if you have Xcode 4 installed, you can open
build/workspaces/xcode4/pyrogenesis.xcworkspace
(see discussion on this here). - Run the automated tests to verify that everything works as expected like this:
binaries/system/test
- If everything went well, compiling the code worked and all tests passed, it's finally time to run the game:
binaries/system/pyrogenesis
macOS Troubleshooting
- Building Spidermonkey: Install a python version known to work. Up-to-date 3.7, 3.8, 3.9 and 3.10 are confirmed to work, though versions shipped with older mac systems (e.g. 3.8.2 on macOS 10.15) might not.
Create macOS distributable app bundle
This is outdated and will soon change.
- You will need Xcode installed (for its SDKs)
- Open [build/workspaces/build-osx-bundle.sh]source:/ps/trunk/build/workspaces/build-osx-bundle.sh and read the comments. You will need to change a few settings depending on your version of macOS, Xcode, etc.
- Run
build-osx-bundle.sh
, the bundle build script, which will download and build the game's dependencies for the appropriate SDK, build the game's source code, package the mod data, and set up the app bundle info.
cd build/workspaces
./build-osx-bundle.sh -j3
- -j3 gives the number of parallel builds to run, and should typically be one plus the number of CPU cores available.
- When it's finished, there should be a complete 0ad app bundle in
build/workspaces
. You can open it by double-clicking its icon in Finder or with theopen 0ad.app
command in the terminal. - Consider the following to make an official release:
- Use
build-osx-bundle.sh --release
, to create a bundle from a clean SVN working copy. - Package the bundle inside a compressed DMG with background image, for easy distribution (see ReleaseProcess).
- Use
BSD
*Note: The BSD support is a work in progress and should be considered experimental. That means don't try it unless you "know what you're doing" :)
TODO: outdated, please update (see #5255)
- Install the following ports or packages (names probably differ depending on the BSD variant):
Install commands for the variants are provided below.- boost-libs
- cmake
- curl (at least 7.32)
- enet
- execinfo
- gloox
- gmake
- iconv
- icu
- libGL
- libogg
- libvorbis
- libxml2
- miniupnpc
- openal
- png
- sdl2
- subversion
- wxWidgets-gtk2 (3.0 and above) - required to build the Atlas editor
- zip
- Note: zlib should already be installed by default
- GCC 4.8.1+ or Clang
- Obtain the game's source code as [#Gettingthecode described above] for Linux.
- Check for any variant specific issues below.
- Note: Our build scripts should detect that you are running *BSD and use
gmake
as the make command. If for some reason this isn't correct, you can set theMAKE
environment variable to the correct GNU make path. - Follow the [#Building build] instructions above for Linux.
FreeBSD
- Install the dependencies with:
pkg install boost-libs cmake curl enet fmt gloox gmake iconv libGL libogg \
libsodium libvorbis libxml2 miniupnpc openal pkgconf png sdl2 subversion \
wx30-gtk2 zip
- If running FreeBSD 10.0+ you need to set
CC
toclang
andCXX
toclang++
.
export CC=clang CXX=clang++
- If building Atlas, you need to set the
WX_CONFIG
variable, becausewx-config
has a different name on FreeBSD. For example, you'd run this command if you built the wxGTK 2.8 package with unicode support:
export WX_CONFIG=wxgtk2u-2.8-config
if not correct, you will get errors about missing "wx/*.h" includes. You can skip building Atlas altogether (and the wxWidgets dependency) by later passing the --disable-atlas
option to update-workspaces.sh
.
- You'll have to set this variable every time you run
update-workspaces.sh
, so it may be most convenient to put these commands into another shell script.
OpenBSD
OBSOLETE, NEEDS UPDATING why FreeBSD has clang suggested, but OpenBSD egcc...
- You need to set
CC
andCXX
before building
export CC=egcc CXX=eg++
- Install the dependencies with:
pkg_add -i boost cmake curl enet fmt g++ gcc gloox gmake icu4c libexecinfo libogg \
libsodium libxml miniupnpc openal png sdl2 subversion zip
- As OpenBSD's packaged libxml isn't build with threading support, building Atlas is not possible so you should run
update-workspaces.sh
with the--disable-atlas
option. - You probably need to run pyrogenesis with
LD_PRELOAD=/usr/local/lib/libogg.so.6.2:/usr/local/lib/libvorbis.so.8.0
(see #1463).
Known problems and solutions
- None currently.