cataclysmbnteam / Cataclysm-BN

Cataclysm: Bright Nights, A fork/variant of Cataclysm:DDA by CleverRaven.
https://docs.cataclysmbn.org
Other
664 stars 260 forks source link

☂️ Migrating to CMake #3113

Open olanti-p opened 1 year ago

olanti-p commented 1 year ago

Is your feature request related to a problem? Please describe.

We currently have 3 4 different build systems:

  1. Makefile
  2. CMake
  3. Visual Studio project
  4. Custom Makefile used by the Android build
  5. Code::Blocks project this one has been removed

All 4 build systems have their own ways of defining various features, so any time we tweak the build files we have to copy over the changes to the other 3. Also, all 4 are out of sync with each other when it comes to build options or utilities supported, which makes it even harder to deal with.

Describe the solution you'd like

Ditch Makefile and Visual Studio projects in favor of single cross-platform CMake project.

CMake can be used to generate both Makefile and VS projects, as well as build files for ninja (which seems to be used these days as the modern faster alternative to Makefile). It's also cross-platform, with customization points for e.g. the same VS project files, so we should be fine on that front, and should be usable for msys2/cygwin builds.

This migration will require some yak shaving:

  1. Bringing CMake build up to date, we could cherry-pick DDA PRs for that (there's a lot of them)
  2. Adding some targets that mirror Makefile utilities (code and JSON formatting, language files manipulations, etc.)

I think in the end this will make it easier to work with the project, say, splitting it up into backend-agnostic game library and sdl + curses backends.

Additional context

No response

### Tasks
- [ ] #3208
- [ ] #3457
- [ ] Mirror Makefile utilities in CMake (translations, dmgdist)
- [ ] Ensure CMake builds work on Windows with Visual Studio
- [ ] Ensure CMake builds work on Windows with VSCode
- [ ] Ensure CMake builds work on MacOS
- [ ] Use CMake for C++ part of Android builds
- [ ] Check that CMake install target works for all platforms
- [ ] Obsolete Android's Makefile
- [ ] Obsolete Makefile
- [ ] Update documentation
- [ ] https://github.com/cataclysmbnteam/Cataclysm-BN/issues/4315
- [ ] Release windows builds with MSVC+Cmake
- [ ] Unify experimental and manual release
scarf005 commented 1 year ago

Adding some targets that mirror Makefile utilities (code and JSON formatting, language files manipulations, etc.)

maybe we could use deno task to simplify some of them. (it's like node package.json scripts but deno)

olanti-p commented 1 year ago

If they're implemented as CMake targets, then any IDE with CMake integration will be able to show them in ui or run them, and we can make them depend on other targets (e.g. when asked to format json files, Makefile automatically builds the json formatter).