CMakeLists.txt 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. # FTXUI for TUI
  22. FetchContent_Declare(
  23. ftxui
  24. GIT_REPOSITORY https://github.com/ArthurSonzogni/FTXUI.git
  25. GIT_TAG v5.0.0
  26. )
  27. set(FTXUI_BUILD_DOCS OFF CACHE BOOL "" FORCE)
  28. set(FTXUI_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
  29. set(FTXUI_ENABLE_INSTALL OFF CACHE BOOL "" FORCE)
  30. FetchContent_MakeAvailable(ftxui)
  31. # Lua and sol2
  32. find_package(Lua 5.4 REQUIRED)
  33. # sol2 - use develop branch for latest compatibility fixes
  34. FetchContent_Declare(
  35. sol2
  36. GIT_REPOSITORY https://github.com/ThePhD/sol2.git
  37. GIT_TAG develop
  38. GIT_SHALLOW TRUE
  39. )
  40. FetchContent_MakeAvailable(sol2)
  41. # Core library (UI-independent)
  42. add_library(lumacs_core STATIC
  43. src/buffer.cpp
  44. src/window.cpp
  45. src/editor_core.cpp
  46. src/lua_api.cpp
  47. )
  48. target_include_directories(lumacs_core PUBLIC
  49. ${CMAKE_CURRENT_SOURCE_DIR}/include
  50. ${LUA_INCLUDE_DIR}
  51. )
  52. target_link_libraries(lumacs_core PUBLIC
  53. sol2::sol2
  54. ${LUA_LIBRARIES}
  55. )
  56. # TUI executable (FTXUI-based)
  57. add_executable(lumacs
  58. src/main.cpp
  59. )
  60. target_link_libraries(lumacs PRIVATE
  61. lumacs_core
  62. ftxui::screen
  63. ftxui::dom
  64. ftxui::component
  65. )
  66. # Enable testing
  67. enable_testing()
  68. add_subdirectory(tests EXCLUDE_FROM_ALL)