CMakeLists.txt 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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/editor_core.cpp
  45. src/lua_api.cpp
  46. )
  47. target_include_directories(lumacs_core PUBLIC
  48. ${CMAKE_CURRENT_SOURCE_DIR}/include
  49. )
  50. target_link_libraries(lumacs_core PUBLIC
  51. sol2::sol2
  52. ${LUA_LIBRARIES}
  53. )
  54. # TUI executable (FTXUI-based)
  55. add_executable(lumacs
  56. src/main.cpp
  57. )
  58. target_link_libraries(lumacs PRIVATE
  59. lumacs_core
  60. ftxui::screen
  61. ftxui::dom
  62. ftxui::component
  63. )
  64. # Enable testing
  65. enable_testing()
  66. add_subdirectory(tests EXCLUDE_FROM_ALL)