Three issues when linking the static library with the MSVC linker: Use the LLVM backend on Windows to produce valid COFF objects. The self-hosted backend generates compiler_rt objects with invalid COMDAT sections that the MSVC linker rejects (LNK1143). Disable bundling ubsan_rt on Windows. Zig's ubsan runtime emits /exclude-symbols linker directives that MSVC does not understand (LNK4229). Add ntdll and kernel32 as transitive link dependencies for the static library on Windows. The Zig standard library uses NT API functions (NtClose, NtCreateSection, etc.) that consumers must link.
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 -Demit-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.