cmake_minimum_required(VERSION 3.21) project(OrbitHub VERSION 0.1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) find_package(Qt6 6.2 REQUIRED COMPONENTS Widgets Sql) qt_standard_project_setup() add_subdirectory(third_party/KodoTerm) if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/third_party/FreeRDP/CMakeLists.txt") message(FATAL_ERROR "Vendored FreeRDP source is missing at third_party/FreeRDP") endif() # Pin FreeRDP build to the vendored source tree so headers/libs are always from the same revision. set(FREERDP_UNIFIED_BUILD ON CACHE BOOL "" FORCE) set(WITH_MANPAGES OFF CACHE BOOL "" FORCE) set(WITH_SAMPLE OFF CACHE BOOL "" FORCE) set(BUILD_TESTING OFF CACHE BOOL "" FORCE) set(BUILD_TESTING_INTERNAL OFF CACHE BOOL "" FORCE) set(WITH_CLIENT_COMMON ON CACHE BOOL "" FORCE) set(WITH_CLIENT OFF CACHE BOOL "" FORCE) set(WITH_CLIENT_SDL OFF CACHE BOOL "" FORCE) set(WITH_CLIENT_INTERFACE OFF CACHE BOOL "" FORCE) set(WITH_SERVER OFF CACHE BOOL "" FORCE) set(WITH_CHANNELS ON CACHE BOOL "" FORCE) set(WITH_CLIENT_CHANNELS ON CACHE BOOL "" FORCE) set(WITH_FUSE OFF CACHE BOOL "" FORCE) set(CHANNEL_DRDYNVC ON CACHE BOOL "" FORCE) set(CHANNEL_DRDYNVC_CLIENT ON CACHE BOOL "" FORCE) set(CHANNEL_DISP ON CACHE BOOL "" FORCE) set(CHANNEL_DISP_CLIENT ON CACHE BOOL "" FORCE) set(CHANNEL_AINPUT OFF CACHE BOOL "" FORCE) set(CHANNEL_AUDIN OFF CACHE BOOL "" FORCE) set(CHANNEL_CLIPRDR OFF CACHE BOOL "" FORCE) set(CHANNEL_DRIVE OFF CACHE BOOL "" FORCE) set(CHANNEL_ECHO OFF CACHE BOOL "" FORCE) set(CHANNEL_ENCOMSP OFF CACHE BOOL "" FORCE) set(CHANNEL_GEOMETRY OFF CACHE BOOL "" FORCE) set(CHANNEL_LOCATION OFF CACHE BOOL "" FORCE) set(CHANNEL_PARALLEL OFF CACHE BOOL "" FORCE) set(CHANNEL_PRINTER OFF CACHE BOOL "" FORCE) set(CHANNEL_RAIL OFF CACHE BOOL "" FORCE) set(CHANNEL_RDPDR OFF CACHE BOOL "" FORCE) set(CHANNEL_RDPEAR OFF CACHE BOOL "" FORCE) set(CHANNEL_RDPECAM OFF CACHE BOOL "" FORCE) set(CHANNEL_RDPEI OFF CACHE BOOL "" FORCE) set(CHANNEL_RDPEMSC OFF CACHE BOOL "" FORCE) set(CHANNEL_RDPGFX OFF CACHE BOOL "" FORCE) set(CHANNEL_RDPSND OFF CACHE BOOL "" FORCE) set(CHANNEL_REMDESK OFF CACHE BOOL "" FORCE) set(CHANNEL_SERIAL OFF CACHE BOOL "" FORCE) set(CHANNEL_SMARTCARD OFF CACHE BOOL "" FORCE) set(CHANNEL_SSHAGENT OFF CACHE BOOL "" FORCE) set(CHANNEL_TELEMETRY OFF CACHE BOOL "" FORCE) set(CHANNEL_URBDRC OFF CACHE BOOL "" FORCE) set(CHANNEL_VIDEO OFF CACHE BOOL "" FORCE) set(WITH_FFMPEG OFF CACHE BOOL "" FORCE) set(WITH_DSP_FFMPEG OFF CACHE BOOL "" FORCE) set(WITH_VIDEO_FFMPEG OFF CACHE BOOL "" FORCE) set(WITH_CAIRO OFF CACHE BOOL "" FORCE) set(WITH_SWSCALE OFF CACHE BOOL "" FORCE) set(WITH_JPEG OFF CACHE BOOL "" FORCE) set(WITH_KRB5 OFF CACHE BOOL "" FORCE) set(WITH_UNICODE_BUILTIN ON CACHE BOOL "" FORCE) set(WITH_WINPR_TOOLS OFF CACHE BOOL "" FORCE) add_subdirectory(third_party/FreeRDP EXCLUDE_FROM_ALL) add_executable(orbithub src/main.cpp src/profile_dialog.cpp src/profile_dialog.h src/profile_repository.cpp src/profile_repository.h src/profiles_window.cpp src/profiles_window.h src/session_backend.h src/session_backend_factory.cpp src/session_backend_factory.h src/session_tab.cpp src/session_tab.h src/rdp_display_widget.cpp src/rdp_display_widget.h src/terminal_view.cpp src/terminal_view.h src/session_window.cpp src/session_window.h src/rdp_session_backend.cpp src/rdp_session_backend.h src/ssh_session_backend.cpp src/ssh_session_backend.h src/unsupported_session_backend.cpp src/unsupported_session_backend.h ) target_link_libraries(orbithub PRIVATE Qt6::Widgets Qt6::Sql) target_link_libraries(orbithub PRIVATE KodoTerm::KodoTerm) if(TARGET freerdp AND TARGET winpr) target_compile_definitions(orbithub PRIVATE ORBITHUB_HAS_FREERDP) target_include_directories(orbithub PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/third_party/FreeRDP/include ${CMAKE_CURRENT_SOURCE_DIR}/third_party/FreeRDP/winpr/include ${CMAKE_CURRENT_BINARY_DIR}/third_party/FreeRDP/include ${CMAKE_CURRENT_BINARY_DIR}/third_party/FreeRDP/winpr/include ) target_link_libraries(orbithub PRIVATE freerdp winpr) if(TARGET freerdp-client) target_link_libraries(orbithub PRIVATE freerdp-client) endif() else() message(FATAL_ERROR "Vendored FreeRDP targets were not produced as expected.") endif() install(TARGETS orbithub RUNTIME DESTINATION bin)