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) # ncurses for TUI (better control key support) find_package(Curses REQUIRED) # Optional: Keep FTXUI for comparison (commented out for now) # 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 src/kill_ring.cpp src/theme.cpp src/config.cpp src/keybinding.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 (ncurses-based) add_executable(lumacs src/main_ncurses.cpp ) target_link_libraries(lumacs PRIVATE lumacs_core ${CURSES_LIBRARIES} ) target_include_directories(lumacs PRIVATE ${CURSES_INCLUDE_DIR} ) # Keep old FTXUI version for comparison (temporarily disabled) # add_executable(lumacs_ftxui # src/main.cpp # ) # target_link_libraries(lumacs_ftxui PRIVATE # lumacs_core # ftxui::screen # ftxui::dom # ftxui::component # ) # Enable testing enable_testing() add_subdirectory(tests EXCLUDE_FROM_ALL)