cmake_minimum_required(VERSION 3.25) project(voicecat VERSION 0.0.1 DESCRIPTION "Self-hosted native voice & text chat (see docs/)" # C is needed for the vendored RNNoise noise-suppression lib (third_party/rnnoise). LANGUAGES CXX C) # On iOS, audio_engine.cpp includes miniaudio.h which pulls in AVFoundation Objective-C # headers. Those cannot be compiled as C++; we set audio_engine.cpp's LANGUAGE to OBJCXX # in core/CMakeLists.txt, but that requires the language to be enabled first. if(CMAKE_SYSTEM_NAME STREQUAL "iOS") enable_language(OBJCXX) endif() # ── Options ─────────────────────────────────────────────────────────────────── # The M0 skeleton compiles with NO third-party dependencies: every subsystem is a # stub that returns VC_ERR_NOT_IMPLEMENTED. As each subsystem is built out, flip # VOICECAT_USE_VCPKG_DEPS=ON so CMake pulls the real libraries (mbedTLS, libsodium, # opus, protobuf, ...) via the vcpkg toolchain (see vcpkg.json / docs/tech-stack.md). option(VOICECAT_USE_VCPKG_DEPS "Link real third-party deps via vcpkg" OFF) option(VOICECAT_BUILD_SERVER "Build voicecat-server" ON) option(VOICECAT_BUILD_TOOLS "Build the vccli headless test client" ON) option(VOICECAT_BUILD_TESTS "Build tests" ON) option(VOICECAT_BUILD_SHARED "Build libvoicecat as a shared library" OFF) # ── Global settings ─────────────────────────────────────────────────────────── set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE Debug CACHE STRING "" FORCE) endif() set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) # ── Targets ─────────────────────────────────────────────────────────────────── add_subdirectory(core) if(VOICECAT_BUILD_SERVER) add_subdirectory(server) endif() if(VOICECAT_BUILD_TOOLS) add_subdirectory(tools/vccli) if(VOICECAT_USE_VCPKG_DEPS) add_subdirectory(tools/voicecat-admin) endif() endif() if(VOICECAT_BUILD_TESTS) enable_testing() add_subdirectory(tests) endif() message(STATUS "VoiceCat ${PROJECT_VERSION} configured " "(vcpkg deps: ${VOICECAT_USE_VCPKG_DEPS}, " "server: ${VOICECAT_BUILD_SERVER}, tools: ${VOICECAT_BUILD_TOOLS})")