#this CMakeLists.txt file is for buildroot usage

cmake_minimum_required(VERSION 3.10.0)

project(crfserialtonetwork)

set(CPACK_PACKAGE_VERSION_MAJOR "1")
set(CPACK_PACKAGE_VERSION_MINOR "3")
set(CPACK_PACKAGE_VERSION_PATCH "2")

include(GNUInstallDirs)

if(NOT CMAKE_BUILD_TYPE)
    message("build mode not specified : falling back to Release mode")
    set(CMAKE_BUILD_TYPE Release)
endif()

IF(CMAKE_BUILD_TYPE MATCHES Debug)
    message("Debug mode")
    add_compile_options(--coverage) # add gcovr generation
    add_compile_options(-g) # add
    add_compile_options(-ggdb) # add
    add_compile_options(-O0) # disable optimisation
ELSE()
    message("Release mode")
    add_definitions(-DQT_NO_DEBUG_OUTPUT)
    add_compile_options(-O3)
ENDIF(CMAKE_BUILD_TYPE MATCHES Debug)

# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed
set(CMAKE_AUTOMOC ON)
# Create code from a list of Qt designer ui files
set(CMAKE_AUTOUIC ON)

find_package(Qt6 REQUIRED COMPONENTS SerialPort Network Sql WebSockets)

# Creating the version file
configure_file(version.h.in version.h)
include_directories(${CMAKE_CURRENT_BINARY_DIR})

set(CORE_SOURCES
    AutoKill.cpp
    SerialDiscoverer.cpp
    SupervisionManager.cpp
    ConfigDatabase.cpp
    ConfigRepository.cpp
    DataForwarder.cpp
    DataForwarderConfig.cpp
    RadioAdapterConfig.cpp
    RawDataForwarder.cpp
    ExtendedRawDataForwarder.cpp
    FileDataForwarder.cpp
    DuosDataForwarder.cpp
    GcpDataForwarder.cpp
    DisplayTextCommand.cpp
    AnalogKillCommand.cpp
    DpmrKillCommand.cpp
    SerialAdapter.cpp
    MyQSerialPort.cpp
    IcomCommand.cpp
    IcomFrameParser.cpp
    GetCurrentChannelCommand.cpp
    GetCurrentChannelCommandResponse.cpp
    RetrieveEsnCommand.cpp
    RetrieveChannelStatusCommandResponse.cpp
    RetrieveCloningCommentCommand.cpp
    RetrieveFrontFirmwareCommand.cpp
    RetrieveDspFirmwareCommand.cpp
    RetrieveFirmwareVersionCommand.cpp
    IcomCommandResponse.cpp
    RetrieveEsnCommandResponse.cpp
    RetrieveCloningCommentCommandResponse.cpp
    RetrieveDspFirmwareCommandResponse.cpp
    RetrieveFirmwareVersionCommandResponse.cpp
    RetrieveFrontFirmwareCommandResponse.cpp
    RetrieveReceivedDpmrCallCommandResponse.cpp
    RetrieveReceivedIdasCallCommandResponse.cpp
    RetrieveReceivedAnalogCallCommandResponse.cpp
    RetrieveReceivedDpmrStatusCommandResponse.cpp
    RetrieveReceivedIdasStatusCommandResponse.cpp
    RetrieveReceivedDpmrGpsLocationCommandResponse.cpp
    RetrieveReceivedIdasGpsLocationCommandResponse.cpp
    RetrieveReceivedDpmrInfoMessageCommandResponse.cpp
    BatteryLimitationAlert.cpp
    TxPowerLimitationAlert.cpp
    UnsollicitedCommandResponse.cpp
    WebsocketServer.cpp
    IcomRegExp.cpp
)

set(HEADERS
    DebugMacros.hpp
    AutoKill.hpp
    SerialDiscoverer.hpp
    SupervisionManager.hpp
    ConfigDatabase.hpp
    ConfigRepository.hpp
    DataForwarder.hpp
    DataForwarderConfig.hpp
    RadioAdapterConfig.hpp
    RawDataForwarder.hpp
    ExtendedRawDataForwarder.hpp
    FileDataForwarder.hpp
    DuosDataForwarder.hpp
    GcpDataForwarder.hpp
    DisplayTextCommand.hpp
    AnalogKillCommand.hpp
    DpmrKillCommand.hpp
    SerialAdapter.hpp
    MyQSerialPort.hpp
    IcomCommand.hpp
    IcomFrameParser.hpp
    GetCurrentChannelCommand.hpp
    GetCurrentChannelCommandResponse.hpp
    RetrieveEsnCommand.hpp
    RetrieveCloningCommentCommand.hpp
    RetrieveFrontFirmwareCommand.hpp
    RetrieveChannelStatusCommandResponse.hpp
    RetrieveDspFirmwareCommand.hpp
    RetrieveFirmwareVersionCommand.hpp
    IcomCommandResponse.hpp
    RetrieveEsnCommandResponse.hpp
    RetrieveCloningCommentCommandResponse.hpp
    RetrieveDspFirmwareCommandResponse.hpp
    RetrieveFirmwareVersionCommandResponse.hpp
    RetrieveFrontFirmwareCommandResponse.hpp
    RetrieveReceivedDpmrCallCommandResponse.hpp
    RetrieveReceivedIdasCallCommandResponse.hpp
    RetrieveReceivedAnalogCallCommandResponse.hpp
    RetrieveReceivedDpmrStatusCommandResponse.hpp
    RetrieveReceivedIdasStatusCommandResponse.hpp
    RetrieveReceivedDpmrGpsLocationCommandResponse.hpp
    RetrieveReceivedIdasGpsLocationCommandResponse.hpp
    RetrieveReceivedDpmrInfoMessageCommandResponse.hpp
    BatteryLimitationAlert.hpp
    TxPowerLimitationAlert.hpp
    UnsollicitedCommandResponse.hpp
    WebsocketServer.hpp
    IcomRegExp.hpp
)

add_executable(crfserialtonetwork main.cpp ${CORE_SOURCES} ${HEADERS})
target_link_libraries(crfserialtonetwork  ${QT_LIBRARIES} )
target_link_libraries(crfserialtonetwork Qt6::Network Qt6::SerialPort Qt6::WebSockets Qt6::Sql ssl crypto)

IF(CMAKE_BUILD_TYPE MATCHES Debug)
    target_link_libraries(crfserialtonetwork gcov)
ENDIF(CMAKE_BUILD_TYPE MATCHES Debug)

install(TARGETS crfserialtonetwork RUNTIME
    DESTINATION "${CMAKE_INSTALL_BINDIR}"
)
