cmake_minimum_required(VERSION 3.10)

project(ukui-air-gesture)

include(GNUInstallDirs)

cmake_policy(SET CMP0071 NEW)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(PkgConfig REQUIRED)
find_package(Qt5 REQUIRED COMPONENTS Core Widgets DBus)
find_package(OpenCV REQUIRED COMPONENTS core imgproc videoio imgcodecs)
find_package(onnxruntime REQUIRED)

pkg_check_modules(PC_LIBS REQUIRED kysdk-waylandhelper kysdk-ukuiwindowhelper gsettings-qt libevdev)

qt5_add_resources(RESOURCE_FILES resources.qrc)

add_custom_command(
    OUTPUT
        ${CMAKE_CURRENT_BINARY_DIR}/ukui-window-management.h
        ${CMAKE_CURRENT_BINARY_DIR}/ukui-window-management.cpp
    COMMAND wayland-scanner++
        ${CMAKE_CURRENT_SOURCE_DIR}/proto/ukui-window-management.xml
        ${CMAKE_CURRENT_BINARY_DIR}/ukui-window-management.h
        ${CMAKE_CURRENT_BINARY_DIR}/ukui-window-management.cpp
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/proto/ukui-window-management.xml
)

add_executable(ukui-air-gesture
    main.cpp
    singleapplication.cpp
    singleapplication.h

    dbus/dbusmanager.cpp
    dbus/dbusmanager.h
    dbus/dbusadaptor.cpp
    dbus/dbusadaptor.h
    dbus/gestureactionexecutor.cpp
    dbus/gestureactionexecutor.h
    dbus/mediacontroller.cpp
    dbus/mediacontroller.h

    ui/mainwindow.cpp
    ui/mainwindow.h

    pipeline/gesturepipeline.cpp
    pipeline/gesturepipeline.h
    pipeline/onnxmodel.cpp
    pipeline/onnxmodel.h
    pipeline/cameracapture.cpp
    pipeline/cameracapture.h
    pipeline/framewriter.cpp
    pipeline/framewriter.h
    pipeline/handrecognizer.cpp
    pipeline/handrecognizer.h
    pipeline/gestureclassifier.cpp
    pipeline/gestureclassifier.h
    pipeline/handtypes.h

    ${CMAKE_CURRENT_BINARY_DIR}/ukui-window-management.cpp
    ${RESOURCE_FILES}
)

target_include_directories(ukui-air-gesture PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}/dbus
    ${CMAKE_CURRENT_SOURCE_DIR}/ui
    ${CMAKE_CURRENT_SOURCE_DIR}/pipeline
    ${CMAKE_SOURCE_DIR}/include
    ${PC_LIBS_INCLUDE_DIRS}
    ${CMAKE_CURRENT_BINARY_DIR}
)

target_link_libraries(ukui-air-gesture PRIVATE
    Qt5::Widgets
    Qt5::Core
    Qt5::DBus
    opencv_core
    opencv_imgproc
    opencv_videoio
    opencv_imgcodecs
    onnxruntime::onnxruntime
    ${PC_LIBS_LIBRARIES}
    wayland-client++
    ukui-log4qt
)

install(TARGETS ukui-air-gesture
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

install(FILES org.ukui.air.gesture.desktop
    DESTINATION /etc/xdg/autostart
)

install(
    DIRECTORY models/
    DESTINATION ${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/models
)
