]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - README.md
macos: introduce ugly packing hack to attempt to reduce the size of the residual...
[xonotic/netradiant.git] / README.md
index 6270506950b4f123153f45e6ea08ed6ae40fa9c4..b9f48d8b4efe9aac8161eb40127f3922c4ed75cf 100644 (file)
--- a/README.md
+++ b/README.md
 NetRadiant
 ==========
 
-![NetRadiant logo](setup/data/tools/bitmaps/splash.png)
+[![NetRadiant logo](setup/data/tools/bitmaps/splash.png)](https://netradiant.gitlab.io)
 
-The open source, cross platform level editor for idtech games (Radiant fork).
+The open source, cross platform level editor for id Tech-derivated games, heir of GtkRadiant.
 
-# Getting the sources
+Learn more on NetRadiant website: [netradiant.gitlab.io](https://netradiant.gitlab.io).
 
-The latest source is available from the git repository:
-https://gitlab.com/xonotic/netradiant.git
 
-The git client can be obtained from the Git website:
-http://git-scm.org
+## Download NetRadiant
 
-To get a copy of the source using the command line git client:
+Prebuilt binaries can be found on the [Download page](https://netradiant.gitlab.io/page/download/).
 
-```
+
+## Compatibility matrix
+
+|System   |Build    |Bundle    |Run      |Build requirements                            |
+|---------|---------|----------|---------|----------------------------------------------|
+|Linux    |**Yes**  |**Yes**   |**Yes**  |_GCC or Clang_                                |
+|FreeBSD  |**Yes**  |_not yet_ |**Yes**  |_GCC or Clang_                                |
+|Windows  |**Yes**  |**Yes**   |**Yes**  |_MSYS2/Mingw64 or Mingw32_                    |
+|Wine     |-        |-         |**Yes**  |-                                             |
+|macOS    |**Yes**  |**Yes**   |**Yes**  |_Homebrew, GCC or Clang and builtin GtkGLExt_ |
+
+NetRadiant is known to build and run properly on Linux, FreeBSD and Windows using MSYS2, and build on macOS with Homebrew (some bugs are known though). Windows build is known to work well on wine, which can be used as a fallback on some system.
+
+At this time library bundling is only supported on Linux, Windows/MSYS2, and macOS/Homebrew. Since bundling copies things from the host, a clean build environment has to be used in order to get a clean bundle. Linux bundle does not ship GTK (users are expected to have a working GTK environment with GtkGlExt installed).
+
+
+## Getting the sources
+
+Source browser, issues and more can be found on the gitlab project: [gitlab.com/xonotic/netradiant](https://gitlab.com/xonotic/netradiant)
+
+The latest source is available from the git repository: `https://gitlab.com/xonotic/netradiant.git`
+
+The `git` client can be obtained from your distribution repository or from the Git website: [git-scm.org](http://git-scm.org)
+
+A copy of the source tree can be obtained using the command line `git` client this way:
+
+```sh
 git clone --recursive https://gitlab.com/xonotic/netradiant.git
 cd netradiant
 ```
 
-See also https://gitlab.com/xonotic/netradiant/ for a source browser, issues and more.
 
-# Dependencies
+## Dependencies
 
-* OpenGL
-* LibXml2
-* GTK2
-* GtkGLExt
-* LibJpeg
-* LibPng
-* LibWebp
-* Minizip
-* ZLib
+* OpenGL, LibXml2, GTK2, GtkGLExt, LibJpeg, LibPng, LibWebp, Minizip, ZLib.
 
-## msys2
+To fetch default game packages you'll need Git, Subversion, Wget and `unzip`.
 
-Under MSYS2, the mingw shell must be used
 
-### 32 bit:
+### Ubuntu:
 
-```
-pacman -S --needed base-devel mingw-w64-i686-{toolchain,cmake,make,gtk2,gtkglexti,libwebp}
+```sh
+apt-get install --reinstall build-essential cmake \
+    lib{x11,gtk2.0,gtkglext1,xml2,jpeg,webp,minizip}-dev \
+    git subversion unzip wget
 ```
 
-### 64 bit:
+If you plan to build a bundle, you also need to install `uuid-runtime patchelf`
 
-```
-pacman -S --needed base-devel mingw-w64-x86_64-{toolchain,cmake,make,gtk2,gtkglext,libwebp}
+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`
+
+
+### MSYS2:
+
+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, replace with `mingw32` if you target 32 bit Windows instead): 
+
+```sh
+export PATH="/mingw64/bin:${PATH}"
 ```
 
-## macOS:
+Install the dependencies this way:
 
+```sh
+pacman -S --needed base-devel git \
+    mingw-w64-$(uname -m)-{ntldd-git,subversion,unzip,toolchain,cmake,make,gtk2,gtkglext,libwebp,minizip-git}
 ```
-brew install gcc cmake Caskroom/cask/xquartz gtkglext pkgconfig minizip webp coreutils gnu-sed
+
+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.
+
+
+### macOS:
+
+```sh
+brew install cmake glib gtk+ pkgconfig minizip webp coreutils gnu-sed wget
 brew link --force gettext
 ```
 
-# Submodules
 
- * Crunch (optional, disabled by default, only supported with CMake build)
+## Submodules
 
-If you have not used `--recursive` option at `git clone` time, you can fetch Crunch this way (run it within the NetRadiant repository):
+ * Crunch (optional, not built if submodule is not present)
 
+If you have not used `--recursive` option at `git clone` time, you can fetch Crunch this way (run this within the `netradiant` repository):
 
-```
+```sh
 git submodule update --init --recursive
 ```
 
-# Compiling
 
-This project uses the usual CMake workflow:
+## Simple compilation
+
+It is required to first download the sources using `git` (do not use tarballs) and to have dependencies installed, see [Getting the sources](#getting-the-sources) and [Dependencies](#dependencies) above.
+
+
+### Easy builder assistant
+
+If you have standard needs and use well-known platform and operating system, you may try the provided `easy-builder` script which may be enough for you, you can run it this way:
 
-## Debug
+```sh
+./easy-builder
+```
+
+If everything went right, you'll find your netradiant build in `install/` subdirectory.
 
+If you need to build a debug build (to get help from a developer, for example), you can do it this way:
+
+```sh
+./easy-builder --debug
 ```
-cmake -G "Unix Makefiles" -H. -Bbuild && cmake --build build -- -j$(nproc)
+
+By default, build tools and compilers are using the `build/` directory as workspace.
+
+For supported system, bundling dependencies can be done this way:
+
+```sh
+./easy-builder -DBUNDLE_LIBRARIES=ON
 ```
 
-## Release
+Note: always do bundling on clean system without unrelated software installed.
+
+
+## Advanced compilation
 
+### Initial build
+
+This project uses the usual CMake workflow:
+
+
+#### Debug build
+
+```sh
+cmake -G "Unix Makefiles" -S. -Bbuild -DCMAKE_BUILD_TYPE=Debug
+cmake --build build -- -j$(nproc)
 ```
-cmake -G "Unix Makefiles" -H. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build -- -j$(nproc)
+
+
+#### Release build
+
+```sh
+cmake -G "Unix Makefiles" -S. -Bbuild -DCMAKE_BUILD_TYPE=Release
+cmake --build build -- -j$(nproc)
 ```
 
-On Mac you have to add this to the first cmake call:
+Note: macOS users need to build built-in GtkGLExt before building NetRadiant:
 
+```sh
+cmake -G "Unix Makefiles" -S. -Bbuild -DCMAKE_BUILD_TYPE=Release
+cmake --build build -- -j$(nproc) builtins
+cmake -G "Unix Makefiles" -S. -Bbuild
+cmake --build build -- -j$(nproc)
 ```
--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
+
+
+### Subsequent builds
+
+The initial build will download the gamepacks and build NetRadiant and tools. If you frequently recompile you can skip downloading the gamepacks:
+
+```sh
+cmake --build build --target binaries -- -j$(nproc)
+```
+
+You should still periodically update gamepacks:
+
+```sh
+cmake --build build --target gamepacks
 ```
 
-## Build and installation details
 
-### Compilation details
+### Build and installation details
+
+#### Compilation details
 
-options:
+Options:
 
 * `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`  
-   Enable crunch support (default: `OFF`, disable crunch support)
-* `RADIANT_ABOUTMSG="Custom build"`  
-   A message shown in the about dialog
+  Do not build q3map2 and other tools (default: `ON`, build command line tools);
+* `BUILD_DAEMONMAP=OFF`  
+  Do not build daemonmap tool (default: `ON` if submodule is there, buils daemonmap navigation mesh generator);
+* `BUILD_CRUNCH=OFF`  
+  Disable crunch support (default: `ON` if submodule is there, enable crunch support);
+* `RADIANT_ABOUTMSG="Custom build by $(whoami)"`  
+  A message shown in the about dialog (default: `Custom build`).
+
+Targets:
+
+* `binaries`            Compile all binaries;
+  - `netradiant`        Compile the netradiant editor;
+  - `modules`           Compile all modules (each module has its own target as well);
+  - `plugins`           Compile all plugins (each plugin has its own target as well);
+  - `tools`             Compile all tools (each tool has its own target as well);
+     * `quake2`         Compile all the Quake 2 tools: `q2map`, `qdata3`;
+     * `heretic2`       Compile all the Heretic2 tools: `q2map`, `h2data`;
+     * `quake3`         Compile all the Quake 3 tools:
+         - `q3map2`     Compile the Quake 3 map compiler;
+         - `q3data`     Compile the q3data tool;
+     * `unvanquished`   Compile all the Unvanquished tool: `daemonmap`, `q3map3`, `q4data`;
+         - `daemonmap`  Compile the daemonmap navigation mesh generator.
 
-targets:
+Type `make help` to get an exhaustive list of 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
 
-### Download details
+#### Download details
 
-options:
+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)
-* `GAMEPACKS_NAME_LIST=Xonotic Unvanquished`  
-   Download gamepacks for the given games (default: `none`, do not select more gamepacks to download)
+  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"`  
+  Download gamepacks for the given games (default: `none`, do not select more gamepacks to download).
 
-target:
+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.
+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.
 
-### Installation details
 
-options:
+#### Installation details
 
-* `FHS_INSTALL=ON`  
-  Install files following the Filesystem Hierarchy Standard (bin, lib, share, etc.), also setup XDG mime and application support on POSIX systems (default: `OFF`, install like in 1999)
+Options:
+
+* `BUNDLE_LIBRARIES=ON`  
+  Bundle libraries, only MSYS2 and Linux are supported at this time (default: `OFF`);
+* `FHS_INSTALL=ON` (available on POSIX systems)  
+  Install files following the Filesystem Hierarchy Standard (`bin`, `lib`, `share`, etc.)  
+  Also setup XDG mime and application support on Linux-like systems (default: `OFF`, install like in 1999);
 * `CMAKE_INSTALL_PREFIX=/usr`  
-  Install system-wide on Posix systems, always set `FHS_INSTALL` to `ON` when doing this (default: install in `install/` directory within source tree)
+  Install system-wide on Posix systems, always set `FHS_INSTALL` to `ON` when doing this (default: `install/` directory within source tree).
+
+Target:
+
+* `install` Install files.
 
-target:
 
-* `install`  
-  Install files
+## Additonnal information
 
-## Note about Crunch
+### 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.