Fix: don't link to OpenGL with SDL2 as backend; SDL2 dynamically loads it (#8745)
[openttd-github.git] / COMPILING.md
blob5e642dc8744b993cfc1109827720bc55ba461c20
1 # Compiling OpenTTD
3 ## Required/optional libraries
5 The following libraries are used by OpenTTD for:
7 - zlib: (de)compressing of old (0.3.0-1.0.5) savegames, content downloads,
8    heightmaps
9 - liblzo2: (de)compressing of old (pre 0.3.0) savegames
10 - liblzma: (de)compressing of savegames (1.1.0 and later)
11 - libpng: making screenshots and loading heightmaps
12 - libfreetype: loading generic fonts and rendering them
13 - libfontconfig: searching for fonts, resolving font names to actual fonts
14 - libicu: handling of right-to-left scripts (e.g. Arabic and Persian) and
15    natural sorting of strings (Linux only)
16 - libSDL2: hardware access (video, sound, mouse) (not required for Windows or macOS)
18 OpenTTD does not require any of the libraries to be present, but without
19 liblzma you cannot open most recent savegames and without zlib you cannot
20 open most older savegames or use the content downloading system.
21 Without libSDL/liballegro on non-Windows and non-macOS machines you have
22 no graphical user interface; you would be building a dedicated server.
24 ## Windows:
26 You need Microsoft Visual Studio 2017 or more recent.
28 You can download the free Visual Studio Community Edition from Microsoft at
29 https://visualstudio.microsoft.com/vs/community/.
31 OpenTTD needs the Platform SDK, if it isn't installed already. This can be
32 done during installing Visual Studio, by selecting
33 `Visual C++ MFC for x86 and x64` (and possibly
34 `Visual C++ ATL for x86 and x64` depending on your version). If not, you
35 can get download it as [MS Windows Platform SDK](https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk).
37 Install the SDK by following the instructions as given.
39 Dependencies for OpenTTD on Windows are handled via
40 [vcpkg](https://github.com/Microsoft/vcpkg/). First you need to install vcpkg
41 by following the `Quick Start` instructions of their
42 [README](https://github.com/Microsoft/vcpkg/blob/master/README.md).
44 After this, you can install the dependencies OpenTTD needs. We advise to use
45 the `static` versions, and OpenTTD currently needs the following dependencies:
47 - liblzma
48 - libpng
49 - lzo
50 - zlib
52 To install both the x64 (64bit) and x86 (32bit) variants (though only one is necessary), you can use:
54 ```ps
55 .\vcpkg install liblzma:x64-windows-static libpng:x64-windows-static lzo:x64-windows-static zlib:x64-windows-static
56 .\vcpkg install liblzma:x86-windows-static libpng:x86-windows-static lzo:x86-windows-static zlib:x86-windows-static
57 ```
59 You can open the folder (as a CMake project). CMake will be detected, and you can compile from there.
60 If libraries are installed but not found, you need to set VCPKG_TARGET_TRIPLET in CMake parameters.
61 For Visual Studio 2017 you also need to set CMAKE_TOOLCHAIN_FILE.
62 (Typical values are shown in the MSVC project file command line example)
64 Alternatively, you can create a MSVC project file via CMake. For this
65 either download CMake from https://cmake.org/download/ or use the version
66 that comes with vcpkg. After that, you can run something similar to this:
68 ```powershell
69 mkdir build
70 cd build
71 cmake.exe .. -G'Visual Studio 16 2019' -DCMAKE_TOOLCHAIN_FILE="<location of vcpkg>\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="x64-windows-static"
72 ```
74 Change `<location of vcpkg>` to where you have installed vcpkg. After this
75 in the build folder are MSVC project files. MSVC can rebuild the project
76 files himself via the `ZERO_CHECK` project.
78 ## All other platforms
79 Minimum required version of CMake is 3.9.
81 ```bash
82 mkdir build
83 cd build
84 cmake ..
85 make
86 ```
88 For more information on how to use CMake (including how to make Release builds),
89 we urge you to read [their excellent manual](https://cmake.org/cmake/help/latest/guide/user-interaction/index.html).
91 ## Supported compilers
93 Every compiler that is supported by CMake and supports C++17, should be
94 able to compile OpenTTD. As the exact list of compilers changes constantly,
95 we refer to the compiler manual to see if it supports C++17, and to CMake
96 to see if it supports your compiler.
98 ## Compilation of base sets
100 To recompile the extra graphics needed to play with the original Transport
101 Tycoon Deluxe graphics you need GRFCodec (which includes NFORenum) as well.
102 GRFCodec can be found at
103 https://www.openttd.org/downloads/grfcodec-releases/latest.html.
105 Having GRFCodec installed can cause regeneration of the `.grf` files, which
106 are written in the source directory. This can leave your repository in a
107 modified state, as different GRFCodec versions can cause binary differences
108 in the resulting `.grf` files. Also translations might have been added for
109 the base sets which are not yet included in the base set information files.
110 To avoid this behaviour, disable GRFCodec (and NFORenum) in CMake cache
111 (`GRFCODEC_EXECUTABLE` and `NFORENUM_EXECUTABLE`).
113 ## Developers settings
115 You can control some flags directly via `CXXFLAGS` (any combination
116 of these flags will work fine too):
118 - `-DRANDOM_DEBUG`: this helps with debugging desyncs.
119 - `-fno-inline`: this avoids creating inline functions; this can make
120   debugging a lot easier.
121 - `-O0`: this disables all optimizations; this can make debugging a
122   lot easier.
123 - `-p`: this enables profiling.
125 Always use a clean buildfolder if you changing `CXXFLAGS`, as this
126 value is otherwise cached. Example use:
128 `CXXFLAGS="-fno-inline" cmake ..`