136 lines
4.5 KiB
CMake
136 lines
4.5 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
||
project(kiosk-shell CXX)
|
||
|
||
# 对应《VDI 云桌面软件开发方案》2.2 节技术栈定版:
|
||
# kiosk 用 C/C++/Qt;会话通道统一 Moonlight(RDP 渲染管线已移除,代码存于 git 历史)
|
||
set(CMAKE_CXX_STANDARD 17)
|
||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||
set(CMAKE_AUTOMOC ON)
|
||
set(CMAKE_AUTORCC ON)
|
||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||
|
||
if(NOT CMAKE_BUILD_TYPE)
|
||
set(CMAKE_BUILD_TYPE Release)
|
||
endif()
|
||
|
||
# ---- Qt5 ----
|
||
find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets Network)
|
||
include(CTest)
|
||
|
||
set(KIOSK_SOURCES
|
||
resources/brand.qrc
|
||
src/main_window.cpp
|
||
src/login_page.cpp
|
||
src/desktop_list_page.cpp
|
||
src/desktop_settings_dialog.cpp
|
||
src/desktop_service.cpp
|
||
src/platform_client.cpp
|
||
src/system_metrics.cpp
|
||
src/terminal_policy.cpp
|
||
src/desktop_store.cpp
|
||
src/moonlight_session.cpp
|
||
src/transition_overlay.cpp
|
||
src/state_machine.cpp
|
||
src/config.cpp
|
||
)
|
||
|
||
add_executable(kiosk-shell src/main.cpp ${KIOSK_SOURCES})
|
||
|
||
target_include_directories(kiosk-shell PRIVATE
|
||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||
)
|
||
|
||
target_link_libraries(kiosk-shell PRIVATE
|
||
Qt5::Core
|
||
Qt5::Gui
|
||
Qt5::Widgets
|
||
Qt5::Network
|
||
)
|
||
|
||
if(UNIX AND NOT APPLE)
|
||
find_package(X11 REQUIRED)
|
||
target_link_libraries(kiosk-shell PRIVATE X11::X11)
|
||
endif()
|
||
|
||
# 看门狗 Monitor:独立进程,监控主进程假死/崩溃
|
||
add_executable(vdi-kiosk-monitor
|
||
src/monitor_main.cpp
|
||
src/monitor.cpp
|
||
)
|
||
|
||
target_include_directories(vdi-kiosk-monitor PRIVATE
|
||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||
)
|
||
|
||
find_package(Threads REQUIRED)
|
||
target_link_libraries(vdi-kiosk-monitor PRIVATE Threads::Threads)
|
||
|
||
if(BUILD_TESTING)
|
||
find_package(Qt5 REQUIRED COMPONENTS Test)
|
||
add_executable(test-system-metrics tests/test_system_metrics.cpp src/system_metrics.cpp)
|
||
target_include_directories(test-system-metrics PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
||
target_link_libraries(test-system-metrics PRIVATE Qt5::Core Qt5::Test)
|
||
add_test(NAME system-metrics COMMAND test-system-metrics)
|
||
add_executable(test-terminal-policy tests/test_terminal_policy.cpp src/terminal_policy.cpp)
|
||
target_include_directories(test-terminal-policy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
||
target_link_libraries(test-terminal-policy PRIVATE Qt5::Core Qt5::Test)
|
||
add_test(NAME terminal-policy COMMAND test-terminal-policy)
|
||
if(UNIX)
|
||
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
||
add_test(NAME display-guard COMMAND ${Python3_EXECUTABLE}
|
||
${CMAKE_CURRENT_SOURCE_DIR}/tests/test_display_guard.py)
|
||
endif()
|
||
|
||
add_executable(test-moonlight-session
|
||
tests/test_moonlight_session.cpp
|
||
src/moonlight_session.cpp
|
||
)
|
||
target_include_directories(test-moonlight-session PRIVATE
|
||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||
)
|
||
target_link_libraries(test-moonlight-session PRIVATE
|
||
Qt5::Core
|
||
Qt5::Test
|
||
)
|
||
add_test(NAME moonlight-session COMMAND test-moonlight-session)
|
||
|
||
add_executable(test-desktop-list-page
|
||
tests/test_desktop_list_page.cpp
|
||
src/desktop_list_page.cpp
|
||
resources/brand.qrc
|
||
)
|
||
target_include_directories(test-desktop-list-page PRIVATE
|
||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||
)
|
||
target_link_libraries(test-desktop-list-page PRIVATE
|
||
Qt5::Core
|
||
Qt5::Gui
|
||
Qt5::Widgets
|
||
Qt5::Test
|
||
)
|
||
add_test(NAME desktop-list-page COMMAND test-desktop-list-page)
|
||
set_tests_properties(desktop-list-page PROPERTIES
|
||
ENVIRONMENT "QT_QPA_PLATFORM=offscreen"
|
||
)
|
||
|
||
# Render the native page at target resolutions without occupying the display.
|
||
add_executable(preview-desktop-list tests/preview_desktop_list.cpp
|
||
src/desktop_list_page.cpp resources/brand.qrc)
|
||
target_include_directories(preview-desktop-list PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
||
target_link_libraries(preview-desktop-list PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets)
|
||
|
||
add_executable(test-main-window tests/test_main_window.cpp ${KIOSK_SOURCES})
|
||
target_include_directories(test-main-window PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
||
target_link_libraries(test-main-window PRIVATE
|
||
Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Network Qt5::Test)
|
||
if(UNIX AND NOT APPLE)
|
||
target_link_libraries(test-main-window PRIVATE X11::X11)
|
||
endif()
|
||
add_test(NAME main-window-boot COMMAND test-main-window)
|
||
set_tests_properties(main-window-boot PROPERTIES
|
||
ENVIRONMENT "QT_QPA_PLATFORM=offscreen;DISPLAY="
|
||
)
|
||
endif()
|
||
|
||
install(TARGETS kiosk-shell vdi-kiosk-monitor RUNTIME DESTINATION bin)
|