# Compile the desktop application itself. Harmony owns only platform services;
# callbacks, settings, history, DeskHub and session state stay in apps/desktop.
set(DESKTOP "${CROSSDESK_ROOT}/apps/desktop/src")
set(HARMONY "${CROSSDESK_ROOT}/apps/harmony")
file(GLOB RUNTIME CONFIGURE_DEPENDS "${DESKTOP}/gui/runtime/*.cpp")
file(GLOB_RECURSE FEATURES CONFIGURE_DEPENDS "${DESKTOP}/gui/features/*.cpp")
file(GLOB COMMON CONFIGURE_DEPENDS "${DESKTOP}/common/*.cpp" "${DESKTOP}/thumbnail/*.cpp"
    "${DESKTOP}/version_checker/*.cpp" "${CROSSDESK_ROOT}/libs/wire/src/*.cpp")
target_sources(slint_desktop PRIVATE ${RUNTIME} ${FEATURES} ${COMMON}
    "${DESKTOP}/gui/application/gui_application.cpp"
    "${DESKTOP}/gui/rendering/slint_video_presenter.cpp"
    "${DESKTOP}/platform/common/gui/service_status_runtime.cpp"
    "${DESKTOP}/privacy/privacy_controller.cpp"
    "${DESKTOP}/speaker_capturer/speaker_capture_controller.cpp"
    "${DESKTOP}/config_center/config_center.cpp" "${DESKTOP}/autostart/autostart.cpp"
    "${DESKTOP}/path_manager/path_manager.cpp" "${DESKTOP}/log/rd_log.cpp"
    "${DESKTOP}/tools/file_transfer.cpp"
    "${CMAKE_CURRENT_LIST_DIR}/tray.cpp" "${CMAKE_CURRENT_LIST_DIR}/services.cpp" "${CMAKE_CURRENT_LIST_DIR}/devices.cpp"
    "${CMAKE_CURRENT_LIST_DIR}/keyboard_hook.cpp"
    "${HARMONY}/native/input.cpp" "${HARMONY}/native/audio.cpp" "${HARMONY}/native/capture.cpp"
    "${HARMONY}/native/capture_surface.cpp")
target_include_directories(slint_desktop PRIVATE "${CMAKE_CURRENT_LIST_DIR}/include"
    "${CMAKE_CURRENT_LIST_DIR}" "${HARMONY}/native" "${DESKTOP}" "${DESKTOP}/gui"
    "${DESKTOP}/common" "${DESKTOP}/config_center" "${DESKTOP}/autostart"
    "${DESKTOP}/path_manager" "${DESKTOP}/log" "${DESKTOP}/tools"
    "${DESKTOP}/thumbnail" "${DESKTOP}/version_checker" "${DESKTOP}/privacy"
    "${DESKTOP}/device_controller" "${DESKTOP}/speaker_capturer" "${DESKTOP}/screen_capturer"
    "${DESKTOP}/platform/common/input" "${CROSSDESK_ROOT}/libs/wire/include"
    "${CROSSDESK_ROOT}/libs/controller/include"
    "${CROSSDESK_ROOT}/deps/submodules/minirtc/src/api"
    "${CROSSDESK_ROOT}/deps/submodules/minirtc/src/common"
    "${CROSSDESK_ROOT}/deps/submodules/minirtc/src/ws"
    "${CROSSDESK_ROOT}/deps/submodules/minirtc/src/pc"
    "${CROSSDESK_ROOT}/deps/submodules/minirtc/src/media/resolution_adapter")
file(GLOB PACKAGE_INCLUDES "${HARMONY}/.native/packages/*/*/*/*/include")
target_include_directories(slint_desktop SYSTEM PRIVATE ${PACKAGE_INCLUDES})
file(GLOB QUEUE_INCLUDE "${HARMONY}/.native/packages/c/concurrentqueue/*/*/include/concurrentqueue/moodycamel")
target_include_directories(slint_desktop SYSTEM PRIVATE ${QUEUE_INCLUDE} "${SLINT_DESKTOP_DEPS}")
target_compile_definitions(slint_desktop PRIVATE FMT_CONSTEVAL= CPPHTTPLIB_OPENSSL_SUPPORT
    CROSSDESK_VERSION="${CROSSDESK_VERSION}" CROSSDESK_HARMONY_DESKTOP=1)
# Use exactly the native dependency versions built by scripts/build.py.
set(NATIVE_LIB "${HARMONY}/.native/build/harmony/arm64-v8a/release/libminirtc.a")
if(NOT EXISTS "${NATIVE_LIB}")
    message(FATAL_ERROR "Build apps/harmony/scripts/build.py --native-only first")
endif()
file(GLOB PACKAGE_LIBS "${HARMONY}/.native/packages/*/*/*/*/lib/*.a")
target_link_libraries(slint_desktop PRIVATE "-Wl,--start-group" "${NATIVE_LIB}"
    ${PACKAGE_LIBS} "-Wl,--end-group" native_buffer native_image ohaudio native_avscreen_capture
    native_media_core native_media_codecbase native_media_vdec ohinput pasteboard udmf)
target_link_options(slint_desktop PRIVATE -Wl,--no-undefined)
