2025-02-17 11:12:44 +02:00
|
|
|
cmake_minimum_required(VERSION 3.21...3.30)
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# Project Definition
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
project( "ReVoice"
|
|
|
|
DESCRIPTION "Fix for voice chat between Steam and non-Steam clients for ReHLDS"
|
|
|
|
HOMEPAGE_URL "https://github.com/rehlds/ReVoice"
|
|
|
|
LANGUAGES "C" "CXX"
|
|
|
|
)
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# Options
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
option(USE_LINKER_GOLD "Use the Gold linker when compiling with GCC" ON )
|
|
|
|
option(USE_LINKER_LLD "Use the LLD linker when compiling with Clang" ON )
|
|
|
|
option(LINK_STATIC_MSVC_RT "Link MSVC runtime library statically" OFF)
|
|
|
|
option(LINK_STATIC_GCC "Link libgcc library statically" OFF)
|
|
|
|
option(LINK_STATIC_STDCPP "Link C++ standard library statically" OFF)
|
|
|
|
option(LINK_LIBCPP "Link libc++ as the C++ standard library instead of libstdc++" OFF)
|
|
|
|
option(ENABLE_RTTI "Enable support for run-time type information" OFF)
|
|
|
|
option(ENABLE_EXCEPTIONS "Enable support for exception handling" OFF)
|
|
|
|
option(ENABLE_ASAN "Enable AddressSanitizer" OFF)
|
|
|
|
option(ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer" OFF)
|
|
|
|
option(ENABLE_LINK_TRACE "Enable linker trace flag (detailed output of the linking process)" OFF)
|
|
|
|
option(OPTIMIZE_FOR_CURRENT_CPU "Generate code optimized for the current (native) processor" OFF)
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# Output Directories
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
if(NOT BIN_OUTPUT_DIR)
|
|
|
|
set(BIN_OUTPUT_DIR "${CMAKE_SOURCE_DIR}/bin/${CMAKE_CXX_COMPILER_ID}-$<CONFIG>")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# System Environment
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
include("ProcessorCount")
|
|
|
|
ProcessorCount(NUM_CORES)
|
|
|
|
|
|
|
|
if(NUM_CORES EQUAL 0)
|
|
|
|
set(NUM_CORES 4)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(PROCESSOR_CORES GREATER 8)
|
|
|
|
set(PROCESSOR_CORES 8)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
string(TIMESTAMP CURRENT_YEAR "%Y")
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# CMake Policies
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# Honor visibility properties for all target types
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0063 NEW)
|
|
|
|
|
|
|
|
# INTERPROCEDURAL_OPTIMIZATION is enforced when enabled
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
|
|
|
|
|
|
|
|
# target_sources() command converts relative paths to absolute
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0076 NEW)
|
|
|
|
|
|
|
|
# option() honors normal variables
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
|
|
|
|
|
|
|
|
# Control generation of Position Independent Executable (PIE)
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0083 NEW)
|
|
|
|
|
|
|
|
# MSVC runtime library flags are selected by an abstraction (CMAKE_MSVC_RUNTIME_LIBRARY)
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0091 NEW)
|
|
|
|
|
|
|
|
# MSVC warning flags are not in CMAKE_<LANG>_FLAGS by default
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0092 NEW)
|
|
|
|
|
|
|
|
# Link properties are transitive over private dependencies of static libraries
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0099 NEW)
|
|
|
|
|
|
|
|
# Makefile generators do not repeat custom commands from target dependencies
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0113 NEW)
|
|
|
|
|
|
|
|
# ExternalProject step targets fully adopt their steps
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0114 NEW)
|
|
|
|
|
|
|
|
# Ninja generators transform DEPFILEs from add_custom_command()
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0116 NEW)
|
|
|
|
|
|
|
|
# MSVC RTTI flag /GR is not added to CMAKE_CXX_FLAGS by default
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0117 NEW)
|
|
|
|
|
|
|
|
# LANGUAGE source file property explicitly compiles as language
|
|
|
|
set(CMAKE_POLICY_DEFAULT_CMP0119 NEW)
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# Build Configuration
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# Building shared libraries instead of static by default
|
|
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
|
|
|
|
|
|
# First search using Config mode before falling back to Module mode
|
|
|
|
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
|
|
|
|
|
|
|
|
# Set the possible build types
|
|
|
|
set(CMAKE_CONFIGURATION_TYPES "Debug" "Release" "RelWithDebInfo")
|
|
|
|
|
|
|
|
# Set the C language standard
|
|
|
|
set(CMAKE_C_STANDARD 11)
|
|
|
|
|
|
|
|
# Enforce the use of the C language standard
|
|
|
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
|
|
|
|
|
|
|
# Set the visibility of symbols in C object files
|
|
|
|
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
|
|
|
|
|
|
|
# Set the C++ language standard
|
|
|
|
set(CMAKE_CXX_STANDARD 14)
|
|
|
|
|
|
|
|
# Enforce the use of the C++ language standard
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
|
|
|
# Set the visibility of symbols in C++ object files
|
|
|
|
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
|
|
|
|
|
|
|
# Interprocedural optimization for specified build types
|
|
|
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
|
|
|
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_DEBUG OFF)
|
|
|
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL ON)
|
|
|
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
|
|
|
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO ON)
|
|
|
|
|
|
|
|
# Dependency optimization for faster builds
|
|
|
|
set(CMAKE_OPTIMIZE_DEPENDENCIES ON)
|
|
|
|
|
|
|
|
# Position independent code generation
|
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
|
|
|
|
# Hiding of inline functions in shared libraries
|
|
|
|
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
|
|
|
|
|
|
|
|
# Export the compile commands to a JSON file
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
|
|
|
|
# Enable error reporting for deprecated features
|
|
|
|
set(CMAKE_ERROR_DEPRECATED ON)
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# CMake Modules and Dependencies
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
include("cmake/AppVersion.cmake")
|
|
|
|
include("cmake/CompileOptions.cmake")
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# Subdirectories
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
2025-02-22 22:25:47 +02:00
|
|
|
add_subdirectory("external/speex")
|
|
|
|
add_subdirectory("external/silk")
|
|
|
|
add_subdirectory("external/opus")
|
|
|
|
add_subdirectory("external/rehlsdk")
|
|
|
|
add_subdirectory("external/metamod")
|
2025-02-17 11:12:44 +02:00
|
|
|
add_subdirectory("revoice")
|