Add a top-level CMakeLists.txt that wraps `zig build lib-vt` so that CMake-based downstream projects can consume libghostty-vt without needing to interact with the Zig build system directly. A custom command triggers the zig build during `cmake --build`, and the resulting shared library is exposed as an IMPORTED target. Downstream projects can pull in the library via FetchContent, which fetches the source and builds it as part of their own CMake build, or via find_package after a manual install step. The package config template in dist/cmake/ sets up the ghostty-vt::ghostty-vt target with proper include paths and macOS rpath handling. A c-vt-cmake example demonstrates the FetchContent workflow, creating a terminal, writing VT sequences, and formatting the output as plain text. CI is updated to auto-discover and build CMake-based examples alongside the existing Zig-based ones.
CMake Support for libghostty-vt
The top-level CMakeLists.txt wraps the Zig build system so that CMake
projects can consume libghostty-vt without invoking zig build manually.
Running cmake --build triggers zig build lib-vt automatically.
This means downstream projects do require a working Zig compiler on
PATH to build, but don't need to know any Zig-specific details.
Using FetchContent (recommended)
Add the following to your project's CMakeLists.txt:
include(FetchContent)
FetchContent_Declare(ghostty
GIT_REPOSITORY https://github.com/ghostty-org/ghostty.git
GIT_TAG main
)
FetchContent_MakeAvailable(ghostty)
add_executable(myapp main.c)
target_link_libraries(myapp PRIVATE ghostty-vt)
This fetches the Ghostty source, builds libghostty-vt via Zig during your CMake build, and links it into your target. Headers are added to the include path automatically.
Using a local checkout
If you already have the Ghostty source checked out, skip the download by pointing CMake at it:
cmake -B build -DFETCHCONTENT_SOURCE_DIR_GHOSTTY=/path/to/ghostty
cmake --build build
Using find_package (install-based)
Build and install libghostty-vt first:
cd /path/to/ghostty
cmake -B build
cmake --build build
cmake --install build --prefix /usr/local
Then in your project:
find_package(ghostty-vt REQUIRED)
add_executable(myapp main.c)
target_link_libraries(myapp PRIVATE ghostty-vt::ghostty-vt)
Files
ghostty-vt-config.cmake.in— template for the CMake package config file installed alongside the library, enablingfind_package()support.
Example
See example/c-vt-cmake/ for a complete working example.