mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Implemented using libopus for the Opus codec, same as is used in Discord. This adds the following cvars: - `voice_chat` On/Off, triggers self-deafen state on server via weaponprefs - `voice_mode` Activity/PTT - `voice_selfmute` On/Off, triggers self-mute state on server via weaponprefs - `voice_inputamp` -30 to 30, scales input by value in decibels - `voice_activationthreshold` -30 to 0, if any peak in a frame is higher, activates voice - `voice_loopback` On/Off, plays back local transcoded voice - `voice_proximity` On/Off, enables proximity effects for server - `voice_distanceattenuation_distance` distance in fracunits to scale voice volume over - `voice_distanceattenuation_factor` distance in logarithmic factor to scale voice volume by distance to. e.g. 0.5 for "half as loud" at or above max distance - `voice_stereopanning_factor` at 1.0, player voices are panned to left or right speaker, scaling to no effect at 0.0 - `voice_concurrentattenuation_factor` the logarithmic factor to attenuate player voices with concurrent speakers - `voice_concurrentattenuation_min` the minimum concurrent speakers before global concurrent speaker attenuation - `voice_concurrentattenuation_max` the maximum concurrent speakers for full global concurrent speaker attenuation - `voice_servermute` whether voice chat is enabled on this server. visible from MS via bitflag - `voicevolume` local volume of all voice playback A Voice Options menu is added with a subset of these options, and Server Options has server mute.
196 lines
7 KiB
CMake
196 lines
7 KiB
CMake
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
|
|
|
if("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
message(FATAL_ERROR "In-source builds are blocked. Please build from a separate directory.")
|
|
endif()
|
|
|
|
# Set up CMAKE path
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
|
|
|
|
include(CMakeDependentOption)
|
|
include(CheckCXXCompilerFlag)
|
|
|
|
file(STRINGS src/version.h SRB2_VERSION)
|
|
string(REGEX MATCH "[0-9]+\\.[0-9.]+" SRB2_VERSION ${SRB2_VERSION})
|
|
|
|
# DO NOT CHANGE THIS SRB2 STRING! Some variable names depend on this string.
|
|
# Version change is fine.
|
|
project(SRB2
|
|
VERSION ${SRB2_VERSION}
|
|
LANGUAGES C CXX)
|
|
|
|
if(APPLE)
|
|
# DiscordRPC needs but does not properly specify ObjC
|
|
enable_language(OBJC)
|
|
endif()
|
|
|
|
##### PACKAGE CONFIGURATION #####
|
|
|
|
set(SRB2_CPACK_GENERATOR "" CACHE STRING "Generator to use for making a package. E.g., ZIP, TGZ, DragNDrop (OSX only). Leave blank for default generator.")
|
|
|
|
if("${SRB2_CPACK_GENERATOR}" STREQUAL "")
|
|
if("${CMAKE_SYSTEM_NAME}" MATCHES "Windows")
|
|
set(SRB2_CPACK_GENERATOR "ZIP")
|
|
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
|
|
set(SRB2_CPACK_GENERATOR "TGZ")
|
|
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
|
|
set(SRB2_CPACK_GENERATOR "TGZ")
|
|
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
|
|
set(SRB2_CPACK_GENERATOR "TGZ")
|
|
endif()
|
|
endif()
|
|
|
|
set(CPACK_GENERATOR ${SRB2_CPACK_GENERATOR})
|
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Dr. Robotnik's Ring Racers" CACHE STRING "Program name for display purposes")
|
|
set(CPACK_PACKAGE_VENDOR "Kart Krew" CACHE STRING "Vendor name for display purposes")
|
|
#set(CPACK_PACKAGE_DESCRIPTION_FILE )
|
|
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
|
|
set(CPACK_PACKAGE_VERSION_MAJOR ${SRB2_VERSION_MAJOR})
|
|
set(CPACK_PACKAGE_VERSION_MINOR ${SRB2_VERSION_MINOR})
|
|
set(CPACK_PACKAGE_VERSION_PATCH ${SRB2_VERSION_PATCH})
|
|
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMAKE_VERSION_MAJOR}.${CMAKE_VERSION_MINOR}")
|
|
SET(CPACK_OUTPUT_FILE_PREFIX package)
|
|
include(CPack)
|
|
|
|
# Options
|
|
|
|
option(
|
|
SRB2_CONFIG_STATIC_STDLIB
|
|
"Link static version of standard library. All dependencies must also be static"
|
|
ON
|
|
)
|
|
option(SRB2_CONFIG_ENABLE_WEBM_MOVIES "Enable WebM recording support" ON)
|
|
option(SRB2_CONFIG_ENABLE_DISCORDRPC "Enable Discord RPC features" ON)
|
|
option(SRB2_CONFIG_HWRENDER "Enable hardware render (OpenGL) support" ON)
|
|
option(SRB2_CONFIG_STATIC_OPENGL "Enable static linking GL (do not do this)" OFF)
|
|
option(SRB2_CONFIG_ERRORMODE "Compile C code with warnings treated as errors." OFF)
|
|
option(SRB2_CONFIG_DEBUGMODE "Compile with PARANOIA, ZDEBUG, RANGECHECK and PACKETDROP defined." OFF)
|
|
option(SRB2_CONFIG_DEV_BUILD "Compile a development build." OFF)
|
|
option(SRB2_CONFIG_ALWAYS_MAKE_DEBUGLINK "Always make a debuglink .debug." OFF)
|
|
option(SRB2_CONFIG_TESTERS "Compile a build for testers." OFF)
|
|
option(SRB2_CONFIG_MOBJCONSISTANCY "Compile with MOBJCONSISTANCY defined." OFF)
|
|
option(SRB2_CONFIG_PACKETDROP "Compile with PACKETDROP defined." OFF)
|
|
option(SRB2_CONFIG_ZDEBUG "Compile with ZDEBUG defined." OFF)
|
|
option(SRB2_CONFIG_SKIP_COMPTIME "Skip regenerating comptime. To speed up iterative debug builds in IDEs." OFF)
|
|
# SRB2_CONFIG_PROFILEMODE is probably superceded by some CMake setting.
|
|
option(SRB2_CONFIG_PROFILEMODE "Compile for profiling (GCC only)." OFF)
|
|
option(SRB2_CONFIG_TRACY "Compile with Tracy profiling enabled" OFF)
|
|
option(SRB2_CONFIG_ASAN "Compile with AddressSanitizer (libasan)." OFF)
|
|
set(SRB2_CONFIG_ASSET_DIRECTORY "" CACHE PATH "Path to directory that contains all asset files for the installer. If set, assets will be part of installation and cpack.")
|
|
|
|
# Enable CCache
|
|
# (Set USE_CCACHE=ON to use, CCACHE_OPTIONS for options)
|
|
if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL Windows)
|
|
option(USE_CCACHE "Enable ccache support" OFF)
|
|
|
|
if(USE_CCACHE)
|
|
find_program(CCACHE_TOOL_PATH ccache)
|
|
if(CCACHE_TOOL_PATH)
|
|
set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_TOOL_PATH} CACHE STRING "" FORCE)
|
|
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_TOOL_PATH} CACHE STRING "" FORCE)
|
|
else()
|
|
message(WARNING "USE_CCACHE was set but ccache is not found (set CCACHE_TOOL_PATH)")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
add_subdirectory(thirdparty)
|
|
|
|
find_package(ZLIB REQUIRED)
|
|
find_package(PNG REQUIRED)
|
|
find_package(SDL2 CONFIG REQUIRED)
|
|
find_package(CURL REQUIRED)
|
|
find_package(Opus REQUIRED)
|
|
# Use the one in thirdparty/fmt to guarantee a minimum version
|
|
#find_package(FMT CONFIG REQUIRED)
|
|
|
|
# libgme defaults to "Nuked" YM2612 emulator, which is
|
|
# very SLOW. The system library probably uses the
|
|
# default so just always build it.
|
|
#find_package(GME REQUIRED)
|
|
|
|
if (SRB2_CONFIG_ENABLE_WEBM_MOVIES)
|
|
find_package(YUV REQUIRED)
|
|
|
|
find_package(unofficial-libvpx CONFIG)
|
|
if(NOT unofficial-libvpx_FOUND)
|
|
find_package(VPX REQUIRED)
|
|
endif()
|
|
|
|
find_package(Ogg REQUIRED)
|
|
find_package(Vorbis REQUIRED)
|
|
find_package(VorbisEnc REQUIRED)
|
|
endif()
|
|
|
|
if(${PROJECT_SOURCE_DIR} MATCHES ${PROJECT_BINARY_DIR})
|
|
message(FATAL_ERROR "In-source builds will bring you a world of pain. Please make a separate directory to invoke CMake from.")
|
|
endif()
|
|
|
|
if ((${SRB2_USE_CCACHE}) AND (${CMAKE_C_COMPILER} MATCHES "clang"))
|
|
message(WARNING "Using clang and CCache: You may want to set environment variable CCACHE_CPP2=yes to prevent include errors during compile.")
|
|
endif()
|
|
|
|
# bitness check
|
|
set(SRB2_SYSTEM_BITS 0)
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
message(STATUS "Target is 64-bit")
|
|
set(SRB2_SYSTEM_BITS 64)
|
|
endif()
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
message(STATUS "Target is 32-bit")
|
|
set(SRB2_SYSTEM_BITS 32)
|
|
endif()
|
|
if(${SRB2_SYSTEM_BITS} EQUAL 0)
|
|
message(STATUS "Target bitness is unknown")
|
|
endif()
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
|
set(CMAKE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
|
|
|
# Set EXE names so the assets CMakeLists can refer to its target
|
|
set(SRB2_SDL2_EXE_NAME "" CACHE STRING "Override executable binary output name")
|
|
set(SRB2_SDL2_EXE_SUFFIX "" CACHE STRING "Optional executable suffix, separated by an underscore")
|
|
|
|
set(GIT_EXECUTABLE "git" CACHE FILEPATH "Path to git binary")
|
|
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR}/src)
|
|
|
|
add_subdirectory(src)
|
|
add_subdirectory(assets)
|
|
|
|
include(GitUtilities)
|
|
|
|
get_git_dir(SRB2_GIT_DIR)
|
|
|
|
if(NOT "${SRB2_GIT_DIR}" STREQUAL "" AND "${SRB2_SDL2_EXE_NAME}" STREQUAL "")
|
|
# cause a reconfigure if the branch changes
|
|
configure_file("${SRB2_GIT_DIR}/HEAD" HEAD COPYONLY)
|
|
|
|
git_current_branch(SRB2_GIT_REVISION)
|
|
|
|
if("${SRB2_GIT_REVISION}" STREQUAL "")
|
|
# use abbreviated commit hash if on detached HEAD
|
|
git_latest_commit(SRB2_GIT_REVISION)
|
|
endif()
|
|
|
|
list(APPEND EXE_NAME_PARTS "ringracers")
|
|
|
|
if(NOT "${SRB2_GIT_REVISION}" STREQUAL "master")
|
|
# substitute path-unsafe characters
|
|
string(REGEX REPLACE "[\\\/\^\$]" "_" SAFE_REVISION "${SRB2_GIT_REVISION}")
|
|
list(APPEND EXE_NAME_PARTS ${SAFE_REVISION})
|
|
endif()
|
|
|
|
if (SRB2_CONFIG_TESTERS)
|
|
list(APPEND EXE_NAME_PARTS "TESTERS")
|
|
endif()
|
|
elseif(NOT "${SRB2_SDL2_EXE_NAME}" STREQUAL "")
|
|
list(APPEND EXE_NAME_PARTS ${SRB2_SDL2_EXE_NAME})
|
|
else()
|
|
list(APPEND EXE_NAME_PARTS "ringracers")
|
|
endif()
|
|
|
|
list(APPEND EXE_NAME_PARTS ${SRB2_SDL2_EXE_SUFFIX})
|
|
|
|
list(JOIN EXE_NAME_PARTS "_" EXE_NAME)
|
|
set_target_properties(SRB2SDL2 PROPERTIES OUTPUT_NAME ${EXE_NAME})
|