CMakeLists.txt 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. cmake_minimum_required(VERSION 3.20)
  2. project(lumacs VERSION 0.1.0 LANGUAGES CXX)
  3. # C++20 standard
  4. set(CMAKE_CXX_STANDARD 20)
  5. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  6. set(CMAKE_CXX_EXTENSIONS OFF)
  7. # Export compile commands for clangd/LSP
  8. set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
  9. # Build type
  10. if(NOT CMAKE_BUILD_TYPE)
  11. set(CMAKE_BUILD_TYPE Release)
  12. endif()
  13. # Compiler warnings
  14. if(MSVC)
  15. add_compile_options(/W4 /WX)
  16. else()
  17. add_compile_options(-Wall -Wextra -Wpedantic -Werror)
  18. endif()
  19. # Dependencies
  20. include(FetchContent)
  21. # ncurses for TUI (better control key support)
  22. find_package(Curses REQUIRED)
  23. # Optional: Keep FTXUI for comparison (commented out for now)
  24. # FetchContent_Declare(
  25. # ftxui
  26. # GIT_REPOSITORY https://github.com/ArthurSonzogni/FTXUI.git
  27. # GIT_TAG v5.0.0
  28. # )
  29. # set(FTXUI_BUILD_DOCS OFF CACHE BOOL "" FORCE)
  30. # set(FTXUI_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
  31. # set(FTXUI_ENABLE_INSTALL OFF CACHE BOOL "" FORCE)
  32. # FetchContent_MakeAvailable(ftxui)
  33. # Lua and sol2
  34. find_package(Lua 5.4 REQUIRED)
  35. # sol2 - use develop branch for latest compatibility fixes
  36. FetchContent_Declare(
  37. sol2
  38. GIT_REPOSITORY https://github.com/ThePhD/sol2.git
  39. GIT_TAG develop
  40. GIT_SHALLOW TRUE
  41. )
  42. FetchContent_MakeAvailable(sol2)
  43. # Core library (UI-independent)
  44. add_library(lumacs_core STATIC
  45. src/buffer.cpp
  46. src/window.cpp
  47. src/editor_core.cpp
  48. src/lua_api.cpp
  49. src/kill_ring.cpp
  50. src/theme.cpp
  51. )
  52. target_include_directories(lumacs_core PUBLIC
  53. ${CMAKE_CURRENT_SOURCE_DIR}/include
  54. ${LUA_INCLUDE_DIR}
  55. )
  56. target_link_libraries(lumacs_core PUBLIC
  57. sol2::sol2
  58. ${LUA_LIBRARIES}
  59. )
  60. # TUI executable (ncurses-based)
  61. add_executable(lumacs
  62. src/main_ncurses.cpp
  63. )
  64. target_link_libraries(lumacs PRIVATE
  65. lumacs_core
  66. ${CURSES_LIBRARIES}
  67. )
  68. target_include_directories(lumacs PRIVATE
  69. ${CURSES_INCLUDE_DIR}
  70. )
  71. # Keep old FTXUI version for comparison (temporarily disabled)
  72. # add_executable(lumacs_ftxui
  73. # src/main.cpp
  74. # )
  75. # target_link_libraries(lumacs_ftxui PRIVATE
  76. # lumacs_core
  77. # ftxui::screen
  78. # ftxui::dom
  79. # ftxui::component
  80. # )
  81. # Enable testing
  82. enable_testing()
  83. add_subdirectory(tests EXCLUDE_FROM_ALL)