mirror of
https://github.com/barry-ran/QtScrcpy.git
synced 2025-04-19 19:15:07 +00:00
feat: add cmake (#544)
* 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: 冉坤 <rankun@bytedance.com>
This commit is contained in:
parent
1dced51f0b
commit
5e1cc1b44f
37 changed files with 521 additions and 807 deletions
2
.github/workflows/macos.yml
vendored
2
.github/workflows/macos.yml
vendored
|
@ -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
|
||||
|
|
5
.github/workflows/ubuntu.yml
vendored
5
.github/workflows/ubuntu.yml
vendored
|
@ -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
|
||||
|
|
2
.github/workflows/windows.yml
vendored
2
.github/workflows/windows.yml
vendored
|
@ -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
|
||||
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -12,4 +12,5 @@
|
|||
/build/
|
||||
build-*
|
||||
*.DS_Store
|
||||
userdata.ini
|
||||
userdata.ini
|
||||
Info_Mac.plist
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
|
@ -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
|
||||
}
|
||||
|
||||
# 依赖模块
|
||||
|
|
|
@ -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
|
||||
)
|
|
@ -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})
|
|
@ -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
|
||||
)
|
||||
|
|
@ -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})
|
|
@ -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
|
||||
)
|
|
@ -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
|
||||
)
|
|
@ -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)
|
|
@ -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
|
||||
)
|
|
@ -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
|
||||
)
|
|
@ -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)
|
|
@ -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
|
||||
)
|
|
@ -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)
|
|
@ -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
|
||||
)
|
|
@ -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
|
||||
// <https://d.android.com/reference/android/media/MediaFormat>
|
||||
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 "...");
|
||||
|
|
|
@ -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
|
||||
)
|
|
@ -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
|
||||
)
|
|
@ -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
|
||||
)
|
|
@ -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)
|
|
@ -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());
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>zh-Hans</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>@EXECUTABLE@</string>
|
||||
<string>QtScrcpy</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>Created by rankun</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>@ICON@</string>
|
||||
<string>QtScrcpy</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>rankun.QtScrcpy</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
|
@ -19,13 +19,13 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0.0</string>
|
||||
<string>${BUNDLE_VERSION}</string>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>MacOSX</string>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0.0</string>
|
||||
<string>${BUNDLE_VERSION}</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.10</string>
|
||||
<key>NSAppleEventsUsageDescription</key>
|
|
@ -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)
|
|
@ -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)
|
|
@ -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})
|
|
@ -1 +1 @@
|
|||
1.6.0
|
||||
0.0.0
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
@ -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%
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue