feat: cmake win

This commit is contained in:
Barry 2021-12-13 09:14:01 +08:00 committed by 冉坤
parent 2bcb325539
commit c08686554c
24 changed files with 620 additions and 667 deletions

21
-CMakeLists.txt Normal file
View file

@ -0,0 +1,21 @@
cmake_minimum_required(VERSION 3.19 FATAL_ERROR)
# Read version numbers from file
file (STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/QtScrcpy/version STRING_VERSION)
message(STATUS "QtScrcpy Version ${STRING_VERSION}")
project(QtScrcpy
VERSION ${STRING_VERSION}
LANGUAGES C CXX
)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
enable_language(OBJCXX)
endif()
# Split version numbers
string(REPLACE "." ";" VERSION_LIST ${STRING_VERSION})
list(GET VERSION_LIST 0 VERSION_MAJOR)
list(GET VERSION_LIST 1 VERSION_MINOR)
list(GET VERSION_LIST 2 VERSION_PATCH)
add_subdirectory(QtScrcpy)

View file

@ -1,21 +1,4 @@
cmake_minimum_required(VERSION 3.19 FATAL_ERROR)
# Read version numbers from file
file (STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/QtScrcpy/version STRING_VERSION)
message(STATUS "QtScrcpy Version ${STRING_VERSION}")
project(QtScrcpy
VERSION ${STRING_VERSION}
LANGUAGES C CXX
)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
enable_language(OBJCXX)
endif()
# Split version numbers
string(REPLACE "." ";" VERSION_LIST ${STRING_VERSION})
list(GET VERSION_LIST 0 VERSION_MAJOR)
list(GET VERSION_LIST 1 VERSION_MINOR)
list(GET VERSION_LIST 2 VERSION_PATCH)
project(all)
add_subdirectory(QtScrcpy)

319
QtScrcpy/-CMakeLists.txt Normal file
View file

@ -0,0 +1,319 @@
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Network LinguistTools REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Network LinguistTools REQUIRED)
if(MSVC)
# FFmpeg cannot be compiled natively by MSVC version < 12.0 (2013)
if(MSVC_VERSION LESS 1800)
message(FATAL_ERROR "[QtScrcpy] FATAL ERROR: MSVC version is older than 12.0 (2013).")
endif()
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
# ensure we use minimal "windows.h" lib without the crazy min max macros
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D \"WIN32_LEAN_AND_MEAN\"")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D \"NOMINMAX\"")
# disable SAFESEH - to avoid "LNK2026: module unsafe" on "OpenAL32.lib"
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D \"SAFESEH:NO\"")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO")
SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO")
endif()
# ==================== macOS ====================
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
# QS_MAC_RESOURCES: esource file list stored in Contents/MacOS
file(GLOB QS_MAC_RESOURCES "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/*.dylib")
list(APPEND QS_MAC_RESOURCES
"${PROJECT_SOURCE_DIR}/third_party/scrcpy-server"
"${PROJECT_SOURCE_DIR}/adb/mac/adb"
)
# QS_MAC_CONFIG: Config file stored in Contents/MacOS/config
set(QS_MAC_CONFIG "${PROJECT_SOURCE_DIR}/config/config.ini")
endif()
set(QS_TS_FILES
${CMAKE_CURRENT_SOURCE_DIR}/res/i18n/zh_CN.ts
${CMAKE_CURRENT_SOURCE_DIR}/res/i18n/en_US.ts
)
set_source_files_properties(${QS_TS_FILES} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/res/i18n")
set(QS_SOURCES_MAIN
dialog.cpp
dialog.h
dialog.ui
${QS_TS_FILES}
)
set(QS_QRC_MAIN "${CMAKE_CURRENT_SOURCE_DIR}/res/res.qrc")
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) # Qt version 6
qt_create_translation(QS_QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${QS_TS_FILES})
if(WIN32)
qt_add_executable(${CMAKE_PROJECT_NAME} WIN32 MANUAL_FINALIZATION
main.cpp
${QS_SOURCES_MAIN}
${QS_QRC_MAIN}
)
elseif(UNIX)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
qt_add_executable(${CMAKE_PROJECT_NAME} MACOSX_BUNDLE MANUAL_FINALIZATION
main.cpp
${QS_SOURCES_MAIN}
${QS_MAC_RESOURCES}
${QS_MAC_CONFIG}
${QS_QRC_MAIN}
)
else()
qt_add_executable(${CMAKE_PROJECT_NAME} MANUAL_FINALIZATION
main.cpp
${QS_SOURCES_MAIN}
${QS_QRC_MAIN}
)
endif()
endif()
else() # Qt version 5
qt5_create_translation(QS_QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${QS_TS_FILES})
if(WIN32)
add_executable(${CMAKE_PROJECT_NAME} WIN32
main.cpp
${QS_SOURCES_MAIN}
${QS_QRC_MAIN}
)
elseif(UNIX)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
add_executable(${CMAKE_PROJECT_NAME} MACOSX_BUNDLE
main.cpp
${QS_SOURCES_MAIN}
${QS_MAC_RESOURCES}
${QS_MAC_CONFIG}
${QS_QRC_MAIN}
)
else()
add_executable(${CMAKE_PROJECT_NAME}
main.cpp
${QS_SOURCES_MAIN}
${QS_QRC_MAIN}
)
endif()
endif()
endif()
# ******************** Microsoft Windows ********************
if(WIN32)
message(STATUS "[QtScrcpy] Make for Microsoft Windows.")
# 通过rc的方式的话VERSION变量rc中获取不到,定义为宏方便rc中使用
# Define macros for .rc file
add_compile_definitions(
VERSION_MAJOR=${VERSION_MAJOR}
VERSION_MINOR=${VERSION_MINOR}
VERSION_PATCH=${VERSION_PATCH}
VERSION_RC_STR=\\\"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}\\\"
)
if(CMAKE_SIZEOF_VOID_P EQUAL 8) # Compiler is 64-bit
message(STATUS "[QtScrcpy] 64-bit compiler detected.")
set(QS_LIB_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/x64")
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
message(STATUS "[QtScrcpy] In debug mode.")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x64/debug"
)
else()
message(STATUS "[QtScrcpy] In release mode.")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x64/release")
endif()
set(QS_DLL_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/bin/x64")
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) # Compiler is 32-bit
message(STATUS "[QtScrcpy] 32-bit compiler detected.")
set(QS_LIB_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/x86")
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
message(STATUS "[QtScrcpy] In debug mode.")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x86/debug")
else()
message(STATUS "[QtScrcpy] In release mode.")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x86/release")
endif()
set(QS_DLL_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/bin/x86")
endif()
# 构建完成后复制DLL依赖库
# Copy DLL dependencies after building
get_target_property(QS_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_PROJECT_NAME} RUNTIME_OUTPUT_DIRECTORY)
file(GLOB QS_DLL_FILES "${QS_DLL_PATH}/*.dll")
foreach(QS_DLL_FILE ${QS_DLL_FILES})
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND
${CMAKE_COMMAND} -E copy_if_different
"${QS_DLL_FILE}" "${QS_RUNTIME_OUTPUT_DIRECTORY}"
)
endforeach()
if(MSVC)
message(STATUS "[QtScrcpy] Microsoft Visual C++ is used.")
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE ${QS_LIB_PATH})
set(QS_EXTERNAL_LIBS_FFMPEG
avformat
avcodec
avutil
swscale
)
# If MinGW is used, it is not appropriate to link static MSVC libs.
# Instead, we link DLLs directly
elseif(MINGW)
message(STATUS "[QtScrcpy] MinGW GCC is used.")
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE
"-static"
${QS_DLL_FILES}
"-Wl,--enable-stdcall-fixup"
)
endif()
set(RC_FILE "${CMAKE_CURRENT_SOURCE_DIR}/res/QtScrcpy.rc")
# ******************** Unix-like OSs ********************
elseif(UNIX)
set(QS_LIB_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib")
# ==================== macOS ====================
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
message(STATUS "[QtScrcpy] Make for macOS.")
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE ${QS_LIB_PATH})
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/mac/debug")
else()
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/mac/release")
endif()
# Icon file stored in Contents/Resources
set(QS_MAC_ICON_NAME "QtScrcpy.icns")
set(QS_MAC_ICON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/res/${QS_MAC_ICON_NAME}")
set_source_files_properties(${QS_MAC_RESOURCES} PROPERTIES
MACOSX_PACKAGE_LOCATION "MacOS"
)
set_source_files_properties(${QS_MAC_CONFIG} PROPERTIES
MACOSX_PACKAGE_LOCATION "MacOS/config"
)
set(QS_EXTERNAL_LIBS_FFMPEG
avformat.58
avcodec.58
avutil.56
swscale.5
)
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
# The base plist template file
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/res/Info_Mac.plist"
# The elements to be overwritten
MACOSX_BUNDLE_ICON_FILE "${QS_MAC_ICON_NAME}"
MACOSX_BUNDLE_BUNDLE_VERSION "${STRING_VERSION}"
MACOSX_BUNDLE_SHORT_VERSION_STRING "${STRING_VERSION}"
MACOSX_BUNDLE_LONG_VERSION_STRING "${STRING_VERSION}"
# Copy file(s) to Contents/Resources
RESOURCE "${QS_MAC_ICON_PATH}"
)
# =============== Non-Mac OSs (Linux, BSD, etc.) ===============
else()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/linux/debug")
else()
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/linux/release")
endif()
find_package(Threads REQUIRED)
message(STATUS "[QtScrcpy] Make for non-Mac Unix-like OS.")
set(INSTALLED_FFMPEG_FOUND false)
find_package(PkgConfig)
if(PkgConfig_FOUND)
pkg_check_modules(FFmpeg libavformat>=58 libavcodec>=58 libavutil>=56 libswscale>=5)
if(FFmpeg_FOUND)
set(INSTALLED_FFMPEG_FOUND true)
message(STATUS "[QtScrcpy] Development files of FFmpeg were detected in your OS and will be used.")
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE ${FFmpeg_LDFLAGS})
target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE ${FFmpeg_CFLAGS})
set(QS_EXTERNAL_LIBS_FFMPEG ${FFmpeg_LIBRARIES})
endif()
endif()
if(NOT INSTALLED_FFMPEG_FOUND)
message(STATUS "[QtScrcpy] Development files of FFmpeg were not detected in your OS. Files within third_party/ffmpeg/ will be used.")
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE ${QS_LIB_PATH})
set(QS_EXTERNAL_LIBS_FFMPEG
avformat
avcodec
avutil
swscale
Threads::Threads
)
endif()
endif()
endif()
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
set(QS_SUBDIRECTORIES_MAIN
adb
common
device
devicemanage
fontawesome
uibase
util
)
foreach(QS_SUBDIRECTORY_MAIN ${QS_SUBDIRECTORIES_MAIN})
add_subdirectory(${QS_SUBDIRECTORY_MAIN})
endforeach()
target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC
adb
devicemanage
)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Network
device
stream
ui
util
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(${CMAKE_PROJECT_NAME})
endif()

View file

@ -1,309 +1,307 @@
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
# For VS2019 and Xcode 12+ support.
cmake_minimum_required(VERSION 3.19 FATAL_ERROR)
#
# Global config
#
# QC is "Qt CMake"
# QC Custom config
set(QC_PROJECT_NAME "QtScrcpy")
# Read version numbers from file
file (STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/version QC_FILE_VERSION)
set(QC_PROJECT_VERSION ${QC_FILE_VERSION})
# Project declare
project(${QC_PROJECT_NAME} VERSION ${QC_PROJECT_VERSION} LANGUAGES CXX)
message(STATUS "[${PROJECT_NAME}] Project ${PROJECT_NAME} ${PROJECT_VERSION}")
# QC define
# check arch
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(QC_CPU_ARCH x64)
else()
set(QC_CPU_ARCH x86)
endif()
message(STATUS "[${PROJECT_NAME}] CPU_ARCH:${QC_CPU_ARCH}")
# check build type
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(QC_BUILD_TYPE debug)
else()
set(QC_BUILD_TYPE release)
endif()
message(STATUS "[${PROJECT_NAME}] BUILD_TYPE:${QC_BUILD_TYPE}")
# CMake set
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Network LinguistTools REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Network LinguistTools REQUIRED)
if(MSVC)
# Compiler set
message(STATUS "[${PROJECT_NAME}] C++ compiler ID is: ${CMAKE_CXX_COMPILER_ID}")
if (MSVC)
# FFmpeg cannot be compiled natively by MSVC version < 12.0 (2013)
if(MSVC_VERSION LESS 1800)
message(FATAL_ERROR "[QtScrcpy] FATAL ERROR: MSVC version is older than 12.0 (2013).")
message(FATAL_ERROR "[${PROJECT_NAME}] ERROR: MSVC version is older than 12.0 (2013).")
endif()
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
message(STATUS "[${PROJECT_NAME}] Set Warnings as error")
# warning level 3 and all warnings as errors
add_compile_options(/W3 /WX)
# avoid warning C4819
add_compile_options(-source-charset:utf-8)
# ensure we use minimal "windows.h" lib without the crazy min max macros
add_compile_definitions(NOMINMAX WIN32_LEAN_AND_MEAN)
# disable SAFESEH - to vs2019 avoid "LNK2026: module unsafe"
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D \"SAFESEH:NO\"")
add_link_options(/SAFESEH:NO)
endif()
# ==================== macOS ====================
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
# QS_MAC_RESOURCES: esource file list stored in Contents/MacOS
file(GLOB QS_MAC_RESOURCES "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/*.dylib")
list(APPEND QS_MAC_RESOURCES
"${PROJECT_SOURCE_DIR}/third_party/scrcpy-server"
"${PROJECT_SOURCE_DIR}/adb/mac/adb"
)
# QS_MAC_CONFIG: Config file stored in Contents/MacOS/config
set(QS_MAC_CONFIG "${PROJECT_SOURCE_DIR}/config/config.ini")
if (NOT MSVC)
message(STATUS "[${PROJECT_NAME}] Set warnings as error")
# lots of warnings and all warnings as errors
add_compile_options(-Wall -Wextra -pedantic -Werror)
endif()
set(QS_TS_FILES
${CMAKE_CURRENT_SOURCE_DIR}/res/i18n/zh_CN.ts
${CMAKE_CURRENT_SOURCE_DIR}/res/i18n/en_US.ts
)
set_source_files_properties(${QS_TS_FILES} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/res/i18n")
#
# Qt
#
set(QS_SOURCES_MAIN
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Network REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Network REQUIRED)
#
# Sources
#
# adb
set(QC_ADB_SOURCES
adb/adbprocess.h
adb/adbprocess.cpp
)
# common
set(QC_COMMON_SOURCES
common/qscrcpyevent.h
)
# device
set(QC_DEVICE_SOURCES
device/device.h
device/device.cpp
device/android/input.h
device/android/keycodes.h
device/controller/controller.h
device/controller/controller.cpp
device/controller/inputconvert/inputconvertbase.h
device/controller/inputconvert/inputconvertbase.cpp
device/controller/inputconvert/inputconvertnormal.h
device/controller/inputconvert/inputconvertnormal.cpp
device/controller/inputconvert/inputconvertgame.h
device/controller/inputconvert/inputconvertgame.cpp
device/controller/inputconvert/controlmsg.h
device/controller/inputconvert/controlmsg.cpp
device/controller/inputconvert/keymap/keymap.h
device/controller/inputconvert/keymap/keymap.cpp
device/controller/receiver/devicemsg.h
device/controller/receiver/devicemsg.cpp
device/controller/receiver/receiver.h
device/controller/receiver/receiver.cpp
device/decoder/avframeconvert.h
device/decoder/avframeconvert.cpp
device/decoder/decoder.h
device/decoder/decoder.cpp
device/decoder/fpscounter.h
device/decoder/fpscounter.cpp
device/decoder/videobuffer.h
device/decoder/videobuffer.cpp
device/filehandler/filehandler.h
device/filehandler/filehandler.cpp
device/recorder/recorder.h
device/recorder/recorder.cpp
device/render/qyuvopenglwidget.h
device/render/qyuvopenglwidget.cpp
device/server/server.h
device/server/server.cpp
device/server/tcpserver.h
device/server/tcpserver.cpp
device/server/videosocket.h
device/server/videosocket.cpp
device/stream/stream.h
device/stream/stream.cpp
device/ui/toolform.h
device/ui/toolform.cpp
device/ui/toolform.ui
device/ui/videoform.h
device/ui/videoform.cpp
device/ui/videoform.ui
)
# devicemanage
set(QC_DEVICEMANAGE_SOURCES
devicemanage/devicemanage.h
devicemanage/devicemanage.cpp
)
# fontawesome
set(QC_FONTAWESOME_SOURCES
fontawesome/iconhelper.h
fontawesome/iconhelper.cpp
)
# uibase
set(QC_UIBASE_SOURCES
uibase/keepratiowidget.h
uibase/keepratiowidget.cpp
uibase/magneticwidget.h
uibase/magneticwidget.cpp
)
# util
set(QC_UTIL_SOURCES
util/compat.h
util/config.h
util/config.cpp
util/bufferutil.h
util/bufferutil.cpp
util/mousetap/mousetap.h
util/mousetap/mousetap.cpp
)
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(QC_UTIL_SOURCES ${QC_UTIL_SOURCES}
util/mousetap/winmousetap.h
util/mousetap/winmousetap.cpp
)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(QC_UTIL_SOURCES ${QC_UTIL_SOURCES}
util/mousetap/xmousetap.h
util/mousetap/xmousetap.cpp
)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(QC_UTIL_SOURCES ${QC_UTIL_SOURCES}
util/mousetap/cocoamousetap.h
util/mousetap/cocoamousetap.mm
)
endif()
# qrc
set(QC_QRC_SOURCES "res/res.qrc")
# main
set(QC_MAIN_SOURCES
main.cpp
dialog.cpp
dialog.h
dialog.ui
${QS_TS_FILES}
${QC_QRC_SOURCES}
)
set(QS_QRC_MAIN "${CMAKE_CURRENT_SOURCE_DIR}/res/res.qrc")
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) # Qt version 6
qt_create_translation(QS_QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${QS_TS_FILES})
if(WIN32)
qt_add_executable(${CMAKE_PROJECT_NAME} WIN32 MANUAL_FINALIZATION
main.cpp
${QS_SOURCES_MAIN}
${QS_QRC_MAIN}
)
elseif(UNIX)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
qt_add_executable(${CMAKE_PROJECT_NAME} MACOSX_BUNDLE MANUAL_FINALIZATION
main.cpp
${QS_SOURCES_MAIN}
${QS_MAC_RESOURCES}
${QS_MAC_CONFIG}
${QS_QRC_MAIN}
)
else()
qt_add_executable(${CMAKE_PROJECT_NAME} MANUAL_FINALIZATION
main.cpp
${QS_SOURCES_MAIN}
${QS_QRC_MAIN}
)
endif()
endif()
else() # Qt version 5
qt5_create_translation(QS_QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${QS_TS_FILES})
if(WIN32)
add_executable(${CMAKE_PROJECT_NAME} WIN32
main.cpp
${QS_SOURCES_MAIN}
${QS_QRC_MAIN}
)
elseif(UNIX)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
add_executable(${CMAKE_PROJECT_NAME} MACOSX_BUNDLE
main.cpp
${QS_SOURCES_MAIN}
${QS_MAC_RESOURCES}
${QS_MAC_CONFIG}
${QS_QRC_MAIN}
)
else()
add_executable(${CMAKE_PROJECT_NAME}
main.cpp
${QS_SOURCES_MAIN}
${QS_QRC_MAIN}
)
endif()
endif()
endif()
# ******************** Microsoft Windows ********************
if(WIN32)
message(STATUS "[QtScrcpy] Make for Microsoft Windows.")
# 通过rc的方式的话VERSION变量rc中获取不到,定义为宏方便rc中使用
# Define macros for .rc file
# plantform file
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
# Define VERSION macros for .rc file
add_compile_definitions(
VERSION_MAJOR=${VERSION_MAJOR}
VERSION_MINOR=${VERSION_MINOR}
VERSION_PATCH=${VERSION_PATCH}
VERSION_RC_STR=\\\"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}\\\"
VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
VERSION_MINOR=${PROJECT_VERSION_MINOR}
VERSION_PATCH=${PROJECT_VERSION_PATCH}
VERSION_RC_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"
)
set(QC_PLANTFORM_SOURCES
"${CMAKE_CURRENT_SOURCE_DIR}/res/${PROJECT_NAME}.rc"
)
if(CMAKE_SIZEOF_VOID_P EQUAL 8) # Compiler is 64-bit
message(STATUS "[QtScrcpy] 64-bit compiler detected.")
set(QS_LIB_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/x64")
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
message(STATUS "[QtScrcpy] In debug mode.")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x64/debug"
)
else()
message(STATUS "[QtScrcpy] In release mode.")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x64/release")
endif()
set(QS_DLL_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/bin/x64")
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) # Compiler is 32-bit
message(STATUS "[QtScrcpy] 32-bit compiler detected.")
set(QS_LIB_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib/x86")
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
message(STATUS "[QtScrcpy] In debug mode.")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x86/debug")
else()
message(STATUS "[QtScrcpy] In release mode.")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/win/x86/release")
endif()
set(QS_DLL_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/bin/x86")
endif()
# 构建完成后复制DLL依赖库
# Copy DLL dependencies after building
get_target_property(QS_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_PROJECT_NAME} RUNTIME_OUTPUT_DIRECTORY)
file(GLOB QS_DLL_FILES "${QS_DLL_PATH}/*.dll")
foreach(QS_DLL_FILE ${QS_DLL_FILES})
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND
${CMAKE_COMMAND} -E copy_if_different
"${QS_DLL_FILE}" "${QS_RUNTIME_OUTPUT_DIRECTORY}"
)
endforeach()
if(MSVC)
message(STATUS "[QtScrcpy] Microsoft Visual C++ is used.")
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE ${QS_LIB_PATH})
set(QS_EXTERNAL_LIBS_FFMPEG
avformat
avcodec
avutil
swscale
)
# If MinGW is used, it is not appropriate to link static MSVC libs.
# Instead, we link DLLs directly
elseif(MINGW)
message(STATUS "[QtScrcpy] MinGW GCC is used.")
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE
"-static"
${QS_DLL_FILES}
"-Wl,--enable-stdcall-fixup"
)
endif()
set(RC_FILE "${CMAKE_CURRENT_SOURCE_DIR}/res/QtScrcpy.rc")
# ******************** Unix-like OSs ********************
elseif(UNIX)
set(QS_LIB_PATH "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/lib")
# ==================== macOS ====================
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
message(STATUS "[QtScrcpy] Make for macOS.")
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE ${QS_LIB_PATH})
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/mac/debug")
else()
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/mac/release")
endif()
# Icon file stored in Contents/Resources
set(QS_MAC_ICON_NAME "QtScrcpy.icns")
set(QS_MAC_ICON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/res/${QS_MAC_ICON_NAME}")
set_source_files_properties(${QS_MAC_RESOURCES} PROPERTIES
MACOSX_PACKAGE_LOCATION "MacOS"
)
set_source_files_properties(${QS_MAC_CONFIG} PROPERTIES
MACOSX_PACKAGE_LOCATION "MacOS/config"
)
set(QS_EXTERNAL_LIBS_FFMPEG
avformat.58
avcodec.58
avutil.56
swscale.5
)
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
# The base plist template file
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/res/Info_Mac.plist"
# The elements to be overwritten
MACOSX_BUNDLE_ICON_FILE "${QS_MAC_ICON_NAME}"
MACOSX_BUNDLE_BUNDLE_VERSION "${STRING_VERSION}"
MACOSX_BUNDLE_SHORT_VERSION_STRING "${STRING_VERSION}"
MACOSX_BUNDLE_LONG_VERSION_STRING "${STRING_VERSION}"
# Copy file(s) to Contents/Resources
RESOURCE "${QS_MAC_ICON_PATH}"
)
# =============== Non-Mac OSs (Linux, BSD, etc.) ===============
else()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/linux/debug")
else()
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/output/linux/release")
endif()
find_package(Threads REQUIRED)
message(STATUS "[QtScrcpy] Make for non-Mac Unix-like OS.")
set(INSTALLED_FFMPEG_FOUND false)
find_package(PkgConfig)
if(PkgConfig_FOUND)
pkg_check_modules(FFmpeg libavformat>=58 libavcodec>=58 libavutil>=56 libswscale>=5)
if(FFmpeg_FOUND)
set(INSTALLED_FFMPEG_FOUND true)
message(STATUS "[QtScrcpy] Development files of FFmpeg were detected in your OS and will be used.")
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE ${FFmpeg_LDFLAGS})
target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE ${FFmpeg_CFLAGS})
set(QS_EXTERNAL_LIBS_FFMPEG ${FFmpeg_LIBRARIES})
endif()
endif()
if(NOT INSTALLED_FFMPEG_FOUND)
message(STATUS "[QtScrcpy] Development files of FFmpeg were not detected in your OS. Files within third_party/ffmpeg/ will be used.")
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE ${QS_LIB_PATH})
set(QS_EXTERNAL_LIBS_FFMPEG
avformat
avcodec
avutil
swscale
Threads::Threads
)
endif()
endif()
endif()
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
set(QS_SUBDIRECTORIES_MAIN
adb
common
device
devicemanage
fontawesome
uibase
util
# all sources
set(QC_PROJECT_SOURCES
${QC_ADB_SOURCES}
${QC_COMMON_SOURCES}
${QC_DEVICE_SOURCES}
${QC_DEVICEMANAGE_SOURCES}
${QC_FONTAWESOME_SOURCES}
${QC_UIBASE_SOURCES}
${QC_UTIL_SOURCES}
${QC_MAIN_SOURCES}
${QC_PLANTFORM_SOURCES}
)
foreach(QS_SUBDIRECTORY_MAIN ${QS_SUBDIRECTORIES_MAIN})
add_subdirectory(${QS_SUBDIRECTORY_MAIN})
endforeach()
target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC
adb
devicemanage
)
add_executable(${PROJECT_NAME} ${QC_PROJECT_SOURCES})
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
#
# Internal include path (todo: remove this, use absolute path include)
#
target_include_directories(${PROJECT_NAME} PRIVATE adb)
target_include_directories(${PROJECT_NAME} PRIVATE common)
target_include_directories(${PROJECT_NAME} PRIVATE device)
target_include_directories(${PROJECT_NAME} PRIVATE device/filehandler)
target_include_directories(${PROJECT_NAME} PRIVATE device/android)
target_include_directories(${PROJECT_NAME} PRIVATE device/decoder)
target_include_directories(${PROJECT_NAME} PRIVATE device/controller)
target_include_directories(${PROJECT_NAME} PRIVATE device/controller/receiver)
target_include_directories(${PROJECT_NAME} PRIVATE device/controller/inputconvert)
target_include_directories(${PROJECT_NAME} PRIVATE device/controller/inputconvert/keymap)
target_include_directories(${PROJECT_NAME} PRIVATE device/server)
target_include_directories(${PROJECT_NAME} PRIVATE device/stream)
target_include_directories(${PROJECT_NAME} PRIVATE device/render)
target_include_directories(${PROJECT_NAME} PRIVATE device/ui)
target_include_directories(${PROJECT_NAME} PRIVATE device/recorder)
target_include_directories(${PROJECT_NAME} PRIVATE devicemanage)
target_include_directories(${PROJECT_NAME} PRIVATE fontawesome)
target_include_directories(${PROJECT_NAME} PRIVATE util)
target_include_directories(${PROJECT_NAME} PRIVATE uibase)
#
# common deps
#
# Qt
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Network
device
stream
ui
util
)
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(${CMAKE_PROJECT_NAME})
endif()
# output dir
set_target_properties(${PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../output/${QC_CPU_ARCH}/${QC_BUILD_TYPE}"
)
#
# plantform deps
#
# windows
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
# ffmpeg
# include
target_include_directories(${PROJECT_NAME} PRIVATE ../third_party/ffmpeg/include)
# link
set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib/${QC_CPU_ARCH}")
target_link_directories(${PROJECT_NAME} PRIVATE ${FFMPEG_LIB_PATH})
target_link_libraries(${PROJECT_NAME} PRIVATE
avformat
avcodec
avutil
swscale
)
# copy
set(FFMPEG_BIN_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/bin/${QC_CPU_ARCH}")
get_target_property(FFMPEG_BIN_OUTPUT_PATH ${PROJECT_NAME} RUNTIME_OUTPUT_DIRECTORY)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avcodec-58.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avformat-58.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avutil-56.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/swresample-3.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/swscale-5.dll" "${FFMPEG_BIN_OUTPUT_PATH}"
)
endif()

View file

@ -1,11 +0,0 @@
set(QS_SOURCES_ADB
adbprocess.h
adbprocess.cpp
)
add_library(adb ${QS_SOURCES_ADB})
target_include_directories(adb PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(adb PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
util
)

View file

@ -1,6 +0,0 @@
set(QS_SOURCES_COMMON
qscrcpyevent.h
)
add_library(common INTERFACE ${QS_SOURCES_COMMON})
target_include_directories(common INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})

View file

@ -1,40 +0,0 @@
set(QS_SUBDIRECTORIES_DEVICE
android
controller
decoder
filehandler
recorder
render
server
stream
ui
)
set(QS_SOURCES_DEVICE
device.h
device.cpp
)
add_library(device ${QS_SOURCES_DEVICE})
target_include_directories(device PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
foreach(QS_SUBDIRECTORY_DEVICE ${QS_SUBDIRECTORIES_DEVICE})
add_subdirectory (${QS_SUBDIRECTORY_DEVICE})
endforeach()
target_link_libraries(device INTERFACE inputconvert)
target_link_libraries(device PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
# device (self)
controller
decoder
filehandler
recorder
server
stream
ui
util
mousetap
)

View file

@ -1,7 +0,0 @@
set(QS_SOURCES_DEVICE_ANDROID
input.h
keycodes.h
)
add_library(android INTERFACE ${QS_SOURCES_DEVICE_ANDROID})
target_include_directories(android INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})

View file

@ -1,26 +0,0 @@
SET(QS_SUBDIRECTORIES_DEVICE_CONTROLLER
inputconvert
receiver
)
SET(QS_SOURCES_DEVICE_CONTROLLER
controller.h
controller.cpp
)
add_library(controller ${QS_SOURCES_DEVICE_CONTROLLER})
target_include_directories(controller PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
foreach(QS_SUBDIRECTORY_DEVICE_CONTROLLER ${QS_SUBDIRECTORIES_DEVICE_CONTROLLER})
add_subdirectory (${QS_SUBDIRECTORY_DEVICE_CONTROLLER})
endforeach()
target_link_libraries(controller PUBLIC
inputconvert
)
target_link_libraries(controller PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
receiver
server
)

View file

@ -1,39 +0,0 @@
SET(QS_SUBDIRECTORIES_DEVICE_CONTROLLER_INPUTCONVERT
keymap
)
set(QS_SOURCES_DEVICE_CONTROLLER_INPUTCONVERT
controlmsg.h
controlmsg.cpp
inputconvertbase.h
inputconvertbase.cpp
inputconvertgame.h
inputconvertgame.cpp
inputconvertnormal.h
inputconvertnormal.cpp
)
add_library(inputconvert ${QS_SOURCES_DEVICE_CONTROLLER_INPUTCONVERT})
target_include_directories(inputconvert PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
foreach(QS_SUBDIRECTORY_DEVICE_CONTROLLER_INPUTCONVERT ${QS_SUBDIRECTORIES_DEVICE_CONTROLLER_INPUTCONVERT})
add_subdirectory (${QS_SUBDIRECTORY_DEVICE_CONTROLLER_INPUTCONVERT})
endforeach()
target_link_libraries(inputconvert PUBLIC
common
# controller
android
)
target_link_libraries(inputconvert INTERFACE
# controller
# inputconvert (self)
keymap
)
target_link_libraries(inputconvert PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
controller
util
)

View file

@ -1,8 +0,0 @@
set(QS_SOURCES_DEVICE_CONTROLLER_INPUTCONVERT_KEYMAP
keymap.h
keymap.cpp
)
add_library(keymap ${QS_SOURCES_DEVICE_CONTROLLER_INPUTCONVERT_KEYMAP})
target_include_directories(keymap PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(keymap PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

View file

@ -1,14 +0,0 @@
SET(QS_SOURCES_DEVICE_CONTROLLER_RECEIVER
devicemsg.h
devicemsg.cpp
receiver.h
receiver.cpp
)
add_library(receiver ${QS_SOURCES_DEVICE_CONTROLLER_RECEIVER})
target_include_directories(receiver PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(receiver PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Network
util
)

View file

@ -1,21 +0,0 @@
set(QS_SOURCES_DEVICE_DECODER
avframeconvert.h
avframeconvert.cpp
decoder.h
decoder.cpp
fpscounter.h
fpscounter.cpp
videobuffer.h
videobuffer.cpp
)
add_library(decoder ${QS_SOURCES_DEVICE_DECODER})
target_include_directories(decoder PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
"${PROJECT_SOURCE_DIR}/third_party/ffmpeg/include"
)
target_link_libraries(decoder PUBLIC ${QS_EXTERNAL_LIBS_FFMPEG})
target_link_libraries(decoder PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
util
)

View file

@ -1,9 +0,0 @@
set(QS_SOURCES_DEVICE_FILEHANDLER
filehandler.h
filehandler.cpp
)
add_library(filehandler ${QS_SOURCES_DEVICE_FILEHANDLER})
target_include_directories(filehandler PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(filehandler PUBLIC adb)
target_link_libraries(filehandler PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

View file

@ -1,14 +0,0 @@
set(QS_SOURCES_DEVICE_RECORDER
recorder.h
recorder.cpp
)
add_library(recorder ${QS_SOURCES_DEVICE_RECORDER})
target_include_directories(recorder PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
"${PROJECT_SOURCE_DIR}/third_party/ffmpeg/include"
)
target_link_libraries(recorder PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
util
)

View file

@ -1,8 +0,0 @@
set(QS_SOURCES_DEVICE_RENDER
qyuvopenglwidget.h
qyuvopenglwidget.cpp
)
add_library(render ${QS_SOURCES_DEVICE_RENDER})
target_include_directories(render PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(render PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

View file

@ -1,20 +0,0 @@
set(QS_SOURCES_DEVICE_SERVER
server.h
server.cpp
tcpserver.h
tcpserver.cpp
videosocket.h
videosocket.cpp
)
add_library(server ${QS_SOURCES_DEVICE_SERVER})
target_include_directories(server PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(server PUBLIC
Qt${QT_VERSION_MAJOR}::Network
adb
)
target_link_libraries(server PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
common
util
)

View file

@ -1,20 +0,0 @@
set(QS_SOURCES_DEVICE_STREAM
stream.h
stream.cpp
)
add_library(stream ${QS_SOURCES_DEVICE_STREAM})
target_include_directories(stream PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
"${PROJECT_SOURCE_DIR}/third_party/ffmpeg/include"
)
target_link_libraries(stream PUBLIC ${QS_EXTERNAL_LIBS_FFMPEG})
target_link_libraries(stream PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
#controller
decoder
recorder
server
util
)

View file

@ -1,23 +0,0 @@
set(QS_SOURCES_DEVICE_UI
toolform.h
toolform.cpp
toolform.ui
videoform.h
videoform.cpp
videoform.ui
)
add_library(ui ${QS_SOURCES_DEVICE_UI})
target_include_directories(ui PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(ui PRIVATE "${PROJECT_SOURCE_DIR}/third_party/ffmpeg/include")
target_link_libraries(ui PUBLIC
device
uibase
)
target_link_libraries(ui PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
controller
render
fontawesome
util
)

View file

@ -1,13 +0,0 @@
set(QS_SOURCES_DEVICEMANAGE
devicemanage.h
devicemanage.cpp
)
add_library(devicemanage ${QS_SOURCES_DEVICEMANAGE})
target_include_directories(devicemanage PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(devicemanage PUBLIC device)
target_link_libraries(devicemanage PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
server
ui
)

View file

@ -1,8 +0,0 @@
set(QS_SOURCES_FONTAWESOME
iconhelper.h
iconhelper.cpp
)
add_library(fontawesome ${QS_SOURCES_FONTAWESOME})
target_include_directories(fontawesome PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(fontawesome PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

View file

@ -1,10 +0,0 @@
set(QS_SOURCES_UIBASE
keepratiowidget.h
keepratiowidget.cpp
magneticwidget.h
magneticwidget.cpp
)
add_library(uibase ${QS_SOURCES_UIBASE})
target_include_directories(uibase PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(uibase PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

View file

@ -1,21 +0,0 @@
set(QS_SUBDIRECTORIES_UTIL
mousetap
)
set(QS_SOURCES_UTIL
bufferutil.h
bufferutil.cpp
compat.h
config.h
config.cpp
)
add_library(util ${QS_SOURCES_UTIL})
target_include_directories(util PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
foreach(QS_SUBDIRECTORY_UTIL ${QS_SUBDIRECTORIES_UTIL})
add_subdirectory (${QS_SUBDIRECTORY_UTIL})
endforeach()
target_link_libraries(util PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

View file

@ -1,50 +0,0 @@
set(QS_SOURCES_UTIL_MOUSETAP
mousetap.h
mousetap.cpp
)
# Microsoft Windows
if(WIN32)
list(APPEND QS_SOURCES_UTIL_MOUSETAP
winmousetap.h
winmousetap.cpp
)
set(QS_EXTERNAL_LIBS_UTIL_MOUSETAP User32)
elseif(UNIX)
# macOS
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
find_library(APPKIT AppKit REQUIRED)
set(QS_EXTERNAL_LIBS_UTIL_MOUSETAP ${APPKIT})
list(APPEND QS_SOURCES_UTIL_MOUSETAP
cocoamousetap.h
cocoamousetap.mm
)
target_compile_options(mousetap "-mmacosx-version-min=10.6")
# Linux, BSD, etc.
else()
find_package(QT NAMES Qt6 Qt5 COMPONENTS X11Extras REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS X11Extras REQUIRED)
set(QS_EXTERNAL_LIBS_UTIL_MOUSETAP
Qt${QT_VERSION_MAJOR}::X11Extras
xcb
)
list(APPEND QS_SOURCES_UTIL_MOUSETAP
xmousetap.h
xmousetap.cpp
)
endif()
endif()
add_library(mousetap ${QS_SOURCES_UTIL_MOUSETAP})
target_link_libraries(mousetap PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
${QS_EXTERNAL_LIBS_UTIL_MOUSETAP})