Skip to content

πŸ”₯πŸ”₯ 0.83.0 PRE-REQUISITE πŸ”₯πŸ”₯ β€” Migrate the build system to CMake + vcpkgΒ #4196

Description

@FeralChild64

Overview

This is a list of tasks to be completed before the CMake + vcpkg support can be declared as production-ready. Feel free to add more or add comments to discuss some of the more questionable items.

Mandatory for 0.83.0 RC1

These are essential for 0.83.0. The release won't happen until these are all done.

CI jobs β€” COMPLETED πŸ₯³πŸ

  • create Windows CMake CI job
  • create macOS CMake CI job
  • create Linux CMake CI job
  • convert PVS-Studio analysis job

Building β€” COMPLETED πŸ₯³πŸ

  • re-enable NE2000 and Slirp networking
  • FluidSynth and Slirp vcpkg dependencies removed; inject them as dynamic library binaries at packaging time
  • add support for builds with debugger
  • migrate scripts/compile_commits.sh to CMake
  • add support for unit tests
  • create CMake install rules, for Linux distro packagers
  • cleanup the contrib/resources directory - unnecessary files (translation scripts, documentation) should go elsewhere
  • port Meson script part which sets HAVE_CLOCK_GETTIME and other HAVE_* defines

Documentation

  • add Linux (Debian/Ubuntu) vcpkg build documentation
  • add macOS vcpkg build documentation
  • add Windows vcpkg build documentation
  • convert the existing Meson build instructions into a separate succinct document in case someone has to build with Meson when bisecting into the past

After 0.83.0 final

We'll probably want to do this after a few 0.83.x patch releases; we want to keep Meson around to check potential build-system-induced regressions.

  • remove Meson build support
  • remove all Meson related documentation and scripts

Nice-to-haves

These would help development but are not strictly necessary for getting 0.83.0 out. We can do them later at our leisure when/if we need them.

Building

  • add support for sanitizer builds FC64: Linux and macOS done, Windows support still to be tested
  • test/fix sanitizer builds in Windows
  • Consider de-vendoring libraries available via vcpkgΒ #4275 (we're treating this separately)
  • ManyMouse support, port detection code for macOS
  • calculate PAGESIZE variable value in the main CMakeLists.txt file
  • handle macOS-specific compiler warnings; most of them tells us to get rid of sprintf

CI jobs β€” COMPLETED πŸ₯³πŸ

  • Debian package build ☠ REMOVED ☠ (as per team decision; it's a job for the Debian package maintainers)

Questionable items

These should be probably all removed. The less things to maintain, the better.

Building β€” COMPLETED πŸ₯³πŸ

  • enable certain warnings as errors in the main CMakeList.txt β€” we have parity with Meson now; potential future improvements will be handled separately
  • custom local build should show GIT hash on the startup banner and in the VER command output (I tried to do this and failed... it adds quite a bit of complexity, and it cannot be done in a 100% foolproof way anyway using CLI tools) JN: won't do πŸ‘ŽπŸ»
  • handle compiler warnings only showing with the CMake build - FC64: they were caused by incomplete CMake config file
  • Tracy usage should be optional (do we need Tracy at all? anybody uses it?) ☠ REMOVED ☠ (by the author as nobody in the team has ever used it)
  • networking should be optional, depending on SDL2_Net -- we are removing the option; it's a mandatory dependency now
  • MT32Emu usage should be optional
  • proper compiler detection in the main CMakeList.txt

CI jobs β€” COMPLETED πŸ₯³πŸ

  • Platform builds ☠ REMOVED ☠ (as per team decision; we can have ARM-specific macOS, Linux & Windows builds instead)
  • Config heavy ☠ REMOVED ☠ (as per team decision)
  • Windows MSYS2 builds ☠ REMOVED ☠ (as per team decision; MSYS2 is no longer supported)

Documentation β€” COMPLETED πŸ₯³πŸ

  • add OpenSuSE vcpkg build documentation (why do we need it? Ubuntu/Debian steps not enough?) not needed; general Linux instructions should suffice
  • add Fedora vcpkg build documentation (why do we need it? Ubuntu/Debian steps not enough?) not needed; general Linux instructions should suffice

Metadata

Metadata

Assignees

No one assigned

    Labels

    CIGitHub Actions / CI related issuesbuild systemBuild system related issues

    Type

    Fields

    No fields configured for Task.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions