CMakeLists.txt 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. # GTK4 / gtkmm for GUI
  24. find_package(PkgConfig REQUIRED)
  25. pkg_check_modules(GTKMM gtkmm-4.0)
  26. # Lua and sol2
  27. find_package(Lua 5.4 REQUIRED)
  28. # sol2 - use develop branch for latest compatibility fixes
  29. FetchContent_Declare(
  30. sol2
  31. GIT_REPOSITORY https://github.com/ThePhD/sol2.git
  32. GIT_TAG develop
  33. GIT_SHALLOW TRUE
  34. )
  35. FetchContent_MakeAvailable(sol2)
  36. # Core library (UI-independent)
  37. add_library(lumacs_core STATIC
  38. src/buffer.cpp
  39. src/window.cpp
  40. src/editor_core.cpp
  41. src/lua_api.cpp
  42. src/kill_ring.cpp
  43. src/theme.cpp
  44. src/config.cpp
  45. src/keybinding.cpp
  46. src/command_system.cpp
  47. src/modeline.cpp
  48. )
  49. target_include_directories(lumacs_core PUBLIC
  50. ${CMAKE_CURRENT_SOURCE_DIR}/include
  51. ${LUA_INCLUDE_DIR}
  52. )
  53. target_link_libraries(lumacs_core PUBLIC
  54. sol2::sol2
  55. ${LUA_LIBRARIES}
  56. )
  57. # Main Executable (Single binary)
  58. add_executable(lumacs
  59. src/main.cpp
  60. src/tui_editor.cpp
  61. src/gtk_editor.cpp
  62. )
  63. target_link_libraries(lumacs PRIVATE
  64. lumacs_core
  65. ${CURSES_LIBRARIES}
  66. )
  67. target_include_directories(lumacs PRIVATE
  68. ${CURSES_INCLUDE_DIR}
  69. )
  70. # Configure GTK if available
  71. if(GTKMM_FOUND)
  72. message(STATUS "GTKMM 4.0 found - Building with GUI support")
  73. target_compile_definitions(lumacs PRIVATE LUMACS_WITH_GTK)
  74. target_include_directories(lumacs PRIVATE ${GTKMM_INCLUDE_DIRS})
  75. target_link_libraries(lumacs PRIVATE ${GTKMM_LIBRARIES})
  76. else()
  77. message(WARNING "GTKMM 4.0 not found - Building TUI only")
  78. endif()
  79. # Enable testing
  80. # enable_testing()
  81. # add_subdirectory(tests EXCLUDE_FROM_ALL)