cmake_minimum_required(VERSION 3.16)

project(urigen LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)

find_package(ftxui REQUIRED screen dom component)

set(URIGEN_LIB urigen)

if(NOT UAV_INCLUDE_LIBS)
    if(NOT DEFINED PROJECT_VERSION)
        set(PROJECT_VERSION 1.0.0)
    endif()

    project(${FLASH_LIB} VERSION ${PROJECT_VERSION} DESCRIPTION "${FLASH_LIB} library")
endif()

set(IFACE_CONFIGS
  ../uav-niipp/detail/niipp-config.h
  ../uav-spi/detail/spi-config.h
  ../uav-spi/detail/spi-config.cpp
  ../uav-spi/detail/sync-spi-config.h
  ../uav-spi/detail/sync-spi-config.cpp
)

set(URIGEN_SOURCES
  util.h util.cpp
  interface-component.h interface-component.cpp
  tty-component.h tty-component.cpp
  tcp-component.h tcp-component.cpp
  spi-component.h spi-component.cpp
  libusb-component.h libusb-component.cpp
  bluez-component.h bluez-component.cpp
  niipp-component.h niipp-component.cpp
)

add_executable(${URIGEN_LIB}
    main.cpp
    ${URIGEN_SOURCES}
    ${IFACE_CONFIGS}
)

if(UAV_LIB_URIGEN)
    add_dependencies(${URIGEN_LIB} uavconfdetpojo uav-spi)
endif()

target_link_libraries(${URIGEN_LIB} PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../libuavconfdetpojo.so>
  $<INSTALL_INTERFACE:uavconfdetpojo>
  $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../uav-spi/libuav-spi.so>
  $<INSTALL_INTERFACE:uav-spi>
  ftxui::screen
  ftxui::dom
  ftxui::component
)

target_include_directories(${URIGEN_LIB} PRIVATE
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>
  $<INSTALL_INTERFACE:.>
)
