From 5e1cc1b44f07c90975d073a4901da561fc4355bf Mon Sep 17 00:00:00 2001 From: Barry <870709864@qq.com> Date: Sun, 9 Jan 2022 15:43:52 +0800 Subject: [PATCH] feat: add cmake (#544) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: cmake win * fix: win bug * feat: mac * feat: mac * feat: linux * feat: remove old cmake * fix: build bug * feat: ci mac build * feat: language * feat: build win * fix: win buid error * fix: mac build error * fix: mac publish error * feat: test * feat: remove ubuntu 16 * feat: cmake build on ubuntu * fix: ubuntu build error * feat: test * fix: build error on ubuntu * fix: build error * fix: build error * fix * fix * fix: 1 * fix: 2 * fix: 3 * f * a * b * 1 Co-authored-by: 冉坤 --- .github/workflows/macos.yml | 2 +- .github/workflows/ubuntu.yml | 5 +- .github/workflows/windows.yml | 2 +- .gitignore | 3 +- CMakeLists.txt | 19 +- QtScrcpy/CMakeLists.txt | 679 +++++++++++------- QtScrcpy/QtScrcpy.pro | 16 +- QtScrcpy/adb/CMakeLists.txt | 11 - QtScrcpy/common/CMakeLists.txt | 6 - QtScrcpy/device/CMakeLists.txt | 40 -- QtScrcpy/device/android/CMakeLists.txt | 7 - QtScrcpy/device/controller/CMakeLists.txt | 26 - .../controller/inputconvert/CMakeLists.txt | 39 - .../inputconvert/keymap/CMakeLists.txt | 8 - .../device/controller/receiver/CMakeLists.txt | 14 - QtScrcpy/device/decoder/CMakeLists.txt | 21 - QtScrcpy/device/filehandler/CMakeLists.txt | 9 - QtScrcpy/device/recorder/CMakeLists.txt | 14 - QtScrcpy/device/render/CMakeLists.txt | 8 - QtScrcpy/device/server/CMakeLists.txt | 20 - QtScrcpy/device/server/server.cpp | 18 +- QtScrcpy/device/stream/CMakeLists.txt | 20 - QtScrcpy/device/ui/CMakeLists.txt | 23 - QtScrcpy/devicemanage/CMakeLists.txt | 13 - QtScrcpy/fontawesome/CMakeLists.txt | 8 - QtScrcpy/main.cpp | 18 +- .../res/{Info_Mac.plist => Info_Mac.plist.in} | 8 +- QtScrcpy/uibase/CMakeLists.txt | 10 - QtScrcpy/util/CMakeLists.txt | 21 - QtScrcpy/util/mousetap/CMakeLists.txt | 50 -- QtScrcpy/version | 2 +- ci/linux/build_for_ubuntu.sh | 43 +- ci/mac/build_for_mac.sh | 46 +- ci/mac/publish_for_mac.sh | 2 +- ci/win/build_for_win.bat | 81 +-- ci/win/publish_for_win.bat | 10 +- config/config.ini | 6 +- 37 files changed, 521 insertions(+), 807 deletions(-) delete mode 100755 QtScrcpy/adb/CMakeLists.txt delete mode 100755 QtScrcpy/common/CMakeLists.txt delete mode 100755 QtScrcpy/device/CMakeLists.txt delete mode 100755 QtScrcpy/device/android/CMakeLists.txt delete mode 100755 QtScrcpy/device/controller/CMakeLists.txt delete mode 100755 QtScrcpy/device/controller/inputconvert/CMakeLists.txt delete mode 100755 QtScrcpy/device/controller/inputconvert/keymap/CMakeLists.txt delete mode 100755 QtScrcpy/device/controller/receiver/CMakeLists.txt delete mode 100755 QtScrcpy/device/decoder/CMakeLists.txt delete mode 100755 QtScrcpy/device/filehandler/CMakeLists.txt delete mode 100755 QtScrcpy/device/recorder/CMakeLists.txt delete mode 100755 QtScrcpy/device/render/CMakeLists.txt delete mode 100755 QtScrcpy/device/server/CMakeLists.txt delete mode 100755 QtScrcpy/device/stream/CMakeLists.txt delete mode 100755 QtScrcpy/device/ui/CMakeLists.txt delete mode 100755 QtScrcpy/devicemanage/CMakeLists.txt delete mode 100755 QtScrcpy/fontawesome/CMakeLists.txt rename QtScrcpy/res/{Info_Mac.plist => Info_Mac.plist.in} (90%) delete mode 100755 QtScrcpy/uibase/CMakeLists.txt delete mode 100755 QtScrcpy/util/CMakeLists.txt delete mode 100755 QtScrcpy/util/mousetap/CMakeLists.txt diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index ba7a815..1fc8b8d 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -44,7 +44,7 @@ jobs: ENV_QT_PATH: ${{ env.qt-install-path }} run: | python ci/generate-version.py - ci/mac/build_for_mac.sh release + ci/mac/build_for_mac.sh RelWithDebInfo # 获取ref最后一个/后的内容 - name: Get the version shell: bash diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index 89ec6f8..5eca0d1 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -6,6 +6,7 @@ on: - 'QtScrcpy/**' - '!QtScrcpy/res/**' - '.github/workflows/ubuntu.yml' + - 'ci/linux/**' pull_request: paths: - 'QtScrcpy/**' @@ -17,7 +18,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-16.04,ubuntu-18.04] + os: [ubuntu-18.04] qt-ver: [5.15.1] qt-arch-install: [gcc_64] gcc-arch: [x64] @@ -47,4 +48,4 @@ jobs: ENV_QT_PATH: ${{ env.qt-install-path }} run: | python ci/generate-version.py - ci/linux/build_for_ubuntu.sh release + ci/linux/build_for_ubuntu.sh RelWithDebInfo diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index bfddbb2..027ae56 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -76,7 +76,7 @@ jobs: ENV_QT_PATH: ${{ env.qt-install-path }} run: | call python ci\generate-version.py - call "ci\win\build_for_win.bat" release ${{ matrix.msvc-arch }} + call "ci\win\build_for_win.bat" RelWithDebInfo ${{ matrix.msvc-arch }} # 获取ref最后一个/后的内容 - name: Get the version shell: bash diff --git a/.gitignore b/.gitignore index 93a2a8c..5a6f350 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ /build/ build-* *.DS_Store -userdata.ini \ No newline at end of file +userdata.ini +Info_Mac.plist \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 4666405..7762e2a 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/QtScrcpy/CMakeLists.txt b/QtScrcpy/CMakeLists.txt index 049cf62..fac6269 100755 --- a/QtScrcpy/CMakeLists.txt +++ b/QtScrcpy/CMakeLists.txt @@ -1,309 +1,434 @@ -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" +# https://www.kdab.com/wp-content/uploads/stories/QTVTC20-Using-Modern-CMake-Kevin-Funk.pdf + +# 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}") + +# 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) +# default RelWithDebInfo +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE RelWithDebInfo) +endif() +message(STATUS "[${PROJECT_NAME}] BUILD_TYPE:${CMAKE_BUILD_TYPE}") -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 /wd4566) + + # avoid warning C4819 + add_compile_options(-source-charset:utf-8) + #add_compile_options(/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 - avoid "LNK2026: module unsafe"(Qt5.15&&vs2019) + add_link_options(/SAFESEH:NO) endif() +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) -# ==================== 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") + # disable some warning + add_compile_options(-Wno-nested-anon-types -Wno-c++17-extensions) 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 LinguistTools REQUIRED) +find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Network LinguistTools REQUIRED) +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + find_package(QT NAMES Qt6 Qt5 COMPONENTS X11Extras REQUIRED) + find_package(Qt${QT_VERSION_MAJOR} COMPONENTS X11Extras REQUIRED) +endif() + +message(STATUS "[${PROJECT_NAME}] Qt version is: ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}") + +# +# Sources +# + +# adb +set(QC_ADB_SOURCES + adb/adbprocess.h + adb/adbprocess.cpp +) +source_group(adb FILES ${QC_ADB_SOURCES}) + +# common +set(QC_COMMON_SOURCES + common/qscrcpyevent.h +) +source_group(common FILES ${QC_COMMON_SOURCES}) + +# 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 +) +source_group(device FILES ${QC_DEVICE_SOURCES}) + +# devicemanage +set(QC_DEVICEMANAGE_SOURCES + devicemanage/devicemanage.h + devicemanage/devicemanage.cpp +) +source_group(devicemanage FILES ${QC_DEVICEMANAGE_SOURCES}) + +# fontawesome +set(QC_FONTAWESOME_SOURCES + fontawesome/iconhelper.h + fontawesome/iconhelper.cpp +) +source_group(fontawesome FILES ${QC_FONTAWESOME_SOURCES}) + +# uibase +set(QC_UIBASE_SOURCES + uibase/keepratiowidget.h + uibase/keepratiowidget.cpp + uibase/magneticwidget.h + uibase/magneticwidget.cpp +) +source_group(uibase FILES ${QC_UIBASE_SOURCES}) + +# 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() +source_group(util FILES ${QC_UTIL_SOURCES}) + +# 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" + ) +endif() +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # Step 1. add icns to source file, for MACOSX_PACKAGE_LOCATION copy + set(QC_PLANTFORM_SOURCES + "${CMAKE_CURRENT_SOURCE_DIR}/res/${PROJECT_NAME}.icns" ) - - 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 +# 使用qt5_add_translation 根据已有ts文件生成qm文件,不用qt5_create_translation +# 感兴趣可以了解下qt5_create_translation用法 https://www.cnblogs.com/apocelipes/p/14355460.html +set(QC_TS_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/res/i18n/zh_CN.ts + ${CMAKE_CURRENT_SOURCE_DIR}/res/i18n/en_US.ts ) -foreach(QS_SUBDIRECTORY_MAIN ${QS_SUBDIRECTORIES_MAIN}) - add_subdirectory(${QS_SUBDIRECTORY_MAIN}) -endforeach() +set_source_files_properties(${QC_TS_FILES} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/res/i18n") +qt5_add_translation(QC_QM_FILES ${QC_TS_FILES}) -target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC - adb - devicemanage - ) +# 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} +) -target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(QC_RUNTIME_TYPE MACOSX_BUNDLE) +endif() +if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(QC_RUNTIME_TYPE WIN32) +endif() + + +add_executable(${PROJECT_NAME} ${QC_RUNTIME_TYPE} ${QC_PROJECT_SOURCES}) + +# +# 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 +) + +# output dir +# https://cmake.org/cmake/help/latest/prop_gbl/GENERATOR_IS_MULTI_CONFIG.html +get_property(QC_IS_MUTIL_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +message(STATUS "multi config:" QC_IS_MUTIL_CONFIG) + +# $<0:> 使用生成器表达式为每个config设置RUNTIME_OUTPUT_DIRECTORY,这样multi config就不会自动追加CMAKE_BUILD_TYPE子目录了 +# 1. multi config介绍 https://cmake.org/cmake/help/latest/prop_gbl/GENERATOR_IS_MULTI_CONFIG.html +# 2. multi config在不用表达式生成器时自动追加子目录说明 https://cmake.org/cmake/help/latest/prop_tgt/RUNTIME_OUTPUT_DIRECTORY.html +# 3. 使用表达式生成器禁止multi config自动追加子目录解决方案 https://stackoverflow.com/questions/7747857/in-cmake-how-do-i-work-around-the-debug-and-release-directories-visual-studio-2 +set_target_properties(${PROJECT_NAME} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../output/${QC_CPU_ARCH}/${CMAKE_BUILD_TYPE}/$<0:>" +) + +# +# 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}/swscale-5.dll" "${FFMPEG_BIN_OUTPUT_PATH}" + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/swresample-3.dll" "${FFMPEG_BIN_OUTPUT_PATH}" + ) +endif() + +# MacOS +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # 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") + target_link_directories(${PROJECT_NAME} PRIVATE ${FFMPEG_LIB_PATH}) + target_link_libraries(${PROJECT_NAME} PRIVATE + avformat.58 + avcodec.58 + avutil.56 + swscale.5 ) -if(QT_VERSION_MAJOR EQUAL 6) - qt_finalize_executable(${CMAKE_PROJECT_NAME}) + # copy bundle file + get_target_property(MACOS_BUNDLE_PATH ${PROJECT_NAME} RUNTIME_OUTPUT_DIRECTORY) + set(MACOS_BUNDLE_PATH ${MACOS_BUNDLE_PATH}/${PROJECT_NAME}.app/Contents) + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + # dylib,scrcpy-server,adb copy to Contents/MacOS + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib/libavcodec.58.dylib" "${MACOS_BUNDLE_PATH}/MacOS" + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib/libavformat.58.dylib" "${MACOS_BUNDLE_PATH}/MacOS" + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib/libavutil.56.dylib" "${MACOS_BUNDLE_PATH}/MacOS" + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib/libswscale.5.dylib" "${MACOS_BUNDLE_PATH}/MacOS" + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib/libswresample.3.dylib" "${MACOS_BUNDLE_PATH}/MacOS" + + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/scrcpy-server" "${MACOS_BUNDLE_PATH}/MacOS" + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/adb/mac/adb" "${MACOS_BUNDLE_PATH}/MacOS" + # config file copy to Contents/MacOS/config + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/../config/config.ini" "${MACOS_BUNDLE_PATH}/MacOS/config" + ) + + # Step 2. ues MACOSX_PACKAGE_LOCATION copy icns to Resources + set_source_files_properties( + ${CMAKE_CURRENT_SOURCE_DIR}/res/${PROJECT_NAME}.icns + PROPERTIES MACOSX_PACKAGE_LOCATION Resources + ) + + # use MACOSX_BUNDLE_INFO_PLIST custom plist, not use MACOSX_BUNDLE_BUNDLE_NAME etc.. + set(INFO_PLIST_TEMPLATE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/res/Info_Mac.plist.in") + set(INFO_PLIST_FILE "${CMAKE_CURRENT_SOURCE_DIR}/res/Info_Mac.plist") + file(READ "${INFO_PLIST_TEMPLATE_FILE}" plist_contents) + string(REPLACE "\${BUNDLE_VERSION}" "${PROJECT_VERSION}" plist_contents ${plist_contents}) + file(WRITE ${INFO_PLIST_FILE} ${plist_contents}) + set_target_properties(${PROJECT_NAME} PROPERTIES + MACOSX_BUNDLE_INFO_PLIST "${INFO_PLIST_FILE}" + # "" disable code sign + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" + ) + + # mac framework + target_link_libraries(${PROJECT_NAME} PRIVATE "-framework AppKit") endif() + +# Linux +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(THREADS_PREFER_PTHREAD_FLAG ON) + find_package(Threads REQUIRED) + + # include + target_include_directories(${PROJECT_NAME} PRIVATE ../third_party/ffmpeg/include) + # link + set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/ffmpeg/lib") + target_link_directories(${PROJECT_NAME} PRIVATE ${FFMPEG_LIB_PATH}) + target_link_libraries(${PROJECT_NAME} PRIVATE + # ffmpeg + avformat + avcodec + avutil + swscale + # qx11 + Qt${QT_VERSION_MAJOR}::X11Extras + # xcb https://doc.qt.io/qt-5/linux-requirements.html + xcb + # pthread + Threads::Threads + ) + + # linux set app icon: https://blog.csdn.net/MrNoboday/article/details/82870853 +endif() \ No newline at end of file diff --git a/QtScrcpy/QtScrcpy.pro b/QtScrcpy/QtScrcpy.pro index 990537e..720f018 100644 --- a/QtScrcpy/QtScrcpy.pro +++ b/QtScrcpy/QtScrcpy.pro @@ -97,9 +97,9 @@ win32 { message("x64") # 输出目录 CONFIG(debug, debug|release) { - DESTDIR = $$PWD/../output/win/x64/debug + DESTDIR = $$PWD/../output/x64/debug } else { - DESTDIR = $$PWD/../output/win/x64/release + DESTDIR = $$PWD/../output/x64/release } # 依赖模块 @@ -114,9 +114,9 @@ win32 { message("x86") # 输出目录 CONFIG(debug, debug|release) { - DESTDIR = $$PWD/../output/win/x86/debug + DESTDIR = $$PWD/../output/x86/debug } else { - DESTDIR = $$PWD/../output/win/x86/release + DESTDIR = $$PWD/../output/x86/release } # 依赖模块 @@ -147,9 +147,9 @@ win32 { macos { # 输出目录 CONFIG(debug, debug|release) { - DESTDIR = $$PWD/../output/mac/debug + DESTDIR = $$PWD/../output/debug } else { - DESTDIR = $$PWD/../output/mac/release + DESTDIR = $$PWD/../output/release } # 依赖模块 @@ -196,9 +196,9 @@ macos { linux { # 输出目录 CONFIG(debug, debug|release) { - DESTDIR = $$PWD/../output/linux/debug + DESTDIR = $$PWD/../output/debug } else { - DESTDIR = $$PWD/../output/linux/release + DESTDIR = $$PWD/../output/release } # 依赖模块 diff --git a/QtScrcpy/adb/CMakeLists.txt b/QtScrcpy/adb/CMakeLists.txt deleted file mode 100755 index 3644ade..0000000 --- a/QtScrcpy/adb/CMakeLists.txt +++ /dev/null @@ -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 - ) diff --git a/QtScrcpy/common/CMakeLists.txt b/QtScrcpy/common/CMakeLists.txt deleted file mode 100755 index cd2b0c6..0000000 --- a/QtScrcpy/common/CMakeLists.txt +++ /dev/null @@ -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}) diff --git a/QtScrcpy/device/CMakeLists.txt b/QtScrcpy/device/CMakeLists.txt deleted file mode 100755 index 6e8b837..0000000 --- a/QtScrcpy/device/CMakeLists.txt +++ /dev/null @@ -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 - ) - diff --git a/QtScrcpy/device/android/CMakeLists.txt b/QtScrcpy/device/android/CMakeLists.txt deleted file mode 100755 index 432d749..0000000 --- a/QtScrcpy/device/android/CMakeLists.txt +++ /dev/null @@ -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}) diff --git a/QtScrcpy/device/controller/CMakeLists.txt b/QtScrcpy/device/controller/CMakeLists.txt deleted file mode 100755 index cf34254..0000000 --- a/QtScrcpy/device/controller/CMakeLists.txt +++ /dev/null @@ -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 - ) diff --git a/QtScrcpy/device/controller/inputconvert/CMakeLists.txt b/QtScrcpy/device/controller/inputconvert/CMakeLists.txt deleted file mode 100755 index 2c5cd44..0000000 --- a/QtScrcpy/device/controller/inputconvert/CMakeLists.txt +++ /dev/null @@ -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 - ) diff --git a/QtScrcpy/device/controller/inputconvert/keymap/CMakeLists.txt b/QtScrcpy/device/controller/inputconvert/keymap/CMakeLists.txt deleted file mode 100755 index a74b052..0000000 --- a/QtScrcpy/device/controller/inputconvert/keymap/CMakeLists.txt +++ /dev/null @@ -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) diff --git a/QtScrcpy/device/controller/receiver/CMakeLists.txt b/QtScrcpy/device/controller/receiver/CMakeLists.txt deleted file mode 100755 index ee6ced2..0000000 --- a/QtScrcpy/device/controller/receiver/CMakeLists.txt +++ /dev/null @@ -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 - ) diff --git a/QtScrcpy/device/decoder/CMakeLists.txt b/QtScrcpy/device/decoder/CMakeLists.txt deleted file mode 100755 index b2931a2..0000000 --- a/QtScrcpy/device/decoder/CMakeLists.txt +++ /dev/null @@ -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 - ) diff --git a/QtScrcpy/device/filehandler/CMakeLists.txt b/QtScrcpy/device/filehandler/CMakeLists.txt deleted file mode 100755 index 17de9e2..0000000 --- a/QtScrcpy/device/filehandler/CMakeLists.txt +++ /dev/null @@ -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) diff --git a/QtScrcpy/device/recorder/CMakeLists.txt b/QtScrcpy/device/recorder/CMakeLists.txt deleted file mode 100755 index 12144db..0000000 --- a/QtScrcpy/device/recorder/CMakeLists.txt +++ /dev/null @@ -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 - ) diff --git a/QtScrcpy/device/render/CMakeLists.txt b/QtScrcpy/device/render/CMakeLists.txt deleted file mode 100755 index ee3a140..0000000 --- a/QtScrcpy/device/render/CMakeLists.txt +++ /dev/null @@ -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) diff --git a/QtScrcpy/device/server/CMakeLists.txt b/QtScrcpy/device/server/CMakeLists.txt deleted file mode 100755 index eb7fe84..0000000 --- a/QtScrcpy/device/server/CMakeLists.txt +++ /dev/null @@ -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 - ) diff --git a/QtScrcpy/device/server/server.cpp b/QtScrcpy/device/server/server.cpp index 756da4b..1343b33 100644 --- a/QtScrcpy/device/server/server.cpp +++ b/QtScrcpy/device/server/server.cpp @@ -142,18 +142,18 @@ bool Server::execute() args << "/"; // unused; args << "com.genymobile.scrcpy.Server"; args << Config::getInstance().getServerVersion(); - args << QString("log_level=%1").arg(Config::getInstance().getLogLevel()); + + if (!Config::getInstance().getLogLevel().isEmpty()) { + args << QString("log_level=%1").arg(Config::getInstance().getLogLevel()); + } args << QString("max_size=%1").arg(QString::number(m_params.maxSize)); args << QString("bit_rate=%1").arg(QString::number(m_params.bitRate)); args << QString("max_fps=%1").arg(QString::number(m_params.maxFps)); args << QString("lock_video_orientation=%1").arg(QString::number(m_params.lockVideoOrientation)); args << QString("tunnel_forward=%1").arg((m_tunnelForward ? "true" : "false")); - if (m_params.crop.isEmpty()) { - args << "crop="; - } else { + if (!m_params.crop.isEmpty()) { args << QString("crop=%1").arg(m_params.crop); } - args << "send_frame_meta=true"; // always send frame meta (packet boundaries + timestamp) args << QString("control=%1").arg((m_params.control ? "true" : "false")); args << "display_id=0"; // display id args << "show_touches=false"; // show touch @@ -161,8 +161,12 @@ bool Server::execute() // code option // https://github.com/Genymobile/scrcpy/commit/080a4ee3654a9b7e96c8ffe37474b5c21c02852a // - args << QString("codec_options=%1").arg(Config::getInstance().getCodecOptions()); - args << QString("encoder_name=%1").arg(Config::getInstance().getCodecName()); + if (Config::getInstance().getCodecOptions() != "") { + args << QString("codec_options=%1").arg(Config::getInstance().getCodecOptions()); + } + if (Config::getInstance().getCodecName() != "") { + args << QString("encoder_name=%1").arg(Config::getInstance().getCodecName()); + } #ifdef SERVER_DEBUGGER qInfo("Server debugger waiting for a client on device port " SERVER_DEBUGGER_PORT "..."); diff --git a/QtScrcpy/device/stream/CMakeLists.txt b/QtScrcpy/device/stream/CMakeLists.txt deleted file mode 100755 index 469d2d3..0000000 --- a/QtScrcpy/device/stream/CMakeLists.txt +++ /dev/null @@ -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 - ) diff --git a/QtScrcpy/device/ui/CMakeLists.txt b/QtScrcpy/device/ui/CMakeLists.txt deleted file mode 100755 index f8f6325..0000000 --- a/QtScrcpy/device/ui/CMakeLists.txt +++ /dev/null @@ -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 - ) diff --git a/QtScrcpy/devicemanage/CMakeLists.txt b/QtScrcpy/devicemanage/CMakeLists.txt deleted file mode 100755 index 8ce0ab7..0000000 --- a/QtScrcpy/devicemanage/CMakeLists.txt +++ /dev/null @@ -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 - ) diff --git a/QtScrcpy/fontawesome/CMakeLists.txt b/QtScrcpy/fontawesome/CMakeLists.txt deleted file mode 100755 index ead0947..0000000 --- a/QtScrcpy/fontawesome/CMakeLists.txt +++ /dev/null @@ -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) diff --git a/QtScrcpy/main.cpp b/QtScrcpy/main.cpp index 9295805..31b501d 100644 --- a/QtScrcpy/main.cpp +++ b/QtScrcpy/main.cpp @@ -23,21 +23,21 @@ int main(int argc, char *argv[]) { // set env #ifdef Q_OS_WIN32 - qputenv("QTSCRCPY_ADB_PATH", "../../../../third_party/adb/win/adb.exe"); - qputenv("QTSCRCPY_SERVER_PATH", "../../../../third_party/scrcpy-server"); - qputenv("QTSCRCPY_KEYMAP_PATH", "../../../../keymap"); - qputenv("QTSCRCPY_CONFIG_PATH", "../../../../config"); + qputenv("QTSCRCPY_ADB_PATH", "../../../third_party/adb/win/adb.exe"); + qputenv("QTSCRCPY_SERVER_PATH", "../../../third_party/scrcpy-server"); + qputenv("QTSCRCPY_KEYMAP_PATH", "../../../keymap"); + qputenv("QTSCRCPY_CONFIG_PATH", "../../../config"); #endif #ifdef Q_OS_OSX - qputenv("QTSCRCPY_KEYMAP_PATH", "../../../../../../keymap"); + qputenv("QTSCRCPY_KEYMAP_PATH", "../../../../../keymap"); #endif #ifdef Q_OS_LINUX - qputenv("QTSCRCPY_ADB_PATH", "../../../third_party/adb/linux/adb"); - qputenv("QTSCRCPY_SERVER_PATH", "../../../third_party/scrcpy-server"); - qputenv("QTSCRCPY_CONFIG_PATH", "../../../config"); - qputenv("QTSCRCPY_KEYMAP_PATH", "../../../keymap"); + qputenv("QTSCRCPY_ADB_PATH", "../../third_party/adb/linux/adb"); + qputenv("QTSCRCPY_SERVER_PATH", "../../third_party/scrcpy-server"); + qputenv("QTSCRCPY_CONFIG_PATH", "../../config"); + qputenv("QTSCRCPY_KEYMAP_PATH", "../../keymap"); #endif g_msgType = covertLogLevel(Config::getInstance().getLogLevel()); diff --git a/QtScrcpy/res/Info_Mac.plist b/QtScrcpy/res/Info_Mac.plist.in similarity index 90% rename from QtScrcpy/res/Info_Mac.plist rename to QtScrcpy/res/Info_Mac.plist.in index 3e25f20..007a4b7 100644 --- a/QtScrcpy/res/Info_Mac.plist +++ b/QtScrcpy/res/Info_Mac.plist.in @@ -5,11 +5,11 @@ CFBundleDevelopmentRegion zh-Hans CFBundleExecutable - @EXECUTABLE@ + QtScrcpy CFBundleGetInfoString Created by rankun CFBundleIconFile - @ICON@ + QtScrcpy CFBundleIdentifier rankun.QtScrcpy CFBundleInfoDictionaryVersion @@ -19,13 +19,13 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0.0 + ${BUNDLE_VERSION} CFBundleSupportedPlatforms MacOSX CFBundleVersion - 1.0.0 + ${BUNDLE_VERSION} LSMinimumSystemVersion 10.10 NSAppleEventsUsageDescription diff --git a/QtScrcpy/uibase/CMakeLists.txt b/QtScrcpy/uibase/CMakeLists.txt deleted file mode 100755 index 861883a..0000000 --- a/QtScrcpy/uibase/CMakeLists.txt +++ /dev/null @@ -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) diff --git a/QtScrcpy/util/CMakeLists.txt b/QtScrcpy/util/CMakeLists.txt deleted file mode 100755 index 2d92d13..0000000 --- a/QtScrcpy/util/CMakeLists.txt +++ /dev/null @@ -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) diff --git a/QtScrcpy/util/mousetap/CMakeLists.txt b/QtScrcpy/util/mousetap/CMakeLists.txt deleted file mode 100755 index 846851b..0000000 --- a/QtScrcpy/util/mousetap/CMakeLists.txt +++ /dev/null @@ -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}) diff --git a/QtScrcpy/version b/QtScrcpy/version index dc1e644..77d6f4c 100644 --- a/QtScrcpy/version +++ b/QtScrcpy/version @@ -1 +1 @@ -1.6.0 +0.0.0 diff --git a/ci/linux/build_for_ubuntu.sh b/ci/linux/build_for_ubuntu.sh index b67c72e..5e21bb1 100755 --- a/ci/linux/build_for_ubuntu.sh +++ b/ci/linux/build_for_ubuntu.sh @@ -8,7 +8,7 @@ echo --------------------------------------------------------------- # 从环境变量获取必要参数 # 例如 /home/barry/Qt5.9.6/5.9.6 echo ENV_QT_PATH $ENV_QT_PATH -qt_gcc_path=$ENV_QT_PATH/gcc_64 +qt_cmake_path=$ENV_QT_PATH/gcc_64/lib/cmake/Qt5 # 获取绝对路径,保证其他目录执行此脚本依然正确 { @@ -21,17 +21,17 @@ old_cd=$(pwd) cd $(dirname "$0") # 启动参数声明 -build_mode=debug +build_mode=RelWithDebInfo echo echo echo --------------------------------------------------------------- -echo check build param[debug/release] +echo check build param[Debug/Release/MinSizeRel/RelWithDebInfo] echo --------------------------------------------------------------- # 编译参数检查 -build_mode=$(echo $1 | tr '[:upper:]' '[:lower:]') -if [[ $build_mode != "release" && $build_mode != "debug" ]]; then +build_mode=$(echo $1) +if [[ $build_mode != "Release" && $build_mode != "Debug" && $build_mode != "MinSizeRel" && $build_mode != "RelWithDebInfo" ]]; then echo "error: unkonow build mode -- $1" exit 1 fi @@ -40,44 +40,37 @@ fi echo current build mode: $build_mode # 环境变量设置 -export PATH=$qt_gcc_path/bin:$PATH +#export PATH=$qt_gcc_path/bin:$PATH echo echo echo --------------------------------------------------------------- -echo begin qmake build +echo begin cmake build echo --------------------------------------------------------------- # 删除输出目录 -output_path=$script_path../../output/linux/$build_mode +output_path=$script_path../../output if [ -d "$output_path" ]; then rm -rf $output_path fi # 删除临时目录 -temp_path=$script_path/../temp -if [ -d "$temp_path" ]; then - rm -rf $temp_path +build_path=$script_path/../build_temp +if [ -d "$build_path" ]; then + rm -rf $build_path fi -mkdir $temp_path -cd $temp_path +mkdir $build_path +cd $build_path -qmake_params="-spec linux-g++" -if [ $build_mode == "debug" ]; then - qmake_params="$qmake_params CONFIG+=debug CONFIG+=x86_64 CONFIG+=qml_debug" -else - qmake_params="$qmake_params CONFIG+=x86_64 CONFIG+=qtquickcompiler" -fi - -# qmake ../../all.pro -spec linux-g++ CONFIG+=debug CONFIG+=x86_64 CONFIG+=qml_debug -qmake ../../all.pro $qmake_params +cmake_params="-DCMAKE_PREFIX_PATH=$qt_cmake_path -DCMAKE_BUILD_TYPE=$build_mode" +cmake $cmake_params ../.. if [ $? -ne 0 ] ;then - echo "qmake failed" + echo "cmake failed" exit 1 fi -make -j8 +cmake --build . --config $build_mode -j8 if [ $? -ne 0 ] ;then - echo "make failed" + echo "cmake build failed" exit 1 fi diff --git a/ci/mac/build_for_mac.sh b/ci/mac/build_for_mac.sh index aa5990f..a3e6dd0 100755 --- a/ci/mac/build_for_mac.sh +++ b/ci/mac/build_for_mac.sh @@ -8,7 +8,7 @@ echo --------------------------------------------------------------- # 从环境变量获取必要参数 # 例如 /Users/barry/Qt5.12.5/5.12.5 echo ENV_QT_PATH $ENV_QT_PATH -qt_clang_path=$ENV_QT_PATH/clang_64 +qt_cmake_path=$ENV_QT_PATH/clang_64/lib/cmake/Qt5 # 获取绝对路径,保证其他目录执行此脚本依然正确 { @@ -21,17 +21,17 @@ old_cd=$(pwd) cd $(dirname "$0") # 启动参数声明 -build_mode=debug +build_mode=RelWithDebInfo echo echo echo --------------------------------------------------------------- -echo check build param[debug/release] +echo check build param[Debug/Release/MinSizeRel/RelWithDebInfo] echo --------------------------------------------------------------- # 编译参数检查 -build_mode=$(echo $1 | tr '[:upper:]' '[:lower:]') -if [[ $build_mode != "release" && $build_mode != "debug" ]]; then +build_mode=$(echo $1) +if [[ $build_mode != "Release" && $build_mode != "Debug" && $build_mode != "MinSizeRel" && $build_mode != "RelWithDebInfo" ]]; then echo "error: unkonow build mode -- $1" exit 1 fi @@ -39,45 +39,35 @@ fi # 提示 echo current build mode: $build_mode -# 环境变量设置 -export PATH=$qt_clang_path/bin:$PATH - echo echo echo --------------------------------------------------------------- -echo begin qmake build +echo begin cmake build echo --------------------------------------------------------------- # 删除输出目录 -output_path=$script_path../../output/mac/$build_mode +output_path=$script_path../../output if [ -d "$output_path" ]; then rm -rf $output_path fi -# 删除临时目录 -temp_path=$script_path/../temp -if [ -d "$temp_path" ]; then - rm -rf $temp_path +# 删除编译目录 +build_path=$script_path/../build_temp +if [ -d "$build_path" ]; then + rm -rf $build_path fi -mkdir $temp_path -cd $temp_path +mkdir $build_path +cd $build_path -qmake_params="-spec macx-clang" -if [ $build_mode == "debug" ]; then - qmake_params="$qmake_params CONFIG+=debug CONFIG+=x86_64 CONFIG+=qml_debug" -else - qmake_params="$qmake_params CONFIG+=x86_64 CONFIG+=qtquickcompiler" -fi - -# qmake ../../all.pro -spec macx-clang CONFIG+=debug CONFIG+=x86_64 CONFIG+=qml_debug -qmake ../../all.pro $qmake_params +cmake_params="-DCMAKE_PREFIX_PATH=$qt_cmake_path -DCMAKE_BUILD_TYPE=$build_mode -G Xcode" +cmake $cmake_params ../.. if [ $? -ne 0 ] ;then - echo "qmake failed" + echo "cmake failed" exit 1 fi -make -j8 +cmake --build . --config $build_mode -j8 if [ $? -ne 0 ] ;then - echo "make failed" + echo "cmake build failed" exit 1 fi diff --git a/ci/mac/publish_for_mac.sh b/ci/mac/publish_for_mac.sh index deb4ef1..c16b426 100755 --- a/ci/mac/publish_for_mac.sh +++ b/ci/mac/publish_for_mac.sh @@ -30,7 +30,7 @@ keymap_path=$script_path/../../keymap # config_path=$script_path/../../config publish_path=$script_path/$publish_dir -release_path=$script_path/../../output/mac/release +release_path=$script_path/../../output/x64/RelWithDebInfo export PATH=$qt_clang_path/bin:$PATH diff --git a/ci/win/build_for_win.bat b/ci/win/build_for_win.bat index edf2258..0e7e584 100644 --- a/ci/win/build_for_win.bat +++ b/ci/win/build_for_win.bat @@ -7,12 +7,11 @@ echo check ENV echo --------------------------------------------------------------- :: 从环境变量获取必要参数 -:: example: D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvarsall.bat -set vcvarsall="%ENV_VCVARSALL%" -:: example: D:\Qt\Qt5.12.5\5.12.5 -set qt_msvc_path="%ENV_QT_PATH%" +:: example: D:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat +:: set vcvarsall="%ENV_VCVARSALL%" -echo ENV_VCVARSALL %ENV_VCVARSALL% +:: example: D:\Qt\Qt5.12.5\5.12.5 +:: echo ENV_VCVARSALL %ENV_VCVARSALL% echo ENV_QT_PATH %ENV_QT_PATH% :: 获取脚本绝对路径 @@ -23,96 +22,82 @@ cd /d %~dp0 :: 启动参数声明 set cpu_mode=x86 -set build_mode=debug +set build_mode=RelWithDebInfo set errno=1 echo= echo= echo --------------------------------------------------------------- -echo check build param[debug/release x86/x64] +echo check build param[Debug/Release/MinSizeRel/RelWithDebInfo] echo --------------------------------------------------------------- -:: 编译参数检查 /i忽略大小写 -if /i "%1"=="debug" ( - set build_mode=debug +:: 编译参数检查 +if "%1"=="Debug" ( goto build_mode_ok ) -if /i "%1"=="release" ( - set build_mode=release +if "%1"=="Release" ( + goto build_mode_ok +) +if "%1"=="MinSizeRel" ( + goto build_mode_ok +) +if "%1"=="RelWithDebInfo" ( goto build_mode_ok ) echo error: unkonow build mode -- %1 goto return :build_mode_ok +set build_mode=%1 +set cmake_vs_build_mode=Win32 +set qt_cmake_path=%ENV_QT_PATH%\msvc2019\lib\cmake\Qt5 + if /i "%2"=="x86" ( set cpu_mode=x86 + set cmake_vs_build_mode=Win32 + set qt_cmake_path=%ENV_QT_PATH%\msvc2019\lib\cmake\Qt5 ) if /i "%2"=="x64" ( set cpu_mode=x64 + set cmake_vs_build_mode=x64 + set qt_cmake_path=%ENV_QT_PATH%\msvc2019_64\lib\cmake\Qt5 ) :: 提示 echo current build mode: %build_mode% %cpu_mode% - -:: 环境变量设置 -if /i %cpu_mode% == x86 ( - set qt_msvc_path=%qt_msvc_path%\msvc2017\bin -) else ( - set qt_msvc_path=%qt_msvc_path%\msvc2017_64\bin -) -set PATH=%qt_msvc_path%;%PATH% - -:: 注册vc环境 -if /i %cpu_mode% == x86 ( - call %vcvarsall% %cpu_mode% -) else ( - call %vcvarsall% %cpu_mode% -) - -if not %errorlevel%==0 ( - echo "vcvarsall not find" - goto return -) +echo qt cmake path: %qt_cmake_path% echo= echo= echo --------------------------------------------------------------- -echo begin qmake build +echo begin cmake build echo --------------------------------------------------------------- :: 删除输出目录 -set output_path=%script_path%..\..\output\win\%cpu_mode%\%build_mode% +set output_path=%script_path%..\..\output if exist %output_path% ( rmdir /q /s %output_path% ) :: 删除临时目录 -set temp_path=%script_path%..\temp +set temp_path=%script_path%..\build_temp if exist %temp_path% ( rmdir /q /s %temp_path% ) md %temp_path% cd %temp_path% -set qmake_params=-spec win32-msvc -if /i %build_mode% == debug ( - set qmake_params=%qmake_params% "CONFIG+=debug" "CONFIG+=qml_debug" -) else ( - set qmake_params=%qmake_params% "CONFIG+=qtquickcompiler" -) +set cmake_params=-DCMAKE_PREFIX_PATH=%qt_cmake_path% -DCMAKE_BUILD_TYPE=%build_mode% -G "Visual Studio 16 2019" -A %cmake_vs_build_mode% +echo cmake params: %cmake_params% -:: qmake ../../all.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug" -qmake ../../all.pro %qmake_params% +cmake %cmake_params% ../.. if not %errorlevel%==0 ( - echo "qmake failed" + echo "cmake failed" goto return ) -:: nmake -:: jom是qt的多进程nmake工具 -..\win\jom -j8 +cmake --build . --config %build_mode% -j8 if not %errorlevel%==0 ( - echo "nmake failed" + echo "cmake build failed" goto return ) diff --git a/ci/win/publish_for_win.bat b/ci/win/publish_for_win.bat index 5b56112..b9dfcdd 100644 --- a/ci/win/publish_for_win.bat +++ b/ci/win/publish_for_win.bat @@ -7,7 +7,7 @@ echo check ENV echo --------------------------------------------------------------- :: 从环境变量获取必要参数 -:: example: D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvarsall.bat +:: example: D:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat set vcvarsall="%ENV_VCVARSALL%" :: 例如 d:\a\QtScrcpy\Qt\5.12.7 set qt_msvc_path="%ENV_QT_PATH%" @@ -47,12 +47,12 @@ set config_path=%script_path%..\..\config if /i %cpu_mode% == x86 ( set publish_path=%script_path%%publish_dir%\ - set release_path=%script_path%..\..\output\win\x86\release - set qt_msvc_path=%qt_msvc_path%\msvc2017\bin + set release_path=%script_path%..\..\output\x86\RelWithDebInfo + set qt_msvc_path=%qt_msvc_path%\msvc2019\bin ) else ( set publish_path=%script_path%%publish_dir%\ - set release_path=%script_path%..\..\output\win\x64\release - set qt_msvc_path=%qt_msvc_path%\msvc2017_64\bin + set release_path=%script_path%..\..\output\x64\RelWithDebInfo + set qt_msvc_path=%qt_msvc_path%\msvc2019_64\bin ) set PATH=%qt_msvc_path%;%PATH% diff --git a/config/config.ini b/config/config.ini index 7f61934..3a73dcd 100644 --- a/config/config.ini +++ b/config/config.ini @@ -15,13 +15,13 @@ ServerVersion=1.21 ServerPath=/data/local/tmp/scrcpy-server.jar # 自定义adb路径,例如D:/android/tools/adb.exe AdbPath= -# 编码选项 "-"表示默认 +# 编码选项 ""表示默认 # 例如 CodecOptions="profile=1,level=2" # 更多编码选项参考 https://d.android.com/reference/android/media/MediaFormat CodecOptions="" -# 指定编码器名称,必须是H.264编码器 +# 指定编码器名称(必须是H.264编码器),""表示默认 # 例如 CodecName="OMX.qcom.video.encoder.avc" -CodecName="OMX.qcom.video.encoder.avc" +CodecName="" # Set the log level (debug, info, warn, error) LogLevel=info