]> git.xonotic.org Git - xonotic/netradiant.git/blob - README.md
dfcbcb0418f0a0888e051594fd00a29292952ea8
[xonotic/netradiant.git] / README.md
1 NetRadiant
2 ==========
3
4 ![NetRadiant logo](setup/data/tools/bitmaps/splash.png)
5
6 The open source, cross platform level editor for id Tech-derivated games (has lineage from GtkRadiant).
7
8 ## Compatibility
9
10 |System   |Build    |Bundle   |Run      |Build requirements         |
11 |---------|---------|---------|---------|---------------------------|
12 |Linux    |**Yes**  |**Yes**  |**Yes**  |_GCC or LLVM/clang_        |
13 |FreeBSD  |**Yes**  |_not yet_|**Yes**  |_GCC_                      |
14 |Windows  |**Yes**  |**Yes**  |**Yes**  |_MSYS2/Mingw64 or Mingw32_ |
15 |Wine     |-        |-        |**Yes**  |-                          |
16 |macOS    |**Yes**  |_not yet_|_mostly_ |_GCC and patched GtkGLext_ |
17
18 NetRadiant is known to build and run properly on Linux, FreeBSD and Windows using MSYS2. NetRadiant is known to build on macOS, but can't display things properly without a modified GtkGLExt which is yet to be upstreamed, and issues are known. Windows build is known to work well on wine, which can be used as a fallback on that system. At this time library bundling is only supported on Windows/MSYS2 and Linux. Linux bundles do not ship GTK (users are espected to have a working GTK with GtkGlExt environment).
19
20
21 ## Getting the sources
22
23 Source browser, issues and more can be found on the gitlab project: https://gitlab.com/xonotic/netradiant/
24
25 The latest source is available from the git repository: `https://gitlab.com/xonotic/netradiant.git`
26
27 The `git` client can be obtained from the Git website: http://git-scm.org
28
29 A copy of the source tree can be fetched using the command line `git` client this way:
30
31 ```sh
32 git clone --recursive https://gitlab.com/xonotic/netradiant.git
33 cd netradiant
34 ```
35
36
37 ## Dependencies
38
39 * OpenGL, LibXml2, GTK2, GtkGLExt, LibJpeg, LibPng, LibWebp, Minizip, ZLib.
40
41 To fetch default game packages you'll need Git, Subversion and `unzip`.
42
43 ### Ubuntu:
44
45 ```sh
46 apt-get install --reinstall build-essential cmake lib{x11,gtk2.0,gtkglext1,xml2,jpeg,webp,minizip}-dev  git subversion unzip wget
47 ```
48
49 If you plan to build a bundle, you also need to install `uuid-runtime patchelf`
50
51 This is enough to build NetRadiant but you may also install those extra packages to get proper GTK2 graphical and sound themes: `gnome-themes-extra gtk2-engines-murrine libcanberra-gtk-module`
52
53 ### MSYS2:
54
55 Under MSYS2, the mingw shell must be used.
56
57 If you use MSYS2 over SSH, add `mingw64` to the path this way (given you compile for 64 bit Windows, replace with `mingw32` if you target 32 bit Windows instead): 
58
59 ```sh
60 export PATH="/mingw64/bin:${PATH}"`
61 ```
62
63 Install the dependencies this way:
64
65 ```sh
66 pacman -S --needed base-devel mingw-w64-$(uname -m)-{ntldd-git,subversion,unzip,toolchain,cmake,make,gtk2,gtkglext,libwebp,minizip-git} git
67 ```
68
69 Explicitely use `mingw-w64-x86_64-` or `mingw-w64-i686-` prefix instead of `mingw-w64-$(uname -m)` if you need to target a non-default architecture.
70
71
72 ### macOS:
73
74 ```sh
75 brew install gcc cmake gtkglext pkgconfig minizip webp coreutils gnu-sed
76 brew link --force gettext
77 ```
78
79
80 ## Submodules
81
82  * Crunch (optional, disabled by default, only supported with CMake build)
83
84 If you have not used `--recursive` option at `git clone` time, you can fetch Crunch this way (run it within the `netradiant` repository):
85
86 ```sh
87 git submodule update --init --recursive
88 ```
89
90
91 ## Compiling
92
93 ### Initial build
94
95 This project uses the usual CMake workflow:
96
97
98 #### Debug build
99
100 ```sh
101 cmake -G "Unix Makefiles" -H. -Bbuild -DCMAKE_BUILD_TYPE=Debug
102 cmake --build build -- -j$(nproc)
103 ```
104
105
106 #### Release build
107
108 ```sh
109 cmake -G "Unix Makefiles" -H. -Bbuild -DCMAKE_BUILD_TYPE=Release
110 cmake --build build -- -j$(nproc)
111 ```
112
113 On macOS you have to add this to the first cmake call:
114
115 ```sh
116 -DCMAKE_C_COMPILER=/usr/local/bin/gcc-9 -DCMAKE_CXX_COMPILER=/usr/local/bin/g++-9
117 ```
118
119 On FreeBSD you have to add this to the first cmake call:
120
121 ```sh
122 -DCMAKE_C_COMPILER=/usr/local/bin/gcc8 -DCMAKE_CXX_COMPILER=/usr/local/bin/g++8
123 ```
124
125
126 ### Subsequent builds
127
128 The initial build will download the gamepacks and build NetRadiant and tools. If you frequently recompile you can skip downloading the gamepacks:
129
130 ```sh
131 cmake --build build --target binaries -- -j$(nproc)
132 ```
133
134 You should still periodically update gamepacks:
135
136 ```sh
137 cmake --build build --target gamepacks
138 ```
139
140
141 ### Build and installation details
142
143 #### Compilation details
144
145 Options:
146
147 * `BUILD_RADIANT=OFF`  
148   Do not build NetRadiant (default: `ON`, build netradiant graphical editor);
149 * `BUILD_TOOLS=OFF`  
150   Do not build q3map2 and other tools (default: `ON`, build command line tools);
151 * `BUILD_CRUNCH=ON`  
152   Enable crunch support (default: `OFF`, disable crunch support);
153 * `RADIANT_ABOUTMSG="Custom build by $(whoami)"`  
154   A message shown in the about dialog (default: `Custom build`).
155
156 Targets:
157
158 * `binaries`          Compiles all binaries;
159   - `netradiant`      Compiles the netradiant editor;
160   - `modules`         Compiles all modules (each module has its own target as well);
161   - `plugins`         Compiles all plugins (each plugin has its own target as well);
162   - `tools`           Compiles all tools (each tool has its own target as well);
163      * `quake2`       Compiles all the Quake 2 tools: `q2map`, `qdata3`;
164      * `heretic2`     Compiles all the Heretic2 tools: `q2map`, `h2data`;
165      * `quake3`       Compiles all the Quake 3 tools:
166          - `q3map2`   Compiles the quake3 map compiler;
167          - `q3data`   Compiles the q3data tool.
168
169 Type `make help` to get an exhaustive list of targets.
170
171 #### Download details
172
173 Options:
174
175 * `DOWNLOAD_GAMEPACKS=OFF`  
176   Do not automatically download the gamepack data on each compilation and do not install game packs already downloaded (default: `ON`);
177 * `GAMEPACKS_LICENSE_LIST=all`  
178   Download all gamepacks whatever the license (default: `free`, download free gamepacks, can be set to `none` to only filter by name);
179 * `GAMEPACKS_NAME_LIST="Xonotic Unvanquished"`  
180   Download gamepacks for the given games (default: `none`, do not select more gamepacks to download).
181
182 Target:
183
184 * `gamepacks` Downloads the game pack data.
185
186 Run `./gamepacks-manager -h` to know about available licenses and other available games. Both lists are merged, for example setting `GAMEPACKS_LICENSE_LIST=GPL` and `GAMEPACKS_NAME_LIST=Q3` will install both GPL gamepacks and the proprietary Quake 3 gamepack.
187
188
189 #### Installation details
190
191 Options:
192
193 * `BUNDLE_LIBRARIES=ON`  
194   Bundle libraries, only MSYS2 is supported at this time (default: `OFF`);
195 * `FHS_INSTALL=ON` (available on POSIX systems)  
196   Install files following the Filesystem Hierarchy Standard (`bin`, `lib`, `share`, etc.)  
197   Also setup XDG mime and application support on Linux-like systems (default: `OFF`, install like in 1999);
198 * `CMAKE_INSTALL_PREFIX=/usr`  
199   Install system-wide on Posix systems, always set `FHS_INSTALL` to `ON` when doing this (default: `install/` directory within source tree).
200
201 Target:
202
203 * `install` Install files.
204
205
206 ## Additonnal notes
207
208 ### About Crunch
209
210 The crnlib used to decode `.crn` files is the one from [Dæmon](http://github.com/DaemonEngine/Daemon) which is the one by [Unity](https://github.com/Unity-Technologies/crunch/tree/unity) made cross-platform and slightly improved. Since Unity brokes compatibility with [BinomialLLC's legacy tree](https://github.com/BinomialLLC/crunch) it's required to use either the `crunch` tool from Dæmon or the one from Unity to compress textures that have to be read by radiant or q3map2.