cmake_minimum_required(VERSION 3.20) project(lumacs VERSION 0.1.0 LANGUAGES CXX) # C++20 standard set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # Export compile commands for clangd/LSP set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Build type if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() # Compiler warnings if(MSVC) add_compile_options(/W4 /WX) else() add_compile_options(-Wall -Wextra -Wpedantic -Werror) endif() # Dependencies include(FetchContent) # FTXUI for TUI FetchContent_Declare( ftxui GIT_REPOSITORY https://github.com/ArthurSonzogni/FTXUI.git GIT_TAG v5.0.0 ) set(FTXUI_BUILD_DOCS OFF CACHE BOOL "" FORCE) set(FTXUI_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) set(FTXUI_ENABLE_INSTALL OFF CACHE BOOL "" FORCE) FetchContent_MakeAvailable(ftxui) # Lua and sol2 find_package(Lua 5.4 REQUIRED) # sol2 - use develop branch for latest compatibility fixes FetchContent_Declare( sol2 GIT_REPOSITORY https://github.com/ThePhD/sol2.git GIT_TAG develop GIT_SHALLOW TRUE ) FetchContent_MakeAvailable(sol2) # Core library (UI-independent) add_library(lumacs_core STATIC src/buffer.cpp src/window.cpp src/editor_core.cpp src/lua_api.cpp ) target_include_directories(lumacs_core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${LUA_INCLUDE_DIR} ) target_link_libraries(lumacs_core PUBLIC sol2::sol2 ${LUA_LIBRARIES} ) # TUI executable (FTXUI-based) add_executable(lumacs src/main.cpp ) target_link_libraries(lumacs PRIVATE lumacs_core ftxui::screen ftxui::dom ftxui::component ) # Enable testing enable_testing() add_subdirectory(tests EXCLUDE_FROM_ALL)