Under MSYS2, the mingw shell must be used.
-If you use MSYS2 over SSH, add `mingw64` to the path this way (given you compile for 64 bit windows):
+If you use MSYS2 over SSH, add `mingw64` to the path this way (given you compile for 64 bit Windows):
```
export PATH="/mingw64/bin:${PATH}"`
```
-pacman -S --needed base-devel mingw-w64-$(uname -m)-{toolchain,cmake,make,gtk2,gtkglext,libwebp,minizip-git} git
+pacman -S --needed base-devel mingw-w64-$(uname -m)-{ntldd-git,toolchain,cmake,make,gtk2,gtkglext,libwebp,minizip-git} git
```
Explicitely use `mingw-w64-x86_64-` or `mingw-w64-i686-` prefix if you need to target a non-default architecture.
## macOS:
```
-brew install gcc cmake Caskroom/cask/xquartz gtkglext pkgconfig minizip webp coreutils gnu-sed
+brew install gcc cmake gtkglext pkgconfig minizip webp coreutils gnu-sed
brew link --force gettext
```
# Compiling
+## Initial build
+
This project uses the usual CMake workflow:
-## Debug
+### Debug
```
-cmake -G "Unix Makefiles" -H. -Bbuild && cmake --build build -- -j$(nproc)
+cmake -G "Unix Makefiles" -H. -Bbuild -DCMAKE_BUILD_TYPE=Debug && cmake --build build -- -j$(nproc)
```
-## Release
+### Release
```
cmake -G "Unix Makefiles" -H. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build -- -j$(nproc)
On macOS you have to add this to the first cmake call:
```
--DCMAKE_C_COMPILER=/usr/local/bin/gcc-9 -DCMAKE_CXX_COMPILER=/usr/local/bin/g++-9 -DOPENGL_INCLUDE_DIR=/opt/X11/include -DOPENGL_gl_LIBRARY=/opt/X11/lib/libGL.dylib
+-DCMAKE_C_COMPILER=/usr/local/bin/gcc-9 -DCMAKE_CXX_COMPILER=/usr/local/bin/g++-9
```
On FreeBSD you have to add this to the first cmake call:
```
-cmake -G "Unix Makefiles" -DCMAKE_C_COMPILER=/usr/local/bin/gcc8 -DCMAKE_CXX_COMPILER=/usr/local/bin/g++8
+-DCMAKE_C_COMPILER=/usr/local/bin/gcc8 -DCMAKE_CXX_COMPILER=/usr/local/bin/g++8
+```
+
+## Subsequent builds
+
+The initial build will download the gamepacks and build NetRadiant and tools. If you frequently recompile you can skip downloading the gamepacks:
+
+```
+cmake --build build --target binaries -- -j$(nproc)
+```
+
+You should still periodically update gamepacks:
+
+```
+cmake --build build --target gamepacks
```
## Build and installation details
options:
+* `BUNDLE_LIBRARIES=ON`
+ Bundle libraries (only MSYS2 is supported at this time)
* `BUILD_RADIANT=OFF`
- Do not build NetRadiant (default: `ON`, build radiant graphical editor)
+ Do not build NetRadiant (default: `ON`, build netradiant graphical editor)
* `BUILD_TOOLS=OFF`
Do not build q3map2 and other tools (default: `ON`, build command line tools)
* `BUILD_CRUNCH=ON`
targets:
-* `radiant` Compiles the radiant core binary
-* `modules` Compiles all modules (each module has its own target as well)
-* `plugins` Compiles all plugins (each plugin has its own target as well)
-* `quake3` Compiles all the Quake3 tools
- - `q3map2` Compiles the quake3 map compiler
- - `q3data` Compiles the q3data tool
+* `binaries` Compiles all binaries
+ - `netradiant` Compiles the netradiant editor
+ - `modules` Compiles all modules (each module has its own target as well)
+ - `plugins` Compiles all plugins (each plugin has its own target as well)
+ - `tools` Compiles all tools (each tool has its own target as well)
+ * `quake2` Compiles all the Quake2 tools: `q2map`, `qdata3`
+ * `heretic2` Compiles all the Heretic2 tools: `q2map`, `h2data`
+ * `quake3` Compiles all the Quake3 tools:
+ - `q3map2` Compiles the quake3 map compiler
+ - `q3data` Compiles the q3data tool
+
+Type `make help` to get an exhaustive list of targets.
### Download details
options:
* `DOWNLOAD_GAMEPACKS=OFF`
- Do not automatically download the gamepack data during the first compilation (default: `ON`)
+ Do not automatically download the gamepack data on each compilation and do not install game packs already downloaded (default: `ON`)
* `GAMEPACKS_LICENSE_LIST=all`
Download all gamepacks whatever the license (default: `free`, download free gamepacks, can be set to `none` to only filter by name)
* `GAMEPACKS_NAME_LIST="Xonotic Unvanquished"`
target:
-* `game_packs` Downloads the game pack data
+* `gamepacks` Downloads the game pack data
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 proprietary Quake 3 one.
* `install`
Install files
-Note that because of both the way NetRadiant works and the way bundled library loading works CMake has to do some globbing to detect some of the produced/copied files it has to install. So you have to run cmake again before installing:
-
-```
-cmake -H. -Bbuild && cmake --build build -- install
-```
-
## Note about Crunch
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.