cmake_minimum_required(VERSION 3.24)
project(udpscope LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  set(CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE)
endif()

find_package(Threads REQUIRED)

# --- deps/plotter: built from the submodule, GTK4 adapter only ----------------
set(PLOT_BUILD_TESTS     OFF CACHE BOOL "" FORCE)
set(PLOT_BUILD_EXAMPLES  OFF CACHE BOOL "" FORCE)
set(PLOT_BUILD_GLFW      OFF CACHE BOOL "" FORCE)
set(PLOT_BUILD_IMGUI     OFF CACHE BOOL "" FORCE)
set(PLOT_BUILD_QT6       OFF CACHE BOOL "" FORCE)
set(PLOT_BUILD_GTK4      ON  CACHE BOOL "" FORCE)
set(PLOT_INSTALL         OFF CACHE BOOL "" FORCE)
add_subdirectory(deps/plotter EXCLUDE_FROM_ALL)

# --- deps/udpsclient: vendored C99 receiver ----------------------------------
add_library(udpsclient STATIC deps/udpsclient/udps_client.c)
target_include_directories(udpsclient PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/deps/udpsclient)
set_target_properties(udpsclient PROPERTIES C_STANDARD 99 C_STANDARD_REQUIRED ON)
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
  target_compile_options(udpsclient PRIVATE -Wall -Wextra)
endif()

# --- the application ----------------------------------------------------------
add_executable(udpscope
  src/main.cpp
  src/config.cpp
  src/channel.cpp
  src/model.cpp
  src/trigger.cpp
  src/acquisition.cpp
  src/plot_host.cpp
  src/export.cpp
  src/layout_store.cpp
  src/measure.cpp
  src/ui.cpp
)

target_include_directories(udpscope PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
target_link_libraries(udpscope PRIVATE plot::gtk4 udpsclient Threads::Threads)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
  target_compile_options(udpscope PRIVATE -Wall -Wextra -Wpedantic)
endif()
