mirror of
https://github.com/LizardByte/Sunshine.git
synced 2026-08-07 10:20:46 +00:00
chore: migrate to qt tray for all platforms (#5260)
This commit is contained in:
@@ -107,7 +107,6 @@ jobs:
|
||||
devel/evdev-proto \
|
||||
devel/git \
|
||||
devel/libevdev \
|
||||
devel/libnotify \
|
||||
devel/llvm${{ env.FREEBSD_CLANG_VERSION }} \
|
||||
devel/ninja \
|
||||
devel/pkgconf \
|
||||
|
||||
@@ -90,7 +90,9 @@ jobs:
|
||||
icu4c@78 \
|
||||
miniupnpc \
|
||||
openssl@3 \
|
||||
opus
|
||||
opus \
|
||||
qtbase \
|
||||
qtsvg
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
||||
|
||||
@@ -108,6 +108,7 @@ jobs:
|
||||
"mingw-w64-${TOOLCHAIN}-openssl"
|
||||
"mingw-w64-${TOOLCHAIN}-opus"
|
||||
"mingw-w64-${TOOLCHAIN}-toolchain"
|
||||
"mingw-w64-${TOOLCHAIN}-qt6-static"
|
||||
)
|
||||
|
||||
if [[ "${MATRIX_MSYSTEM}" == "ucrt64" ]]; then
|
||||
@@ -239,10 +240,12 @@ jobs:
|
||||
-S . \
|
||||
-DBUILD_WERROR=ON \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DCMAKE_PREFIX_PATH="${MINGW_PREFIX}/qt6-static" \
|
||||
-DSUNSHINE_ASSETS_DIR=assets \
|
||||
-DSUNSHINE_PUBLISHER_NAME="${GITHUB_REPOSITORY_OWNER}" \
|
||||
-DSUNSHINE_PUBLISHER_WEBSITE="https://app.lizardbyte.dev" \
|
||||
-DSUNSHINE_PUBLISHER_ISSUE_URL="https://app.lizardbyte.dev/support"
|
||||
-DSUNSHINE_PUBLISHER_ISSUE_URL="https://app.lizardbyte.dev/support" \
|
||||
-DSUNSHINE_USE_STATIC_QT=ON
|
||||
echo "::add-matcher::.github/matchers/gcc.json"
|
||||
ninja -C build
|
||||
echo "::remove-matcher owner=gcc::"
|
||||
|
||||
@@ -14,6 +14,13 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64")
|
||||
list(APPEND SUNSHINE_COMPILE_OPTIONS -Wno-dll-attribute-on-redeclaration) # Boost
|
||||
list(APPEND SUNSHINE_COMPILE_OPTIONS -Wno-unknown-warning-option) # ViGEmClient
|
||||
list(APPEND SUNSHINE_COMPILE_OPTIONS -Wno-unused-variable) # Boost
|
||||
|
||||
# Qt's static qwindows plugin and MinGW's Windowsapp import library both provide the
|
||||
# UiaRaiseNotificationEvent import thunk on ARM64. Keep both required libraries while
|
||||
# permitting lld to coalesce their identical definitions.
|
||||
if(SUNSHINE_USE_STATIC_QT AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
list(APPEND SUNSHINE_LINK_OPTIONS -Wl,--allow-multiple-definition)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# see gcc bug 98723
|
||||
|
||||
@@ -25,7 +25,49 @@ add_subdirectory("${CMAKE_SOURCE_DIR}/third-party/lizardbyte-common")
|
||||
add_subdirectory("${CMAKE_SOURCE_DIR}/third-party/libdisplaydevice")
|
||||
|
||||
if(SUNSHINE_ENABLE_TRAY)
|
||||
if(SUNSHINE_USE_STATIC_QT)
|
||||
set(_sunshine_find_library_suffixes "${CMAKE_FIND_LIBRARY_SUFFIXES}")
|
||||
set(_sunshine_import_library_suffix "${CMAKE_IMPORT_LIBRARY_SUFFIX}")
|
||||
set(_sunshine_pkg_config_argn "${PKG_CONFIG_ARGN}")
|
||||
set(_sunshine_disable_find_package_harfbuzz "${CMAKE_DISABLE_FIND_PACKAGE_harfbuzz}")
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
||||
set(CMAKE_IMPORT_LIBRARY_SUFFIX ".a")
|
||||
set(PKG_CONFIG_ARGN --static)
|
||||
|
||||
# HarfBuzz's config-file target omits dependencies needed by its static archive.
|
||||
# Use Qt's pkg-config fallback so --static supplies the complete link interface.
|
||||
set(CMAKE_DISABLE_FIND_PACKAGE_harfbuzz TRUE)
|
||||
|
||||
# CMake's FindTIFF module does not propagate dependencies of the static archive.
|
||||
# Provide its standard target from pkg-config before Qt imports the TIFF plugin.
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(SUNSHINE_STATIC_TIFF REQUIRED IMPORTED_TARGET libtiff-4)
|
||||
add_library(TIFF::TIFF INTERFACE IMPORTED)
|
||||
target_link_libraries(TIFF::TIFF INTERFACE PkgConfig::SUNSHINE_STATIC_TIFF)
|
||||
|
||||
set(_sunshine_module_path "${CMAKE_MODULE_PATH}")
|
||||
find_package(Qt6 REQUIRED COMPONENTS Widgets Svg)
|
||||
get_target_property(_sunshine_qt_core_type Qt6::Core TYPE)
|
||||
if(NOT _sunshine_qt_core_type STREQUAL "STATIC_LIBRARY")
|
||||
message(FATAL_ERROR "SUNSHINE_USE_STATIC_QT requires a static Qt 6 installation.")
|
||||
endif()
|
||||
set(CMAKE_MODULE_PATH "${_sunshine_module_path}")
|
||||
endif()
|
||||
|
||||
add_subdirectory("${CMAKE_SOURCE_DIR}/third-party/tray")
|
||||
|
||||
if(SUNSHINE_USE_STATIC_QT)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "${_sunshine_find_library_suffixes}")
|
||||
set(CMAKE_IMPORT_LIBRARY_SUFFIX "${_sunshine_import_library_suffix}")
|
||||
set(PKG_CONFIG_ARGN "${_sunshine_pkg_config_argn}")
|
||||
set(CMAKE_DISABLE_FIND_PACKAGE_harfbuzz "${_sunshine_disable_find_package_harfbuzz}")
|
||||
unset(_sunshine_disable_find_package_harfbuzz)
|
||||
unset(_sunshine_find_library_suffixes)
|
||||
unset(_sunshine_import_library_suffix)
|
||||
unset(_sunshine_module_path)
|
||||
unset(_sunshine_pkg_config_argn)
|
||||
unset(_sunshine_qt_core_type)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# common dependencies
|
||||
|
||||
@@ -154,17 +154,6 @@ if(${SUNSHINE_TRAY} STREQUAL 1)
|
||||
# Icons used by the Qt tray backend are no longer installed to the hicolor icon theme,
|
||||
# because Qt6 will not allow icons not part of the theme... so we will use icons from our web directory instead
|
||||
|
||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "\
|
||||
${CPACK_DEBIAN_PACKAGE_DEPENDS}, \
|
||||
libnotify4"
|
||||
)
|
||||
set(CPACK_RPM_PACKAGE_REQUIRES "\
|
||||
${CPACK_RPM_PACKAGE_REQUIRES}, \
|
||||
libnotify >= 0.8.0"
|
||||
)
|
||||
list(APPEND CPACK_FREEBSD_PACKAGE_DEPS
|
||||
devel/libnotify
|
||||
)
|
||||
if(TRAY_QT_VERSION EQUAL 6)
|
||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "\
|
||||
${CPACK_DEBIAN_PACKAGE_DEPENDS}, \
|
||||
|
||||
@@ -22,6 +22,26 @@ else()
|
||||
BUNDLE DESTINATION .
|
||||
COMPONENT Runtime)
|
||||
|
||||
if(SUNSHINE_ENABLE_TRAY)
|
||||
# Import Qt in this directory so its deployment commands and targets are visible here.
|
||||
set(_sunshine_module_path "${CMAKE_MODULE_PATH}")
|
||||
find_package(Qt6 REQUIRED COMPONENTS Core)
|
||||
set(CMAKE_MODULE_PATH "${_sunshine_module_path}")
|
||||
unset(_sunshine_module_path)
|
||||
|
||||
qt6_generate_deploy_script(
|
||||
TARGET sunshine
|
||||
OUTPUT_SCRIPT SUNSHINE_QT_DEPLOY_SCRIPT
|
||||
CONTENT "
|
||||
qt6_deploy_runtime_dependencies(
|
||||
EXECUTABLE \"$<TARGET_FILE_NAME:sunshine>.app\"
|
||||
NO_APP_STORE_COMPLIANCE
|
||||
NO_TRANSLATIONS
|
||||
DEPLOY_TOOL_OPTIONS -no-codesign
|
||||
)")
|
||||
install(SCRIPT "${SUNSHINE_QT_DEPLOY_SCRIPT}" COMPONENT Runtime)
|
||||
endif()
|
||||
|
||||
install(FILES "${APPLE_PLIST_FILE}"
|
||||
DESTINATION "${MAC_BUNDLE_CONTENTS}"
|
||||
COMPONENT Runtime)
|
||||
@@ -44,6 +64,18 @@ else()
|
||||
message(STATUS \"Running fixup_bundle for: \${_app}\")
|
||||
include(BundleUtilities)
|
||||
set(BU_CHMOD_BUNDLE_ITEMS TRUE)
|
||||
|
||||
# Resolve @rpath items that Qt already deployed into the app bundle.
|
||||
function(gp_resolve_item_override context item exepath dirs resolved_item_var resolved_var)
|
||||
if(\"\${item}\" MATCHES \"^@rpath/(.+)$\")
|
||||
set(_embedded_item \"\${_app}/Contents/Frameworks/\${CMAKE_MATCH_1}\")
|
||||
if(EXISTS \"\${_embedded_item}\")
|
||||
set(\${resolved_item_var} \"\${_embedded_item}\" PARENT_SCOPE)
|
||||
set(\${resolved_var} TRUE PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
fixup_bundle(\"\${_app}\" \"\" \"\")
|
||||
|
||||
# Remove Finder/resource-fork metadata that breaks codesign.
|
||||
@@ -61,12 +93,13 @@ else()
|
||||
|
||||
# SHOULD_SIGN is set only when publish_release is true or when manually building
|
||||
if(\"\$ENV{SHOULD_SIGN}\" STREQUAL \"true\")
|
||||
# Sign anything inside Contents/Frameworks
|
||||
# Sign bundled frameworks and plugins before signing the app itself.
|
||||
set(_fw_dir \"\${_app}/Contents/Frameworks\")
|
||||
if(EXISTS \"\${_fw_dir}\")
|
||||
file(GLOB_RECURSE _sign_items
|
||||
\"\${_fw_dir}/*.framework\"
|
||||
\"\${_fw_dir}/*.dylib\"
|
||||
\"\${_app}/Contents/PlugIns/*.dylib\"
|
||||
)
|
||||
|
||||
foreach(item IN LISTS _sign_items)
|
||||
|
||||
@@ -18,6 +18,11 @@ option(SUNSHINE_CONFIGURE_ONLY "Configure special files only, then exit." OFF)
|
||||
|
||||
option(SUNSHINE_ENABLE_TRAY "Enable system tray icon." ON)
|
||||
|
||||
if(WIN32)
|
||||
option(SUNSHINE_USE_STATIC_QT
|
||||
"Require static Qt libraries and their static third-party dependencies." OFF)
|
||||
endif()
|
||||
|
||||
option(SUNSHINE_SYSTEM_VULKAN_HEADERS "Use system installation of vulkan-headers rather than the submodule." OFF)
|
||||
option(SUNSHINE_SYSTEM_WAYLAND_PROTOCOLS "Use system installation of wayland-protocols rather than the submodule." OFF)
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@ apt-get install -y --no-install-recommends \
|
||||
libevdev-dev \
|
||||
libgbm-dev \
|
||||
libminiupnpc-dev \
|
||||
libnotify-dev \
|
||||
libnuma-dev \
|
||||
libopus-dev \
|
||||
libpulse-dev \
|
||||
|
||||
+13
-1
@@ -27,7 +27,6 @@ pkg install -y \
|
||||
devel/evdev-proto \
|
||||
devel/git \
|
||||
devel/libevdev \
|
||||
devel/libnotify \
|
||||
devel/llvm19 \
|
||||
devel/ninja \
|
||||
devel/pkgconf \
|
||||
@@ -102,6 +101,8 @@ dependencies=(
|
||||
"openssl@3"
|
||||
"opus"
|
||||
"pkg-config"
|
||||
"qtbase"
|
||||
"qtsvg"
|
||||
)
|
||||
brew install "${dependencies[@]}"
|
||||
```
|
||||
@@ -130,6 +131,8 @@ dependencies=(
|
||||
"ninja"
|
||||
"npm9"
|
||||
"pkgconfig"
|
||||
"qt6-qtbase"
|
||||
"qt6-qtsvg"
|
||||
)
|
||||
sudo port install "${dependencies[@]}"
|
||||
```
|
||||
@@ -174,6 +177,7 @@ dependencies=(
|
||||
"mingw-w64-${TOOLCHAIN}-openssl"
|
||||
"mingw-w64-${TOOLCHAIN}-opus"
|
||||
"mingw-w64-${TOOLCHAIN}-toolchain"
|
||||
"mingw-w64-${TOOLCHAIN}-qt6-static"
|
||||
)
|
||||
if [[ "${MSYSTEM}" == "UCRT64" ]]; then
|
||||
dependencies+=(
|
||||
@@ -185,6 +189,14 @@ fi
|
||||
pacman -S "${dependencies[@]}"
|
||||
```
|
||||
|
||||
The static Qt package is installed under a separate prefix. Add the following options when configuring a Windows
|
||||
build so Sunshine and Qt's third-party dependencies are linked statically:
|
||||
|
||||
```bash
|
||||
-DCMAKE_PREFIX_PATH="${MINGW_PREFIX}/qt6-static" \
|
||||
-DSUNSHINE_USE_STATIC_QT=ON
|
||||
```
|
||||
|
||||
To create a WiX installer, you also need to install [.NET](https://dotnet.microsoft.com/download).
|
||||
|
||||
For ARM64: To build frontend, you also need to install [Node.JS](https://nodejs.org/en/download)
|
||||
|
||||
@@ -39,7 +39,6 @@ depends=(
|
||||
'libdrm'
|
||||
'libevdev'
|
||||
'libmfx'
|
||||
'libnotify'
|
||||
'libpipewire'
|
||||
'libpulse'
|
||||
'libva'
|
||||
|
||||
@@ -31,7 +31,6 @@ BuildRequires: libcap-devel
|
||||
BuildRequires: libcurl-devel
|
||||
BuildRequires: libdrm-devel
|
||||
BuildRequires: libevdev-devel
|
||||
BuildRequires: libnotify-devel >= 0.8.0
|
||||
BuildRequires: libva-devel
|
||||
BuildRequires: libX11-devel
|
||||
BuildRequires: libxcb-devel
|
||||
@@ -152,7 +151,6 @@ BuildRequires: libqt6-qtsvg-devel
|
||||
%global cuda_dir %{_builddir}/cuda
|
||||
|
||||
# Common runtime requirements
|
||||
Requires: libnotify >= 0.8.0
|
||||
Requires: miniupnpc >= 2.2.4
|
||||
Requires: which >= 2.21
|
||||
|
||||
|
||||
@@ -58,6 +58,8 @@ class Sunshine < Formula
|
||||
depends_on "miniupnpc"
|
||||
depends_on "openssl@3"
|
||||
depends_on "opus"
|
||||
depends_on "qtbase"
|
||||
depends_on "qtsvg"
|
||||
|
||||
on_sonoma do
|
||||
depends_on xcode: ["16.2", :build] # required for jthreads on macos-14
|
||||
@@ -78,7 +80,6 @@ class Sunshine < Formula
|
||||
depends_on "libcap"
|
||||
depends_on "libdrm"
|
||||
depends_on "libice"
|
||||
depends_on "libnotify"
|
||||
depends_on "libsm"
|
||||
depends_on "libva"
|
||||
depends_on "libx11"
|
||||
@@ -95,8 +96,6 @@ class Sunshine < Formula
|
||||
depends_on "pango"
|
||||
depends_on "pipewire"
|
||||
depends_on "pulseaudio"
|
||||
depends_on "qtbase"
|
||||
depends_on "qtsvg"
|
||||
depends_on "shaderc"
|
||||
depends_on "systemd"
|
||||
depends_on "vulkan-loader"
|
||||
|
||||
@@ -283,7 +283,6 @@ function add_arch_deps() {
|
||||
'libdrm'
|
||||
'libevdev'
|
||||
'libmfx'
|
||||
'libnotify'
|
||||
'libpulse'
|
||||
'libva'
|
||||
'libx11'
|
||||
@@ -343,7 +342,6 @@ function add_debian_based_deps() {
|
||||
"libevdev-dev"
|
||||
"libgbm-dev"
|
||||
"libminiupnpc-dev"
|
||||
"libnotify-dev"
|
||||
"libnuma-dev"
|
||||
"libopus-dev"
|
||||
"libpipewire-0.3-dev"
|
||||
@@ -448,7 +446,6 @@ function add_fedora_deps() {
|
||||
"libcurl-devel"
|
||||
"libdrm-devel"
|
||||
"libevdev-devel"
|
||||
"libnotify-devel"
|
||||
"libX11-devel" # X11
|
||||
"libxcb-devel" # X11
|
||||
"libXcursor-devel" # X11
|
||||
|
||||
@@ -37,6 +37,8 @@ required_formulas=(
|
||||
"openssl@3"
|
||||
"opus"
|
||||
"llvm"
|
||||
"qtbase"
|
||||
"qtsvg"
|
||||
)
|
||||
|
||||
function _usage() {
|
||||
|
||||
Vendored
+1
-1
Submodule third-party/tray updated: 8ea4c6835d...1d0d69623f
Reference in New Issue
Block a user