Turns out, `add_custom_target`'s `DEPENDS` argument can only
refer to outputs of custom commands in the same directory (i.e. the same
CMakeLists.txt scope).
Interestingly, this worked with all generators except parallel
make, so perhaps there some ongoing work in CMake to allow
cross-directory `DEPENDS`.
Works around this limitation by moving tests to the same scope
(`CMakeLists.txt` file) as assets.
This does not actually add SDL3 support but adds enough
CMake stuff to make the following succeed:
```bash
cmake -S. -Bbuild-sdl3 -DUSE_SDL3=ON -DDEVILUTIONX_SYSTEM_SDL3=OFF -DDEVILUTIONX_STATIC_SDL3=ON -DNOSOUND=ON
```
`NOSOUND` is needed because `SDL_audiolib` does not support SDL3.
Ubuntu 20.04 is going EOL in May.
Ubuntu 22.04 CMake is 3.22.
Debian stable CMake is 3.25.
Debian oldstable (EOL in 2026) has CMake 3.25 in bullseye-backports.
This does not fully address the issue of most everything
being a giant library but it's a start.
Note that the libraries are OBJECT libraries, so they
may (and currently do) contain references to missing
symbols.
Also fixes the implementation of transitive dependency
support for OBJECT libraries.
We set `CMAKE_OSX_DEPLOYMENT_TARGET` to make the package compatible with
older macOS than the one we're building on.
However, we should not do this when building on an even older system,
e.g. macOS 10.4
Stop using git for the version tag.
The new process is as follows:
1. The `VERSION` file contains the version.
For release, it should contain "1.5.0".
Immediately after the release, it should be changed to "1.6.0-dev".
2. The build type is included in the version string unless it is
"Release". The commit hash is now included into the version string
whenever the `VERSION` file has a suffix (i.e. 1.5.0-dev rather than
just 1.5.0). The full version string for development builds now
looks like this: `1.5.0-dev-Debug-b102dccf8`.
This means we longer need git or `-DVERSION_NUM` to get a sensible version number.
The in-development versions are now always clearly indicated with the
`-dev` suffix no matter how DevilutionX was built.
Enable these options for all platforms that use GCC.
They do not seem to significantly affect build times on our codebase,
while resulting in a slight 2-3% performance increase on low-end devices,
such as RG-99.
DevilutionX already does not build on 3.13 because of libzt.
libzt uses the `TARGET_OBJECTS` generator expression with non-OBJECT
libraries. This is only supported in CMake 3.15+:
https://gitlab.kitware.com/cmake/cmake/-/merge_requests/3178
A PGO'd binary can be built as follows:
1. Build with `-DDEVILUTIONX_PROFILE_GENERATE=ON`.
3. Run the timedemo.
4. Build with `-DDEVILUTIONX_PROFILE_USE=ON`.
By default, the profile directory is at `${HOME}/devilutionx-profile`
Example for the RG99:
```bash
# Build the OPK for profiling data collection:
TOOLCHAIN=/opt/rs90-toolchain Packaging/OpenDingux/build.sh rg99 --profile-generate
# Copy the OPK to RG99:
scp -O build-rg99/devilutionx-rg99.opk rg99:/media/sdcard/apps
# Now, run the OPK. It will run the timedemo instead of the actual game and will take a couple of hours.
# ☕☕☕
# Copy the profiling data from RG99
scp -r -O rg99:/media/data/local/home/devilutionx-profile /tmp/devilutionx-profile
# Build the OPK use the collected profiling data:
TOOLCHAIN=/opt/rs90-toolchain Packaging/OpenDingux/build.sh rg99 --profile-use --profile-dir /tmp/devilutionx-profile
# Copy the resulting binary back to RG99
scp -O build-rg99/devilutionx-rg99.opk rg99:/media/sdcard/apps
```
https://github.com/diasurgical/devilutionx-mpq-tools produces an unpacked MPQ
with all the graphics converted to CLX and the unused files removed.
This is primarily useful on RAM-constrained platforms, such as PS2,
because it eliminates the MPQ overhead.
Adds a build option to load from such unpacked directories instead of the MPQ.
These directories are searched for in the same locations
where the MPQs would be searched for otherwise.
Example directory layout:
* /usr/local/share/diasurgical/devilutionx/diabdat/ -- unpacked and converted diabdat.mpq
* /usr/local/share/diasurgical/devilutionx/hellfire/ -- unpacked and converted hellfire MPQs (all of them merged into 1 directory)
* /usr/local/share/diasurgical/devilutionx/fonts/ -- unpacked fonts.mpq
* /usr/local/share/diasurgical/devilutionx/pl/ -- unpacked pl.mpq
These directory structure is produced by calling `unpack_and_minify_mpq`