server/CMakeLists.txt
Rama main · réplica de lectura del repositorio original.
cmake_minimum_required(VERSION 3.20)
# `CMAKE_CUDA_ARCHITECTURES` requires 3.18
# `set_source_files_properties` requires 3.18
# `cmake_path(CONVERT ... TO_NATIVE_PATH_LIST ...)` requires 3.20
# todo - set this conditionally
project(ArtLightServer VERSION 1.6.1
DESCRIPTION "Self-hosted game stream host for Moonlight"
HOMEPAGE_URL "https://github.com/onaiaku/ArtLight")
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(NOT DEFINED CMAKE_CUDA_STANDARD)
set(CMAKE_CUDA_STANDARD 17)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
endif()
set(PROJECT_LICENSE "GPL-3.0-only")
# PROJECT_FQDN names the packaged desktop identity. Every file in packaging/linux/
# is named for it -- io.github.onaiaku.ArtLight.desktop, .terminal.desktop,
# .metainfo.xml, .kwin.desktop.in, and app-io.github.onaiaku.ArtLight.service.in --
# and special_package_configuration.cmake builds those paths from this value, so it
# must match the filenames or the Linux configure fails outright. ArtLight's own
# reverse-DNS identity belongs to the deliberate Linux rename, which renames these
# files and this value together. (Windows does not use PROJECT_FQDN: the Windows
# identity is WINDOWS_APP_USER_MODEL_ID below.)
set(PROJECT_FQDN "io.github.onaiaku.ArtLight")
set(WINDOWS_APP_USER_MODEL_ID "onaiaku.ArtLightServer")
set(PROJECT_BRIEF_DESCRIPTION "GameStream host for Artemis") # must be <= 35 characters
set(PROJECT_LONG_DESCRIPTION "Offering low latency, cloud gaming server capabilities with support for AMD, Intel, \
and Nvidia GPUs for hardware encoding. Software encoding is also available. You can connect to Apollo from any \
Artemis client on a variety of devices. A web UI and configuration API are available for configuration, client \
pairing, and integrations.")
# Ensure WiX-specific CPack variables are present early in config generation
if (WIN32)
# WiX requires RTF license; also set stable Upgrade GUID
set(CPACK_WIX_LICENSE_RTF "${CMAKE_SOURCE_DIR}/packaging/windows/LICENSE.rtf")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/packaging/windows/LICENSE.rtf")
set(CPACK_WIX_UPGRADE_GUID "{E3FA501A-85F8-4187-85A7-D6E6BDC7EDA1}")
endif()
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to 'Release' as none was specified.")
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
set(FREEBSD ON)
endif()
# set the module path, used for includes
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
# export compile_commands.json
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# set version info for this build
include(${CMAKE_MODULE_PATH}/prep/build_version.cmake)
# cmake build flags
include(${CMAKE_MODULE_PATH}/prep/options.cmake)
# initial prep
include(${CMAKE_MODULE_PATH}/prep/init.cmake)
# Resolve libvirtualdisplay before the platform package templates consume its
# driver-owned assets. special_package_configuration.cmake reads
# LIBVIRTUALDISPLAY_LINUX_ROOT, which only dependencies/libvirtualdisplay_source
# sets, and the dependency target itself is not added until dependencies/common.cmake
# further down. Without this the Linux configure dies with
# "libvirtualdisplay Linux assets are unavailable".
include(${CMAKE_MODULE_PATH}/dependencies/libvirtualdisplay_source.cmake)
# Native Linux package templates need this value before dependency targets are
# added. Keep it in the cache so libvirtualdisplay sees the same decision.
if(SUNSHINE_BUILD_STEAMOS)
set(BUILD_VIBESHINE_KWIN_GPU_BRIDGE OFF CACHE BOOL
"Build the ArtLight KWin GPU-association bridge" FORCE)
else()
set(BUILD_VIBESHINE_KWIN_GPU_BRIDGE ON CACHE BOOL
"Build the ArtLight KWin GPU-association bridge" FORCE)
endif()
# configure special package files, such as sunshine.desktop, Flatpak manifest, Portfile , etc.
include(${CMAKE_MODULE_PATH}/prep/special_package_configuration.cmake)
# Exit early if END_BUILD is ON, i.e. when only generating package manifests
if(${END_BUILD})
return()
endif()
# project constants
include(${CMAKE_MODULE_PATH}/prep/constants.cmake)
# load macros
include(${CMAKE_MODULE_PATH}/macros/common.cmake)
# load dependencies
include(${CMAKE_MODULE_PATH}/dependencies/common.cmake)
# setup compile definitions
include(${CMAKE_MODULE_PATH}/compile_definitions/common.cmake)
# target definitions
include(${CMAKE_MODULE_PATH}/targets/common.cmake)
# packaging
include(${CMAKE_MODULE_PATH}/packaging/common.cmake)
# Unit tests are part of every project build. Configure packaging first so its
# globally guarded contracts are initialized in the project scope before test
# targets consume them.
if(BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif()