Skip to content

Building

Sander van Rossen edited this page Oct 26, 2026 · 2 revisions

What you need

Windows x64 Visual Studio 2026 and CMake 4.2 or newer, or Visual Studio 2022 and CMake 3.22 or newer
Linux x64 GCC 13 or Clang 17 or newer, Ninja, CMake 3.22 or newer, and SDL3's X11 and Wayland development packages (the Ubuntu list)
macOS Apple Clang with MoltenVK from Homebrew. CI builds it and runs the headless tests, but it has never run on a Mac
All The Vulkan SDK (headers, loader and glslangValidator; the GPU tests also use its validation layers). On Linux the distribution's Vulkan and glslang packages also do
Git with Git LFS: the fonts are in LFS, and without it the clone has pointer files and the fonts fail to load

At runtime the GPU driver needs Vulkan 1.3, VK_KHR_swapchain and the features listed by VulkanDeviceContext::GetDeviceRequirements(): dynamic rendering, synchronization2, descriptor indexing, buffer device address, 8- and 16-bit storage, among others.

Clone and build

git clone --recursive https://github.com/LogicalError/IntersticeUI.git
cd IntersticeUI

Windows:

cmake -S . -B build -G "Visual Studio 18 2026" -A x64   # or "Visual Studio 17 2022"
cmake --build build --config Debug

Linux and macOS:

cmake -S . -B build -G "Ninja Multi-Config"
cmake --build build --config Debug

In a clone without the submodules, run git submodule update --init --recursive; configure stops with that hint when they are missing. The third-party libraries come from the submodules, so configuring needs no network.

The first configure builds the third-party libraries once into build/third_party/install; later builds reuse them. Executables land in bin/<config>.

With Visual Studio, build/IntersticeUI.sln opens with demo as the startup project.

CMake options

Option Default
INTERSTICE_BUILD_DEMO on when top-level The demo application
INTERSTICE_BUILD_EXAMPLES on when top-level The programs in examples/
INTERSTICE_BUILD_TESTS on when top-level The unit and GPU tests
INTERSTICE_INSTALL on when top-level The install rules and the CMake package
INTERSTICE_INSTALL_THIRD_PARTY on Bundle the third-party libraries into the install
INTERSTICE_SDL on The SDL window backend; off builds without SDL, and the host passes a window backend
INTERSTICE_FALLBACK_FONTS off Ship the Noto fallback fonts (other scripts, emoji, symbols; about 87 MB) with the resources and the package
INTERSTICE_SYSTEM_SDL, _HARFBUZZ, _VMA off Use the host's copy of that library
INTERSTICE_PRECOMPILED_HEADERS on Precompile the headers most sources include
INTERSTICE_LTCG off MSVC whole-program optimization in Release

As a subproject (add_subdirectory) only the libraries are built by default. Using the library from your own project, as a subproject or an installed package, is in the integration guide.

The API reference

With Doxygen installed, the interstice_docs target builds the reference into build/docs/html:

cmake --build build --target interstice_docs

The published reference is rebuilt with each change on main.

Bundled libraries

SDL3, skribidi, googletest, VMA, vk-bootstrap, HarfBuzz, SheenBidi, libunibreak and budouxc are Git submodules in third_party, pinned on purpose; nanosvg is included in the repository. Their licenses are in THIRD_PARTY_NOTICES.txt.

Clone this wiki locally