diff --git a/CMakeLists.txt b/CMakeLists.txt index 6162ec80..fb6921e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,21 +8,9 @@ # AUTOGENERATED COPYRIGHT HEADER END # CMake Setup -cmake_minimum_required(VERSION 3.13...4.0) - -if(${CMAKE_VERSION} VERSION_LESS 3.19) - set(LOGPREFIX "[StreamFX] ") -else() - list(APPEND CMAKE_MESSAGE_INDENT "[StreamFX] ") - set(LOGPREFIX "") -endif() - -# MacOSX: Require at least MacOSX 10.15 for C++17 support. -if(APPLE) - if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.15) - CacheSet(CMAKE_OSX_DEPLOYMENT_TARGET "10.15") - endif() -endif() +cmake_minimum_required(VERSION 3.26...4.0) +list(APPEND CMAKE_MESSAGE_INDENT "[StreamFX] ") +project(StreamFX) ################################################################################ # Modules @@ -36,15 +24,34 @@ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ) -# Include -include("util") # CacheClear, CacheSet -include("version") # version() -include("CheckIPOSupported") # check_ipo_supported +# Include required Modules +# - Stock +include("CheckIPOSupported") +# - Custom +include("util") +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/version/version.cmake") + include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/version/version.cmake") +else() + message(FATAL_ERROR "Please ensure you've cloned recursively and try again. Thank you!") +endif() + +# Include optional Modules +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/clang/Clang.cmake") + include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/clang/Clang.cmake") +endif() ################################################################################ -# Detect if we are building with OBS Studio (different from Grouped builds) +# Bootstrapping ################################################################################ +# MacOSX: Require at least MacOSX 10.15 for C++17 support. +if(APPLE) + if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.15) + CacheSet(CMAKE_OSX_DEPLOYMENT_TARGET "10.15") + endif() +endif() + +# Check if this is standalone or bundled. set(STANDALONE ON) if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_LIST_DIR}") set(GROUPED OFF) @@ -57,169 +64,6 @@ else() endif() endif() -if(STANDALONE) - message(STATUS "${LOGPREFIX}This is a standalone build, please make sure you've followed the instructions.") -else() - message(STATUS "${LOGPREFIX}This is a combined build.") -endif() - -################################################################################ -# Versioning -################################################################################ - -# For automatic versioning, which version is the "root" of the current changes? -set(_VERSION_GIT_BASE "0.11.0") - -# What is our version goal? -set(_VERSION "0.12.0") -version(PARSE _VERSION "${_VERSION}") - -# If possible, automatically generate versions from git. -if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/.git") - find_program(GIT - NAMES - git - git.exe - ) - - if(EXISTS "${GIT}") - # Calculate the Tweak version component from the given base version. - execute_process( - COMMAND "${GIT}" describe --tags --long --match "${_VERSION_GIT_BASE}" --abbrev=8 HEAD - WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} - RESULT_VARIABLE GIT_RESULT - OUTPUT_VARIABLE _VERSION_GIT - ERROR_VARIABLE GIT_ERROR - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE - ERROR_QUIET - ) - if(GIT_RESULT EQUAL 0) - # Some minor string editing so the output conforms to SemVer 2.0.0. - string(REPLACE "-" ";" _VERSION_GIT "${_VERSION_GIT}") - - # Parse as SemVer 2.0.0 - list(GET _VERSION_GIT 1 _VERSION_GIT_TWEAK) - list(GET _VERSION_GIT 2 _VERSION_GIT_BUILD) - - # Update our global version. - version(MODIFY _VERSION "${_VERSION}" COMPRESS - TWEAK "${_VERSION_GIT_TWEAK}" - BUILD "${_VERSION_GIT_BUILD}" - PRERELEASE "a" - REQUIRE PATCH TWEAK - ) - version(PARSE _VERSION "${_VERSION}" REQUIRE PATCH TWEAK) - else() - message(WARNING "${LOGPREFIX}Unable to detect Tweak and Build component with 'git'.") - endif() - - # Is there a tag on the current commit? - execute_process( - COMMAND "${GIT}" tag "--sort=-v:refname" "--points-at" HEAD - WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} - RESULT_VARIABLE GIT_RESULT - OUTPUT_VARIABLE _VERSION_TAG - ERROR_VARIABLE GIT_ERROR - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE - ERROR_QUIET - ) - if((GIT_RESULT EQUAL 0) AND (NOT "${_VERSION_TAG}" STREQUAL "")) - # Some minor string editing so the output conforms to SemVer 2.0.0. - string(REGEX REPLACE "[\r\n]+.*" "" _VERSION_TAG "${_VERSION_TAG}") - - # Parse as SemVer 2.0.0 - version(PARSE _VERSION_TAG "${_VERSION_TAG}" REQUIRE PATCH TWEAK) - if(_VERSION_TAG_PRERELEASE) - string(SUBSTRING "${_VERSION_TAG_PRERELEASE}" 1 -1 _VERSION_TAG_TWEAK) - string(SUBSTRING "${_VERSION_TAG_PRERELEASE}" 0 1 _VERSION_TAG_PRERELEASE) - - if(NOT _VERSION_TAG_TWEAK STREQUAL _VERSION_GIT_TWEAK) - message(WARNING "${LOGPREFIX}'git' tag mismatches detected version: '${_VERSION_TAG_TWEAK}' != '${_VERSION_GIT_TWEAK}'.") - endif() - endif() - - # Update our global version. - version(GENERATE _VERSION COMPRESS - MAJOR "${_VERSION_TAG_MAJOR}" - MINOR "${_VERSION_TAG_MINOR}" - PATCH "${_VERSION_TAG_PATCH}" - TWEAK "${_VERSION_TAG_TWEAK}" - PRERELEASE "${_VERSION_TAG_PRERELEASE}" - BUILD "${_VERSION_BUILD}" - REQUIRE PATCH TWEAK - ) - version(PARSE _VERSION "${_VERSION}" REQUIRE PATCH TWEAK) - endif() - else() - message(STATUS "${LOGPREFIX}'git' not found, automatic version detection disabled.") - endif() -else() - message(STATUS "${LOGPREFIX}Not a git repository, automatic version detection disabled.") -endif() - -# Allow manual overrides of the detected version. -set(${PREFIX}VERSION "" CACHE STRING "Override detected or pre-configured version with this string. Accepts strings in CMake and SemVer 2.0.0 format.") -if(NOT ("${${PREFIX}VERSION}" STREQUAL "")) - version(PARSE _VERSION_CFG "${${PREFIX}VERSION}" REQUIRE PATCH TWEAK) - if("${_VERSION_CFG_BUILD}" STREQUAL "") - set(_VERSION_CFG_BUILD "${_VERSION_BUILD}") - endif() - version(GENERATE _VERSION COMPRESS - MAJOR "${_VERSION_CFG_MAJOR}" - MINOR "${_VERSION_CFG_MINOR}" - PATCH "${_VERSION_CFG_PATCH}" - TWEAK "${_VERSION_CFG_TWEAK}" - PRERELEASE "${_VERSION_CFG_PRERELEASE}" - BUILD "${_VERSION_CFG_BUILD}" - REQUIRE PATCH TWEAK - ) -endif() - -set(_VERSION_THIN "${_VERSION_MAJOR}.${_VERSION_MINOR}.${_VERSION_PATCH}") -if(NOT (_VERSION_PRERELEASE STREQUAL "")) - set(_VERSION_THIN "${_VERSION_THIN}${_VERSION_PRERELEASE}${_VERSION_TWEAK}") -endif() -if(NOT (VERSION_COMMIT STREQUAL "")) - set(_VERSION_THIN "${_VERSION_THIN}-${_VERSION_BUILD}") -endif() - -# Parse & Log the detected version. -message(STATUS "${LOGPREFIX}Version ${_VERSION}") - -################################################################################ -# Project -################################################################################ - -# Metadata -version(GENERATE PROJECT_VERSION - MAJOR "${_VERSION_MAJOR}" - MINOR "${_VERSION_MINOR}" - PATCH "${_VERSION_PATCH}" - TWEAK "${_VERSION_TWEAK}" - REQUIRE PATCH TWEAK -) -project( - StreamFX - VERSION ${PROJECT_VERSION} - DESCRIPTION "Additional sources, filters, transitions and encoders for OBS Studio." - HOMEPAGE_URL "https://streamfx.xaymar.com/" -) -set(PROJECT_IDENTIFER "com.xaymar.${PROJECT_NAME}.obs") -set(PROJECT_TITLE "StreamFX (for OBS Studio)") -set(PROJECT_AUTHORS "Michael Fabian 'Xaymar' Dirks ") -set(PROJECT_COPYRIGHT "2017 - 2022, Michael Fabian Dirks. All Rights Reserved") -set(PROJECT_TRADEMARKS "") -list(APPEND PROJECT_TRADEMARKS - "AMD is a trademark of Advanced Micro Devices Inc." - "NVIDIA is a trademark of Nvidia Corporation" -) - -################################################################################ -# Platform Setup -################################################################################ - # Operating System if(CMAKE_SYSTEM_NAME STREQUAL "Windows") set(D_PLATFORM_OS "windows") @@ -233,7 +77,7 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") else() set(D_PLATFORM_OS "unknown") set(D_PLATFORM_UNKNOWN 1) - message(WARNING "${LOGPREFIX}The operating system '${CMAKE_SYSTEM_NAME}' is unknown to to this script, continue at your own risk.") + message(WARNING "The operating system '${CMAKE_SYSTEM_NAME}' is unknown to to this script, continue at your own risk.") endif() # Architecture @@ -284,24 +128,165 @@ if(FOUND GREATER -1) set(D_PLATFORM_ARCH_ITANIUM ON) endif() +# Interprocedural Optimization check_ipo_supported(RESULT D_HAS_IPO) set(D_PLATFORM_INSTR ${ARCH_INST}) set(D_PLATFORM_ARCH ${ARCH_INST}) -message(STATUS "${LOGPREFIX}Target is ${D_PLATFORM_BITS}bit ${ARCH_INST} with a pointer size of ${D_PLATFORM_BITS_PTR}bit.") +message(STATUS "Target is ${D_PLATFORM_BITS}bit ${ARCH_INST} with a pointer size of ${D_PLATFORM_BITS_PTR}bit.") + +################################################################################ +# Versioning +################################################################################ + +version(GENERATE _VERSION COMPRESSED MAJOR 0 MINOR 0 PATCH 0 TWEAK 0 REQUIRE "PATCH;") +version(PARSE _VERSION "${_VERSION}" REQUIRE "PATCH;TWEAK") + +# If possible, automatically generate versions from git. +if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/.git") + find_program(GIT + NAMES + git + git.exe + ) + + if(EXISTS "${GIT}") + # Determine the version by exist tag match. + execute_process(COMMAND "${GIT}" tag "--sort=-v:refname" "--points-at" HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} RESULT_VARIABLE GIT_RESULT OUTPUT_VARIABLE GIT_OUTPUT ERROR_VARIABLE GIT_ERROR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ERROR_QUIET) + if((GIT_RESULT EQUAL 0) AND (NOT "${GIT_OUTPUT}" STREQUAL "")) + # Some minor string editing so the output conforms to SemVer 2.0.0. + string(REGEX REPLACE "[\r\n]+.*" "" GIT_OUTPUT "${GIT_OUTPUT}") + + # Parse as SemVer 2.0.0 + version(PARSE GIT_OUTPUT "${GIT_OUTPUT}" REQUIRE "PATCH;TWEAK") + if(GIT_OUTPUT_PRERELEASE) + string(SUBSTRING "${GIT_OUTPUT_PRERELEASE}" 1 -1 GIT_OUTPUT_TWEAK) + string(SUBSTRING "${GIT_OUTPUT_PRERELEASE}" 0 1 GIT_OUTPUT_PRERELEASE) + + if(NOT GIT_OUTPUT_TWEAK STREQUAL GIT_OUTPUT_TWEAK) + message(WARNING "'git' tag mismatches detected version: '${GIT_OUTPUT_TWEAK}' != '${GIT_OUTPUT_TWEAK}'.") + endif() + endif() + + # Update our global version. + version(GENERATE _VERSION COMPRESS + MAJOR "${GIT_OUTPUT_MAJOR}" + MINOR "${GIT_OUTPUT_MINOR}" + PATCH "${GIT_OUTPUT_PATCH}" + TWEAK "${GIT_OUTPUT_TWEAK}" + PRERELEASE "${GIT_OUTPUT_PRERELEASE}" + BUILD "${_VERSION_BUILD}" + REQUIRE "PATCH;TWEAK" + ) + else() + # Try and calculate the exist version using git. + execute_process(COMMAND "${GIT}" describe --tags --long --abbrev=8 HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} RESULT_VARIABLE GIT_RESULT OUTPUT_VARIABLE GIT_OUTPUT ERROR_VARIABLE GIT_ERROR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ERROR_QUIET) + if((GIT_RESULT EQUAL 0) AND (NOT "${GIT_OUTPUT}" STREQUAL "")) + # Result will be MAJOR.MINOR.PATCH-TWEAK-gHASH + string(REPLACE "-" ";" GIT_OUTPUT "${GIT_OUTPUT}") + string(REPLACE "." ";" GIT_OUTPUT "${GIT_OUTPUT}") + + # Split into components + list(GET GIT_OUTPUT 0 GIT_OUTPUT_MAJOR) + list(GET GIT_OUTPUT 1 GIT_OUTPUT_MINOR) + list(GET GIT_OUTPUT 2 GIT_OUTPUT_PATCH) + list(GET GIT_OUTPUT 3 GIT_OUTPUT_TWEAK) + list(GET GIT_OUTPUT 4 GIT_OUTPUT_BUILD) + + # Special case: Tag contains prerelease + if(GIT_OUTPUT_PATCH MATCHES "([0-9]+)([a-zA-Z]+)([0-9]*)") + # Patch requires special parsing. + set(GIT_OUTPUT_PATCH "${CMAKE_MATCH_1}") + MATH(EXPR GIT_OUTPUT_TWEAK "${GIT_OUTPUT_TWEAK} + ${CMAKE_MATCH_3}") + + # Modify the global version + version(MODIFY _VERSION "${_VERSION}" COMPRESS + MAJOR "${GIT_OUTPUT_MAJOR}" + MINOR "${GIT_OUTPUT_MINOR}" + PATCH "${GIT_OUTPUT_PATCH}" + TWEAK "${GIT_OUTPUT_TWEAK}" + BUILD "${GIT_OUTPUT_BUILD}" + PRERELEASE "a" + REQUIRE "PATCH;TWEAK" + ) + else() + # Modify the global version + version(MODIFY _VERSION "${_VERSION}" COMPRESS + MAJOR "${GIT_OUTPUT_MAJOR}" + MINOR "${GIT_OUTPUT_MINOR}" + PATCH "${GIT_OUTPUT_PATCH}" + TWEAK "${GIT_OUTPUT_TWEAK}" + BUILD "${GIT_OUTPUT_BUILD}" + PRERELEASE "a" + REQUIRE "PATCH;TWEAK" + ) + endif() + else() + execute_process(COMMAND "${GIT}" rev-list --count HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} RESULT_VARIABLE GIT_RESULT OUTPUT_VARIABLE GIT_OUTPUT ERROR_VARIABLE GIT_ERROR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ERROR_QUIET) + message(STATUS "GIT=${GIT_RESULT},${GIT_OUTPUT},${GIT_ERROR}") + if((GIT_RESULT EQUAL 0) AND (NOT "${GIT_OUTPUT}" STREQUAL "")) + version(MODIFY _VERSION "${_VERSION}" COMPRESS + TWEAK "${GIT_OUTPUT}" + PRERELEASE "a" + REQUIRE "PATCH;TWEAK" + ) + + execute_process(COMMAND "${GIT}" log -1 "--pretty=format:g%h" --abbrev=8 HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} RESULT_VARIABLE GIT_RESULT OUTPUT_VARIABLE GIT_OUTPUT ERROR_VARIABLE GIT_ERROR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ERROR_QUIET) + if((GIT_RESULT EQUAL 0) AND (NOT "${GIT_OUTPUT}" STREQUAL "")) + version(MODIFY _VERSION "${_VERSION}" COMPRESS + BUILD "${GIT_OUTPUT}" + PRERELEASE "a" + REQUIRE "PATCH;TWEAK" + ) + else() + message(WARNING "Failed to detect full version with 'git'.") + endif() + else() + message(WARNING "Failed to automatically detect version with 'git'.") + endif() + endif() + endif() + else() + message(WARNING "'git' not found, automatic version detection disabled.") + endif() +else() + message(STATUS "Not a git repository, automatic version detection disabled.") +endif() +version(PARSE _VERSION "${_VERSION}" REQUIRE "PATCH;TWEAK") + +# Allow manual overrides of the detected version. +if(NOT ("${${PREFIX}VERSION}" STREQUAL "")) + version(PARSE _VERSION_CFG "${${PREFIX}VERSION}" REQUIRE "PATCH;TWEAK") + if("${_VERSION_CFG_BUILD}" STREQUAL "") + set(_VERSION_CFG_BUILD "${_VERSION_BUILD}") + endif() + version(GENERATE _VERSION COMPRESS + MAJOR "${_VERSION_CFG_MAJOR}" + MINOR "${_VERSION_CFG_MINOR}" + PATCH "${_VERSION_CFG_PATCH}" + TWEAK "${_VERSION_CFG_TWEAK}" + PRERELEASE "${_VERSION_CFG_PRERELEASE}" + BUILD "${_VERSION_CFG_BUILD}" + ) +endif() + +set(_VERSION_THIN "${_VERSION_MAJOR}.${_VERSION_MINOR}.${_VERSION_PATCH}") +if(NOT (_VERSION_PRERELEASE STREQUAL "")) + set(_VERSION_THIN "${_VERSION_THIN}${_VERSION_PRERELEASE}${_VERSION_TWEAK}") +endif() +if(NOT (VERSION_COMMIT STREQUAL "")) + set(_VERSION_THIN "${_VERSION_THIN}-${_VERSION_BUILD}") +endif() + +# Parse & Log the detected version. +message(STATUS "Version ${_VERSION_THIN}") ################################################################################ # Options ################################################################################ -# Dependencies -if(STANDALONE) - set(libobs_DIR "" CACHE PATH "Path to libobs and obs-frontend-api") - set(Qt_DIR "" CACHE PATH "Path to Qt6 or Qt5") - set(CURL_DIR "" CACHE PATH "Path to CURL") - set(FFmpeg_DIR "" CACHE PATH "Path to FFmpeg") -endif() -set(AOM_DIR "" CACHE PATH "Path to AOM library") +# Version override +set(${PREFIX}VERSION "" CACHE STRING "Specify an override for the automatically detected version. Accepts a mixture of SemVer 2.0 and CMake Version.") # Features ## Encoders @@ -341,7 +326,9 @@ set(${PREFIX}ENABLE_FRONTEND ON CACHE BOOL "Enable Frontend code.") set(${PREFIX}ENABLE_UPDATER ON CACHE BOOL "Enable automatic update checks.") ## Code Related -set(${PREFIX}ENABLE_CLANG OFF CACHE BOOL "Enable Clang integration for supported compilers.") +if(COMMAND clang_format) + set(${PREFIX}ENABLE_CLANG OFF CACHE BOOL "Enable Clang integration for supported compilers.") +endif() set(${PREFIX}ENABLE_PROFILING OFF CACHE BOOL "Enable CPU and GPU performance tracking, which has a non-zero overhead at all times. Do not enable this for release builds.") ## Compile/Link Related @@ -372,19 +359,44 @@ if(STANDALONE) set(PACKAGE_SUFFIX "" CACHE STRING "Any suffix for the package name? (Defaults to the current version string)") endif() -################################################################################ -# Clang -################################################################################ - -if(${PREFIX}ENABLE_CLANG AND (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/clang/Clang.cmake")) - include("cmake/clang/Clang.cmake") - set(HAVE_CLANG ON) +# Dependencies +if(STANDALONE) + set(libobs_DIR "" CACHE PATH "Path to libobs and obs-frontend-api") + set(Qt_DIR "" CACHE PATH "Path to Qt6 or Qt5") + set(CURL_DIR "" CACHE PATH "Path to CURL") + set(FFmpeg_DIR "" CACHE PATH "Path to FFmpeg") endif() +set(AOM_DIR "" CACHE PATH "Path to AOM library") ################################################################################ +# Project +################################################################################ + +# Metadata +version(GENERATE PROJECT_VERSION + MAJOR "${_VERSION_MAJOR}" + MINOR "${_VERSION_MINOR}" + PATCH "${_VERSION_PATCH}" + TWEAK "${_VERSION_TWEAK}" + REQUIRE PATCH TWEAK +) +project( + StreamFX + VERSION ${PROJECT_VERSION} + DESCRIPTION "Additional sources, filters, transitions and encoders for OBS Studio." + HOMEPAGE_URL "https://streamfx.xaymar.com/" +) +set(PROJECT_IDENTIFER "com.xaymar.${PROJECT_NAME}.obs") +set(PROJECT_TITLE "StreamFX (for OBS Studio)") +set(PROJECT_AUTHORS "Michael Fabian 'Xaymar' Dirks ") +set(PROJECT_COPYRIGHT "2017 - 2022, Michael Fabian Dirks. All Rights Reserved") +set(PROJECT_TRADEMARKS "") +list(APPEND PROJECT_TRADEMARKS + "AMD is a trademark of Advanced Micro Devices Inc." + "NVIDIA is a trademark of Nvidia Corporation" +) + # Component search paths -################################################################################ - list(APPEND CMAKE_PREFIX_PATH "${${PREFIX}AOM_PATH}" "${${PREFIX}OBSDEPS_PATH}" @@ -446,20 +458,20 @@ function(feature_encoder_ffmpeg RESOLVE) is_feature_enabled(ENCODER_FFMPEG T_CHECK) if(RESOLVE AND T_CHECK) if(NOT HAVE_FFMPEG) - message(WARNING "${LOGPREFIX}FFmpeg Encoder requires FFmpeg. Disabling...") + message(WARNING "FFmpeg Encoder requires FFmpeg. Disabling...") set_feature_disabled(ENCODER_FFMPEG ON) else() # AMF is_feature_enabled(ENCODER_FFMPEG_AMF T_CHECK) if(T_CHECK AND D_PLATFORM_MAC) - message(WARNING "${LOGPREFIX}FFmpeg Encoder 'AMF' requires Windows or Linux. Disabling...") + message(WARNING "FFmpeg Encoder 'AMF' requires Windows or Linux. Disabling...") set_feature_disabled(ENCODER_FFMPEG_AMF ON) endif() # NVENC is_feature_enabled(ENCODER_FFMPEG_NVENC T_CHECK) if(T_CHECK AND D_PLATFORM_MAC) - message(WARNING "${LOGPREFIX}FFmpeg Encoder 'NVENC' requires Windows or Linux. Disabling...") + message(WARNING "FFmpeg Encoder 'NVENC' requires Windows or Linux. Disabling...") set_feature_disabled(ENCODER_FFMPEG_NVENC ON) endif() @@ -478,7 +490,7 @@ function(feature_encoder_aom_av1 RESOLVE) is_feature_enabled(ENCODER_AOM_AV1 T_CHECK) if(RESOLVE AND T_CHECK) if(NOT HAVE_AOM) - message(WARNING "${LOGPREFIX}AOM AV1 encoder missing AOM library. Disabling...") + message(WARNING "AOM AV1 encoder missing AOM library. Disabling...") set_feature_disabled(ENCODER_AOM_AV1 ON) endif() elseif(T_CHECK) @@ -491,14 +503,14 @@ function(feature_filter_autoframing RESOLVE) if(RESOLVE AND T_CHECK) # Verify that the requirements for the providers are available if(NOT HAVE_NVIDIA_AR_SDK) - message(WARNING "${LOGPREFIX}'NVIDIA Augmented Reality SDK' is missing. Disabling NVIDIA provider...") + message(WARNING "'NVIDIA Augmented Reality SDK' is missing. Disabling NVIDIA provider...") set_feature_disabled(FILTER_AUTOFRAMING_NVIDIA ON) endif() # Verify that we have at least one provider for Auto-Framing. is_feature_enabled(FILTER_AUTOFRAMING_NVIDIA T_CHECK_NVIDIA) if(NOT T_CHECK_NVIDIA) - message(WARNING "${LOGPREFIX}Auto-Framing has no available providers. Disabling...") + message(WARNING "Auto-Framing has no available providers. Disabling...") set_feature_disabled(FILTER_AUTOFRAMING ON) endif() elseif(T_CHECK) @@ -520,14 +532,14 @@ function(feature_filter_denoising RESOLVE) if(RESOLVE AND T_CHECK) # Verify that the requirements for the providers are available if(NOT HAVE_NVIDIA_VFX_SDK) - message(WARNING "${LOGPREFIX}'NVIDIA Video Effects SDK' is missing. Disabling NVIDIA provider...") + message(WARNING "'NVIDIA Video Effects SDK' is missing. Disabling NVIDIA provider...") set_feature_disabled(FILTER_DENOISING_NVIDIA ON) endif() # Verify that we have at least one provider for Video Denoising. is_feature_enabled(FILTER_DENOISING_NVIDIA T_CHECK_NVIDIA) if(NOT T_CHECK_NVIDIA) - message(WARNING "${LOGPREFIX}Denoising has no available providers. Disabling...") + message(WARNING "Denoising has no available providers. Disabling...") set_feature_disabled(FILTER_DENOISING ON) endif() elseif(T_CHECK) @@ -560,14 +572,14 @@ function(feature_filter_upscaling RESOLVE) if(RESOLVE AND T_CHECK) # Verify that the requirements for the providers are available if(NOT HAVE_NVIDIA_VFX_SDK) - message(WARNING "${LOGPREFIX}'NVIDIA Video Effects SDK' is missing. Disabling NVIDIA provider(s)...") + message(WARNING "'NVIDIA Video Effects SDK' is missing. Disabling NVIDIA provider(s)...") set_feature_disabled(FILTER_UPSCALING_NVIDIA ON) endif() # Verify that we have at least one provider for Video Super-Resolution. is_feature_enabled(FILTER_UPSCALING_NVIDIA T_CHECK_NVIDIA) if(NOT T_CHECK_NVIDIA) - message(WARNING "${LOGPREFIX}Upscaling has no available providers. Disabling...") + message(WARNING "Upscaling has no available providers. Disabling...") set_feature_disabled(FILTER_UPSCALING ON) endif() elseif(T_CHECK) @@ -580,14 +592,14 @@ function(feature_filter_virtual_greenscreen RESOLVE) if(RESOLVE AND T_CHECK) # Verify that the requirements for the providers are available if(NOT HAVE_NVIDIA_VFX_SDK) - message(WARNING "${LOGPREFIX}'NVIDIA Video Effects SDK' is missing. Disabling NVIDIA provider(s)...") + message(WARNING "'NVIDIA Video Effects SDK' is missing. Disabling NVIDIA provider(s)...") set_feature_disabled(FILTER_VIRTUAL_GREENSCREEN_NVIDIA ON) endif() # Verify that we have at least one provider for Video Super-Resolution. is_feature_enabled(FILTER_VIRTUAL_GREENSCREEN_NVIDIA T_CHECK_NVIDIA) if(NOT T_CHECK_NVIDIA) - message(WARNING "${LOGPREFIX}Virtual Greenscreen has no available providers. Disabling...") + message(WARNING "Virtual Greenscreen has no available providers. Disabling...") set_feature_disabled(FILTER_VIRTUAL_GREENSCREEN ON) endif() elseif(T_CHECK) @@ -611,13 +623,13 @@ function(feature_frontend RESOLVE) is_feature_enabled(FRONTEND T_CHECK) if(RESOLVE AND T_CHECK) if(NOT (Qt6_FOUND OR Qt5_FOUND)) - message(WARNING "${LOGPREFIX}Front-End requires Qt. Disabling...") + message(WARNING "Front-End requires Qt. Disabling...") set_feature_disabled(FRONTEND ON) elseif(NOT obs-frontend-api_FOUND) - message(WARNING "${LOGPREFIX}Front-End requires OBS FrontEnd API. Disabling...") + message(WARNING "Front-End requires OBS FrontEnd API. Disabling...") set_feature_disabled(FRONTEND ON) elseif(NOT HAVE_JSON) - message(WARNING "${LOGPREFIX}Front-End requires nlohmann::json. Disabling...") + message(WARNING "Front-End requires nlohmann::json. Disabling...") set_feature_disabled(FRONTEND ON) endif() elseif(T_CHECK) @@ -631,10 +643,10 @@ function(feature_updater RESOLVE) is_feature_enabled(UPDATER T_CHECK) if(RESOLVE AND T_CHECK) if(NOT CURL_FOUND) - message(WARNING "${LOGPREFIX}Updater requires CURL. Disabling...") + message(WARNING "Updater requires CURL. Disabling...") set_feature_disabled(UPDATER ON) elseif(NOT HAVE_JSON) - message(WARNING "${LOGPREFIX}Updater requires nlohmann::json. Disabling...") + message(WARNING "Updater requires nlohmann::json. Disabling...") set_feature_disabled(UPDATER ON) endif() elseif(T_CHECK) @@ -729,7 +741,7 @@ endif() set(HAVE_JSON OFF) if(REQUIRE_JSON) if(NOT EXISTS "${PROJECT_SOURCE_DIR}/third-party/nlohmann-json/single_include") - message(FATAL_ERROR "${LOGPREFIX}Please make sure to update git submodules to their latest supported version.") + message(FATAL_ERROR "Please make sure to update git submodules to their latest supported version.") return() else() set(JSON_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/third-party/nlohmann-json/single_include") @@ -795,9 +807,9 @@ if(REQUIRE_QT) ) endif() if(Qt6_FOUND) - message(STATUS "${LOGPREFIX}Using Qt6.") + message(STATUS "Using Qt6.") elseif(Qt5_FOUND) - message(STATUS "${LOGPREFIX}Using Qt5.") + message(STATUS "Using Qt5.") endif() endif() @@ -1703,7 +1715,7 @@ endif() # C/C++ Compiler Adjustments if(D_PLATFORM_WINDOWS AND ((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))) # MSVC/ClangCL - message(STATUS "${LOGPREFIX}Applying custom flags for MSVC style build.") + message(STATUS "Applying custom flags for MSVC style build.") # - Dynamically link Microsoft C/C++ Redistributable. target_compile_options(${PROJECT_NAME} PRIVATE @@ -1761,19 +1773,19 @@ if(D_PLATFORM_WINDOWS AND ((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX if(D_PLATFORM_ARCH_X86) if(${PREFIX}TARGET_X86_64_V4) target_compile_options(${PROJECT_NAME} PRIVATE "/arch:AVX512") - message(STATUS "${LOGPREFIX}Targeting x86-64-v4.") + message(STATUS "Targeting x86-64-v4.") elseif(${PREFIX}TARGET_X86_64_V3) target_compile_options(${PROJECT_NAME} PRIVATE "/arch:AVX2") - message(STATUS "${LOGPREFIX}Targeting x86-64-v3.") + message(STATUS "Targeting x86-64-v3.") elseif(${PREFIX}TARGET_X86_64_V2_EX) target_compile_options(${PROJECT_NAME} PRIVATE "/arch:AVX") - message(STATUS "${LOGPREFIX}Targeting extended x86-64-v2.") + message(STATUS "Targeting extended x86-64-v2.") elseif(${PREFIX}TARGET_X86_64_V2) target_compile_options(${PROJECT_NAME} PRIVATE "/d2archSSE42") - message(STATUS "${LOGPREFIX}Targeting x86-64-v2.") + message(STATUS "Targeting x86-64-v2.") elseif(${PREFIX}TARGET_X86_64) #target_compile_options(${PROJECT_NAME} PRIVATE "/arch:SSE2") - message(STATUS "${LOGPREFIX}Targeting x86-64.") + message(STATUS "Targeting x86-64.") endif() endif() @@ -1815,7 +1827,7 @@ if(D_PLATFORM_WINDOWS AND ((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX endforeach() elseif(D_PLATFORM_LINUX AND ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))) # GCC/Clang - message(STATUS "${LOGPREFIX}Applying custom flags for GCC/Clang style build.") + message(STATUS "Applying custom flags for GCC/Clang style build.") # - Enable all warnings. target_compile_options(${PROJECT_NAME} PRIVATE "-Wall") @@ -1854,18 +1866,18 @@ elseif(D_PLATFORM_LINUX AND ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_ target_compile_options(${PROJECT_NAME} PRIVATE "-march=native" ) - message(WARNING "${LOGPREFIX}Targeting native architecture. Binaries will not be distributable to other systems!") + message(WARNING "Targeting native architecture. Binaries will not be distributable to other systems!") elseif(D_PLATFORM_ARCH_X86) if(${PREFIX}TARGET_X86_64_V4) target_compile_options(${PROJECT_NAME} PRIVATE "-march=x86-64-v4" ) - message(STATUS "${LOGPREFIX}Targeting x86-64-v4.") + message(STATUS "Targeting x86-64-v4.") elseif(${PREFIX}TARGET_X86_64_V3) target_compile_options(${PROJECT_NAME} PRIVATE "-march=x86-64-v3" ) - message(STATUS "${LOGPREFIX}Targeting x86-64-v3.") + message(STATUS "Targeting x86-64-v3.") elseif(${PREFIX}TARGET_X86_64_V2_EX) target_compile_options(${PROJECT_NAME} PRIVATE "-march=x86-64-v2" @@ -1878,17 +1890,17 @@ elseif(D_PLATFORM_LINUX AND ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_ "-mpclmul" "-mpopcnt" ) - message(STATUS "${LOGPREFIX}Targeting extended x86-64-v2.") + message(STATUS "Targeting extended x86-64-v2.") elseif(${PREFIX}TARGET_X86_64_V2) target_compile_options(${PROJECT_NAME} PRIVATE "-march=x86-64-v2" ) - message(STATUS "${LOGPREFIX}Targeting x86-64-v2.") + message(STATUS "Targeting x86-64-v2.") elseif(${PREFIX}TARGET_X86_64) target_compile_options(${PROJECT_NAME} PRIVATE "-march=x86-64" ) - message(STATUS "${LOGPREFIX}Targeting x86-64.") + message(STATUS "Targeting x86-64.") endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_compile_options(${PROJECT_NAME} PRIVATE @@ -1922,7 +1934,7 @@ elseif(D_PLATFORM_LINUX AND ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_ # add_compile_options("-fvisibility=hidden") elseif(D_PLATFORM_MAC AND (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")) # AppleClang - message(STATUS "${LOGPREFIX}Applying custom flags for AppleClang style build.") + message(STATUS "Applying custom flags for AppleClang style build.") # - Enable most useful warnings. target_compile_options(${PROJECT_NAME} PRIVATE "-Wall") @@ -1933,7 +1945,7 @@ elseif(D_PLATFORM_MAC AND (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")) target_compile_options(${PROJECT_NAME} PRIVATE "-march=native" ) - message(WARNING "${LOGPREFIX}Targeting native architecture. Binaries will not be distributable to other systems!") + message(WARNING "Targeting native architecture. Binaries will not be distributable to other systems!") endif() # - Use fast unordered math if possible. @@ -2038,7 +2050,7 @@ endif() # Clang is_feature_enabled(CLANG T_CHECK) -if(T_CHECK AND HAVE_CLANG) +if(T_CHECK) generate_compile_commands_json( TARGETS ${PROJECT_NAME} ) diff --git a/cmake/version b/cmake/version index 16bfa956..3bef96ba 160000 --- a/cmake/version +++ b/cmake/version @@ -1 +1 @@ -Subproject commit 16bfa9568c3d72e07d94c214a0da53956c7a33eb +Subproject commit 3bef96bafab04161991c2cd98a1ed51f6362d670