mirror of
https://github.com/Xaymar/obs-StreamFX
synced 2024-11-15 00:05:06 +00:00
81a970473f
Implements a manual and automatic update checker with support for both release and testing update channels, allowing users to stay as up to date as possible. It is fully compliant with privacy regulations around the world, as it stays completely silent and inactive until the user gives the Ok to connect to GitHub for the latest releases.
1262 lines
39 KiB
CMake
1262 lines
39 KiB
CMake
# Experimental new Sources, Filters and Transitions for OBS Studio
|
|
# Copyright (C) 2017 - 2018 Michael Fabian Dirks
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|
|
|
# CMake Setup
|
|
cmake_minimum_required(VERSION 3.8.0)
|
|
|
|
# Automatic Versioning
|
|
set(VERSION_MAJOR 0)
|
|
set(VERSION_MINOR 9)
|
|
set(VERSION_PATCH 0)
|
|
set(VERSION_TWEAK 0)
|
|
set(VERSION_SUFFIX "a3")
|
|
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/.git")
|
|
set(GIT_RESULT "")
|
|
set(GIT_OUTPUT "")
|
|
execute_process(
|
|
COMMAND git rev-list --count --topo-order ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_SUFFIX}..HEAD
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
|
RESULT_VARIABLE GIT_RESULT
|
|
OUTPUT_VARIABLE GIT_OUTPUT
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ERROR_QUIET
|
|
)
|
|
if(GIT_RESULT EQUAL 0)
|
|
set(VERSION_TWEAK ${GIT_OUTPUT})
|
|
endif()
|
|
execute_process(
|
|
COMMAND git rev-parse --short=8 HEAD
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
|
RESULT_VARIABLE GIT_RESULT
|
|
OUTPUT_VARIABLE GIT_OUTPUT
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ERROR_QUIET
|
|
)
|
|
if(GIT_RESULT EQUAL 0)
|
|
set(PROJECT_COMMIT ${GIT_OUTPUT})
|
|
endif()
|
|
endif()
|
|
if(PROJECT_COMMIT)
|
|
set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}${VERSION_SUFFIX}-${PROJECT_COMMIT}")
|
|
else()
|
|
set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}${VERSION_SUFFIX}")
|
|
endif()
|
|
|
|
# Policies
|
|
cmake_policy(PUSH)
|
|
if (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
|
|
cmake_policy(SET CMP0074 NEW)
|
|
endif()
|
|
|
|
# Define Project
|
|
project(
|
|
StreamFX
|
|
VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}
|
|
)
|
|
set(PROJECT_FULL_NAME "StreamFX for OBS Studio")
|
|
set(PROJECT_DESCRIPTION "Better Production Quality, for free.")
|
|
set(PROJECT_AUTHORS "Michael Fabian 'Xaymar' Dirks <info@xaymar.com>")
|
|
set(PROJECT_COPYRIGHT_YEARS "2018 - 2020")
|
|
|
|
################################################################################
|
|
# Setup / Bootstrap
|
|
################################################################################
|
|
|
|
# Detect Build Type
|
|
if("${CMAKE_SOURCE_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
|
|
set(PropertyPrefix "")
|
|
else()
|
|
set(PropertyPrefix "${PROJECT_NAME}_")
|
|
endif()
|
|
|
|
# Search Path
|
|
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/clang" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
|
|
# CMake Modules
|
|
include("util")
|
|
## Clang Integration
|
|
if(${PropertyPrefix}ENABLE_CLANG AND (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/clang/Clang.cmake"))
|
|
include("Clang")
|
|
set(HAVE_CLANG ON)
|
|
endif()
|
|
|
|
# Detect Architecture
|
|
math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
|
|
if("${BITS}" STREQUAL "32")
|
|
set(ARCH "x86")
|
|
message(STATUS "StreamFX no longer supports 32-bit builds, you are on your own if you continue.")
|
|
else()
|
|
set(ARCH "x64")
|
|
endif()
|
|
|
|
# All Warnings, Extra Warnings, Pedantic
|
|
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
# using Clang
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-missing-braces -Wmissing-field-initializers -Wno-c++98-compat-pedantic -Wold-style-cast -Wno-documentation -Wno-documentation-unknown-command -Wno-covered-switch-default -Wno-switch-enum")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-missing-braces -Wmissing-field-initializers -Wno-c++98-compat-pedantic -Wold-style-cast -Wno-documentation -Wno-documentation-unknown-command -Wno-covered-switch-default -Wno-switch-enum")
|
|
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
# GCC: -fpermissive is required as GCC does not allow the same template to be in different namespaces.
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fpermissive -Wno-long-long -Wno-missing-braces -Wmissing-field-initializers")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fpermissive -Wno-long-long -Wno-missing-braces -Wmissing-field-initializers")
|
|
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
|
|
# using Intel C++
|
|
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
|
set(MSVC_EXTRA_FLAGS "/wd4061 /wd4100 /wd4180 /wd4201 /wd4464 /wd4505 /wd4514 /wd4571 /wd4623 /wd4625 /wd4626 /wd4668 /wd4710 /wd4774 /wd4820 /wd5026 /wd5027 /wd5039 /wd5045 /wd26812")
|
|
# Force to always compile with W4
|
|
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
|
string(REGEX REPLACE "/W[0-4]" "/Wall" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
else()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wall")
|
|
endif()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MSVC_EXTRA_FLAGS}")
|
|
|
|
if(CMAKE_C_FLAGS MATCHES "/W[0-4]")
|
|
string(REGEX REPLACE "/W[0-4]" "/Wall" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
|
else()
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Wall")
|
|
endif()
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MSVC_EXTRA_FLAGS}")
|
|
|
|
if("${PropertyPrefix}" STREQUAL "")
|
|
# Speed Optimized Configuration
|
|
set(_SPEED_COMPILER_FLAGS "/O2 /Oi /Ot /Oy /GF /GS- /Qpar /arch:AVX /GR /GL")
|
|
set(_SPEED_LINKER_FLAGS "/LTCG:incremental /OPT:ICF=4 /INCREMENTAL /OPT:REF")
|
|
set(CMAKE_CXX_FLAGS_SPEED "${CMAKE_CXX_FLAGS_RELWTIHDEBINFO} ${_SPEED_COMPILER_FLAGS}")
|
|
set(CMAKE_C_FLAGS_SPEED "${CMAKE_C_FLAGS_RELWTIHDEBINFO} ${_SPEED_COMPILER_FLAGS}")
|
|
set(CMAKE_EXE_LINKER_FLAGS_SPEED "${CMAKE_EXE_LINKER_FLAGS_RELWTIHDEBINFO} ${_SPEED_LINKER_FLAGS}")
|
|
set(CMAKE_SHARED_LINKER_FLAGS_SPEED "${CMAKE_EXE_LINKER_FLAGS_RELWTIHDEBINFO} ${_SPEED_LINKER_FLAGS}")
|
|
set(CMAKE_MODULE_LINKER_FLAGS_SPEED "${CMAKE_EXE_LINKER_FLAGS_RELWTIHDEBINFO} ${_SPEED_LINKER_FLAGS}")
|
|
mark_as_advanced(
|
|
CMAKE_CXX_FLAGS_SPEED
|
|
CMAKE_C_FLAGS_SPEED
|
|
CMAKE_EXE_LINKER_FLAGS_SPEED
|
|
CMAKE_SHARED_LINKER_FLAGS_SPEED
|
|
CMAKE_MODULE_LINKER_FLAGS_SPEED
|
|
)
|
|
|
|
if(CMAKE_CONFIGURATION_TYPES)
|
|
list(APPEND CMAKE_CONFIGURATION_TYPES Speed)
|
|
list(REMOVE_DUPLICATES CMAKE_CONFIGURATION_TYPES)
|
|
CacheSet(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# C++ Standard and Extensions
|
|
## Use C++17 and no non-standard extensions.
|
|
set(_CXX_STANDARD 17)
|
|
set(_CXX_EXTENSIONS OFF)
|
|
|
|
################################################################################
|
|
# Options
|
|
################################################################################
|
|
set(${PropertyPrefix}OBS_NATIVE FALSE CACHE BOOL "Use native obs-studio build" FORCE)
|
|
set(${PropertyPrefix}OBS_REFERENCE FALSE CACHE BOOL "Use referenced obs-studio build" FORCE)
|
|
set(${PropertyPrefix}OBS_PACKAGE FALSE CACHE BOOL "Use packaged obs-studio build" FORCE)
|
|
set(${PropertyPrefix}OBS_DOWNLOAD FALSE CACHE BOOL "Use downloaded obs-studio build")
|
|
mark_as_advanced(FORCE OBS_NATIVE OBS_PACKAGE OBS_REFERENCE OBS_DOWNLOAD)
|
|
|
|
# Solve OBS_NATIVE, OBS_REFERENCE, OBS_PACKAGE, OBS_DOWNLOAD
|
|
if(TARGET libobs)
|
|
message(STATUS "${PROJECT_NAME}: Using native obs-studio.")
|
|
CacheSet(${PropertyPrefix}OBS_NATIVE TRUE)
|
|
if (TARGET obs-frontend-api)
|
|
set(HAVE_OBS_FRONTEND TRUE)
|
|
endif()
|
|
else()
|
|
message(STATUS "${PROJECT_NAME}: Using packaged or remote obs-studio.")
|
|
CacheSet(${PropertyPrefix}OBS_NATIVE FALSE)
|
|
|
|
set(CMAKE_PACKAGE_PREFIX "${CMAKE_BINARY_DIR}" CACHE PATH "Path for generated archives.")
|
|
set(CMAKE_PACKAGE_NAME "${PROJECT_NAME}" CACHE STRING "Name for the generated archives.")
|
|
set(CMAKE_PACKAGE_SUFFIX_OVERRIDE "" CACHE STRING "Override for the suffix.")
|
|
|
|
if(UNIX)
|
|
set(UNIX_LOCAL_STRUCTURE TRUE CACHE BOOL "Package for a local linux install.")
|
|
endif()
|
|
|
|
if(NOT ${PropertyPrefix}OBS_DOWNLOAD)
|
|
set(${PropertyPrefix}OBS_STUDIO_DIR "" CACHE PATH "OBS Studio Source/Package Directory")
|
|
set(${PropertyPrefix}OBS_DEPENDENCIES_DIR "" CACHE PATH "OBS Studio Dependencies Directory")
|
|
if(EXISTS "${OBS_STUDIO_DIR}/cmake/LibObs/LibObsConfig.cmake")
|
|
message(STATUS "${PROJECT_NAME}: Using packaged obs-studio.")
|
|
CacheSet(${PropertyPrefix}OBS_PACKAGE TRUE)
|
|
elseif(EXISTS "${OBS_STUDIO_DIR}/libobs/obs-module.h")
|
|
message(STATUS "${PROJECT_NAME}: Using referenced obs-studio.")
|
|
CacheSet(${PropertyPrefix}OBS_REFERENCE TRUE)
|
|
else()
|
|
message(FATAL_ERROR "${PROJECT_NAME}: No OBS Studio detected. If you wish to continue, either check ${PropertyPrefix}OBS_DOWNLOAD or fix your configuration")
|
|
return()
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# Features
|
|
if(WIN32)
|
|
set(ENABLE_ENCODER_FFMPEG TRUE)
|
|
set(ENABLE_FILTER_BLUR TRUE)
|
|
set(ENABLE_FILTER_COLOR_GRADE TRUE)
|
|
set(ENABLE_FILTER_DISPLACEMENT TRUE)
|
|
set(ENABLE_FILTER_DYNAMIC_MASK TRUE)
|
|
set(ENABLE_FILTER_NVIDIA_FACE_TRACKING TRUE)
|
|
set(ENABLE_FILTER_SDF_EFFECTS TRUE)
|
|
set(ENABLE_FILTER_SHADER TRUE)
|
|
set(ENABLE_FILTER_TRANSFORM TRUE)
|
|
set(ENABLE_SOURCE_MIRROR TRUE)
|
|
set(ENABLE_SOURCE_SHADER TRUE)
|
|
set(ENABLE_TRANSITION_SHADER TRUE)
|
|
elseif(NOT APPLE)
|
|
set(ENABLE_ENCODER_FFMPEG TRUE)
|
|
set(ENABLE_FILTER_BLUR TRUE)
|
|
set(ENABLE_FILTER_COLOR_GRADE TRUE)
|
|
set(ENABLE_FILTER_DISPLACEMENT TRUE)
|
|
set(ENABLE_FILTER_DYNAMIC_MASK TRUE)
|
|
set(ENABLE_FILTER_NVIDIA_FACE_TRACKING FALSE)
|
|
set(ENABLE_FILTER_SDF_EFFECTS TRUE)
|
|
set(ENABLE_FILTER_SHADER TRUE)
|
|
set(ENABLE_FILTER_TRANSFORM TRUE)
|
|
set(ENABLE_SOURCE_MIRROR TRUE)
|
|
set(ENABLE_SOURCE_SHADER TRUE)
|
|
set(ENABLE_TRANSITION_SHADER TRUE)
|
|
else()
|
|
set(ENABLE_ENCODER_FFMPEG FALSE)
|
|
set(ENABLE_FILTER_BLUR TRUE)
|
|
set(ENABLE_FILTER_COLOR_GRADE TRUE)
|
|
set(ENABLE_FILTER_DISPLACEMENT TRUE)
|
|
set(ENABLE_FILTER_DYNAMIC_MASK TRUE)
|
|
set(ENABLE_FILTER_NVIDIA_FACE_TRACKING FALSE)
|
|
set(ENABLE_FILTER_SDF_EFFECTS TRUE)
|
|
set(ENABLE_FILTER_SHADER TRUE)
|
|
set(ENABLE_FILTER_TRANSFORM TRUE)
|
|
set(ENABLE_SOURCE_MIRROR TRUE)
|
|
set(ENABLE_SOURCE_SHADER TRUE)
|
|
set(ENABLE_TRANSITION_SHADER TRUE)
|
|
endif()
|
|
## Encoders
|
|
set(${PropertyPrefix}ENABLE_ENCODER_FFMPEG ${ENABLE_ENCODER_FFMPEG} CACHE BOOL "Enable FFmpeg Encoder")
|
|
## Filters
|
|
set(${PropertyPrefix}ENABLE_FILTER_BLUR ${ENABLE_FILTER_BLUR} CACHE BOOL "Enable Blur Filter")
|
|
set(${PropertyPrefix}ENABLE_FILTER_COLOR_GRADE ${ENABLE_FILTER_COLOR_GRADE} CACHE BOOL "Enable Color Grade Filter")
|
|
set(${PropertyPrefix}ENABLE_FILTER_DISPLACEMENT ${ENABLE_FILTER_DISPLACEMENT} CACHE BOOL "Enable Displacement Filter")
|
|
set(${PropertyPrefix}ENABLE_FILTER_DYNAMIC_MASK ${ENABLE_FILTER_DYNAMIC_MASK} CACHE BOOL "Enable Dynamic Mask Filter")
|
|
set(${PropertyPrefix}ENABLE_FILTER_NVIDIA_FACE_TRACKING ${ENABLE_FILTER_NVIDIA_FACE_TRACKING} CACHE BOOL "Enable NVidia Face Tracking Filter")
|
|
set(${PropertyPrefix}ENABLE_FILTER_SDF_EFFECTS ${ENABLE_FILTER_SDF_EFFECTS} CACHE BOOL "Enable SDF Effects Filter")
|
|
set(${PropertyPrefix}ENABLE_FILTER_SHADER ${ENABLE_FILTER_SHADER} CACHE BOOL "Enable Shader Filter")
|
|
set(${PropertyPrefix}ENABLE_FILTER_TRANSFORM ${ENABLE_FILTER_TRANSFORM} CACHE BOOL "Enable Transform Filter")
|
|
## Sources
|
|
set(${PropertyPrefix}ENABLE_SOURCE_MIRROR ${ENABLE_SOURCE_MIRROR} CACHE BOOL "Enable Mirror Source")
|
|
set(${PropertyPrefix}ENABLE_SOURCE_SHADER ${ENABLE_SOURCE_SHADER} CACHE BOOL "Enable Shader Source")
|
|
## Transitions
|
|
set(${PropertyPrefix}ENABLE_TRANSITION_SHADER ${ENABLE_TRANSITION_SHADER} CACHE BOOL "Enable Shader Transition")
|
|
## Code Related
|
|
set(${PropertyPrefix}ENABLE_PROFILING FALSE CACHE BOOL "Enable CPU and GPU performance tracking, which has a non-zero overhead at all times. Do not enable this for release builds.")
|
|
set(${PropertyPrefix}ENABLE_CLANG TRUE CACHE BOOL "Enable Clang integration for supported compilers.")
|
|
set(${PropertyPrefix}ENABLE_UPDATER TRUE CACHE BOOL "Enable automatic update checks.")
|
|
|
|
# Code Signing
|
|
set(${PropertyPrefix}SIGN_ENABLED FALSE CACHE BOOL "Enable signing builds.")
|
|
set(${PropertyPrefix}SIGN_KEY "" CACHE FILEPATH "Path to the private key with which to sign.")
|
|
set(${PropertyPrefix}SIGN_PASSWORD "" CACHE STRING "Password for the private key.")
|
|
|
|
################################################################################
|
|
# CMake / Compiler Dependencies
|
|
################################################################################
|
|
|
|
# Configure Files
|
|
configure_file(
|
|
"templates/version.hpp.in"
|
|
"${PROJECT_BINARY_DIR}/generated/version.hpp"
|
|
)
|
|
configure_file(
|
|
"templates/module.cpp.in"
|
|
"${PROJECT_BINARY_DIR}/generated/module.cpp"
|
|
)
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
set(D_PLATFORM_WINDOWS 1)
|
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
set(D_PLATFORM_LINUX 1)
|
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Mac")
|
|
set(D_PLATFORM_MAC 1)
|
|
endif()
|
|
configure_file(
|
|
"templates/config.hpp.in"
|
|
"${PROJECT_BINARY_DIR}/generated/config.hpp"
|
|
)
|
|
|
|
# Optional Code & Dependencies
|
|
if(${PropertyPrefix}ENABLE_UPDATER)
|
|
set(REQUIRE_CURL TRUE)
|
|
set(REQUIRE_JSON TRUE)
|
|
endif()
|
|
|
|
# libOBS
|
|
if(NOT TARGET libobs)
|
|
# Packaging
|
|
if("${CMAKE_PACKAGE_SUFFIX_OVERRIDE}" STREQUAL "")
|
|
set(_PACKAGE_SUFFIX_OVERRIDE "${VERSION_STRING}")
|
|
else()
|
|
set(_PACKAGE_SUFFIX_OVERRIDE "${CMAKE_PACKAGE_SUFFIX_OVERRIDE}")
|
|
endif()
|
|
set(_PACKAGE_FULL_NAME "${CMAKE_PACKAGE_PREFIX}/${CMAKE_PACKAGE_NAME}-${_PACKAGE_SUFFIX_OVERRIDE}")
|
|
|
|
# Windows
|
|
if(WIN32)
|
|
## Installer (InnoSetup)
|
|
get_filename_component(ISS_FILES_DIR "${CMAKE_INSTALL_PREFIX}" ABSOLUTE)
|
|
file(TO_NATIVE_PATH "${ISS_FILES_DIR}" ISS_FILES_DIR)
|
|
get_filename_component(ISS_PACKAGE_DIR "${CMAKE_PACKAGE_PREFIX}" ABSOLUTE)
|
|
file(TO_NATIVE_PATH "${ISS_PACKAGE_DIR}" ISS_PACKAGE_DIR)
|
|
get_filename_component(ISS_SOURCE_DIR "${PROJECT_SOURCE_DIR}" ABSOLUTE)
|
|
file(TO_NATIVE_PATH "${ISS_SOURCE_DIR}" ISS_SOURCE_DIR)
|
|
get_filename_component(ISS_MSVCHELPER_PATH "${msvc-redist-helper_BUILD_DIR}" ABSOLUTE)
|
|
file(TO_NATIVE_PATH "${ISS_MSVCHELPER_PATH}" ISS_MSVCHELPER_PATH)
|
|
configure_file(
|
|
"templates/installer.iss.in"
|
|
"${PROJECT_BINARY_DIR}/installer.iss"
|
|
)
|
|
|
|
# Windows Specific Resource Definition
|
|
set(PROJECT_PRODUCT_NAME "${PROJECT_FULL_NAME}")
|
|
set(PROJECT_COMPANY_NAME "${PROJECT_AUTHORS}")
|
|
set(PROJECT_COPYRIGHT "${PROJECT_AUTHORS} © ${PROJECT_COPYRIGHT_YEARS}")
|
|
set(PROJECT_LEGAL_TRADEMARKS_1 "")
|
|
set(PROJECT_LEGAL_TRADEMARKS_2 "")
|
|
|
|
configure_file(
|
|
"templates/version.rc.in"
|
|
"${PROJECT_BINARY_DIR}/generated/version.rc"
|
|
@ONLY
|
|
)
|
|
|
|
endif()
|
|
|
|
# Download OBS Studio and OBS Dependencies
|
|
if(${PropertyPrefix}OBS_DOWNLOAD)
|
|
include("DownloadProject")
|
|
|
|
set(OBS_DOWNLOAD_VERSION "25.0.3-fe-ci")
|
|
if(WIN32)
|
|
# Windows
|
|
set(OBS_DOWNLOAD_HASH_32 "SHA512=C8CABFAA59BDF5E4CD1C69CBC349F3E62FD6FE37A1A1A8BE4AC1B37BF087F597A313B2B004E019827C43A5951B50957B60578B7F2249383C117E634FD8714844")
|
|
set(OBS_DOWNLOAD_HASH_64 "SHA512=75E83548AD8FD994D45BE2395E97499BED8444C245857C811BA44D35BF3C49186B1187D3EF250F2618295D7AFA7D8ED5A66582BD140A01A46A77F6BC19BDDBE2")
|
|
set(OBS_DEPENDENCIES_VERSION "25.0.0")
|
|
set(OBS_DEPENDENCIES_HASH "SHA512=7545696B5B684E6BF57F11158FBDF7A0477C4C2CBB872070105A400E56ACD16A54934928BB917E8C952631667DB63953B56F8BACB9C52D36285EA3DD83B9F473")
|
|
set(OBS_QT_VERSION "5.10.1")
|
|
set(OBS_QT_HASH "SHA512=848B9AC00B06FCA1F1A85BD4EFEA4138D278E8EC96823C5C36CC988DDE5D27E2F91300B02F2F0E71F075CCB0D791D3C888CDA6A5048DDFE6F946A8697DFEF1E9")
|
|
|
|
download_project(
|
|
PROJ libobs
|
|
URL https://github.com/Xaymar/obs-studio/releases/download/${OBS_DOWNLOAD_VERSION}/obs-studio-${ARCH}-0.0.0.0-vs2019.7z
|
|
URL_HASH "${OBS_DOWNLOAD_HASH_${ARCH}}"
|
|
DOWNLOAD_NAME "libobs.7z"
|
|
DOWNLOAD_NO_PROGRESS ON
|
|
UPDATE_DISCONNECTED ON
|
|
QUIET
|
|
)
|
|
|
|
download_project(
|
|
PROJ obsdeps
|
|
URL https://cdn.xaymar.com/obs/dependencies_${OBS_DEPENDENCIES_VERSION}.7z
|
|
URL_HASH "${OBS_DEPENDENCIES_HASH}"
|
|
DOWNLOAD_NAME "obsdeps.7z"
|
|
DOWNLOAD_NO_PROGRESS ON
|
|
UPDATE_DISCONNECTED ON
|
|
QUIET
|
|
)
|
|
elseif(UNIX)
|
|
# Unix, Linux
|
|
set(OBS_DOWNLOAD_HASH_32 "")
|
|
set(OBS_DOWNLOAD_HASH_64 "SHA512=EAB0450F4B3D9C6252C347CD138A4AB49725CF930A742FF6D1EAEADDEDE31627D1C0A45831FE26A19C0B278386A476736CAA170B351EF833E8A5E8DAD6BB57D2")
|
|
|
|
download_project(
|
|
PROJ libobs
|
|
URL https://github.com/Xaymar/obs-studio/releases/download/${OBS_DOWNLOAD_VERSION}/obs-studio-${ARCH}-0.0.0.0-ubuntu1804.7z
|
|
URL_HASH "${OBS_DOWNLOAD_HASH_${ARCH}}"
|
|
DOWNLOAD_NAME "libobs.7z"
|
|
DOWNLOAD_NO_PROGRESS ON
|
|
UPDATE_DISCONNECTED ON
|
|
QUIET
|
|
)
|
|
|
|
# Dependencies must be installed like normal OBS Studio
|
|
message("Linux builds require your install the necessary development packages, take a look at the obs-studio build guide for them.")
|
|
else()
|
|
# Other OS
|
|
message(FATAL "Unable to download libOBS as this Operating System is not yet supported.")
|
|
endif()
|
|
endif()
|
|
|
|
# Load OBS Studio & Dependencies
|
|
if(${PropertyPrefix}OBS_PACKAGE)
|
|
include("${OBS_STUDIO_DIR}/cmake/LibObs/LibObsConfig.cmake")
|
|
if (EXISTS "${OBS_STUDIO_DIR}/cmake/obs-frontend-api/obs-frontend-apiConfig.cmake")
|
|
include("${OBS_STUDIO_DIR}/cmake/obs-frontend-api/obs-frontend-apiConfig.cmake")
|
|
set(HAVE_OBS_FRONTEND TRUE)
|
|
endif()
|
|
elseif(${PropertyPrefix}OBS_REFERENCE)
|
|
set(obsPath "${OBS_STUDIO_DIR}")
|
|
include("${OBS_STUDIO_DIR}/cmake/external/FindLibobs.cmake")
|
|
elseif(${PropertyPrefix}OBS_DOWNLOAD)
|
|
set(_INCLUDE_PREFIX "")
|
|
if(WIN32)
|
|
set(_INCLUDE_PREFIX "${libobs_SOURCE_DIR}/cmake")
|
|
elseif(UNIX)
|
|
set(_INCLUDE_PREFIX "${libobs_SOURCE_DIR}/usr/local/lib/cmake")
|
|
else()
|
|
endif()
|
|
|
|
include("${_INCLUDE_PREFIX}/LibObs/LibObsConfig.cmake")
|
|
if (EXISTS "${_INCLUDE_PREFIX}/obs-frontend-api/obs-frontend-apiConfig.cmake")
|
|
include("${_INCLUDE_PREFIX}/obs-frontend-api/obs-frontend-apiConfig.cmake")
|
|
|
|
if(WIN32)
|
|
download_project(
|
|
PROJ qt
|
|
URL https://cdn.xaymar.com/obs/qt_${OBS_QT_VERSION}.7z
|
|
URL_HASH "${OBS_QT_HASH}"
|
|
DOWNLOAD_NAME "qt.7z"
|
|
DOWNLOAD_NO_PROGRESS ON
|
|
UPDATE_DISCONNECTED ON
|
|
QUIET
|
|
)
|
|
|
|
set(Qt5_DIR "${qt_SOURCE_DIR}" CACHE STRING "Path to Qt5")
|
|
if("${BITS}" STREQUAL "32")
|
|
CacheSet(Qt5_DIR "${qt_SOURCE_DIR}/msvc2017/lib/cmake/Qt5/")
|
|
else()
|
|
CacheSet(Qt5_DIR "${qt_SOURCE_DIR}/msvc2017_64/lib/cmake/Qt5/")
|
|
endif()
|
|
endif()
|
|
set(HAVE_OBS_FRONTEND TRUE)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# QT5
|
|
if(HAVE_OBS_FRONTEND)
|
|
find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
|
|
endif()
|
|
|
|
# CURL
|
|
if(REQUIRE_CURL)
|
|
if(WIN32)
|
|
# CURL built by OBS Project is not compatible with find modules.
|
|
if(${PropertyPrefix}OBS_NATIVE) # Already defined by OBS
|
|
set(CURL_LIBRARIES "${CURL_LIB}")
|
|
set(CURL_INCLUDE_DIRS "${CURL_INCLUDE_DIR}")
|
|
elseif(${PropertyPrefix}OBS_DOWNLOAD)
|
|
set(CURL_LIBRARIES "${obsdeps_SOURCE_DIR}/win${BITS}/bin/libcurl.lib")
|
|
set(CURL_INCLUDE_DIRS "${obsdeps_SOURCE_DIR}/win${BITS}/include")
|
|
elseif((${PropertyPrefix}OBS_REFERENCE) OR (${PropertyPrefix}OBS_PACKAGE))
|
|
set(CURL_LIBRARIES "${OBS_DEPENDENCIES_DIR}/bin/libcurl.lib")
|
|
set(CURL_INCLUDE_DIRS "${OBS_DEPENDENCIES_DIR}/include")
|
|
endif()
|
|
set(CURL_LIBRARY_DEBUG ${CURL_LIBRARIES})
|
|
set(CURL_LIBRARY_RELEASE ${CURL_LIBRARIES})
|
|
set(CURL_INCLUDE_DIR ${CURL_INCLUDE_DIRS})
|
|
set(CURL_FOUND ON)
|
|
else()
|
|
find_package(CURL REQUIRED)
|
|
endif()
|
|
endif()
|
|
|
|
# JSON
|
|
if(REQUIRE_JSON)
|
|
set(JSON_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/third-party/nlohmann-json/single_include")
|
|
endif()
|
|
|
|
################################################################################
|
|
# Code
|
|
################################################################################
|
|
set(PROJECT_DATA_LOCALE )
|
|
set(PROJECT_DATA_EFFECTS )
|
|
set(PROJECT_DATA_SHADERS )
|
|
set(PROJECT_LIBRARIES )
|
|
set(PROJECT_LIBRARIES_DELAYED )
|
|
set(PROJECT_INCLUDE_DIRS )
|
|
set(PROJECT_TEMPLATES )
|
|
set(PROJECT_PUBLIC )
|
|
set(PROJECT_PRIVATE_GENERATED )
|
|
set(PROJECT_PRIVATE_SOURCE )
|
|
set(PROJECT_UI )
|
|
set(PROJECT_DEFINITIONS )
|
|
|
|
# Dependencies
|
|
## Dependency: libOBS
|
|
if(${PropertyPrefix}OBS_NATIVE)
|
|
list(APPEND PROJECT_LIBRARIES
|
|
libobs
|
|
)
|
|
elseif(${PropertyPrefix}OBS_REFERENCE)
|
|
list(APPEND PROJECT_INCLUDE_DIRS
|
|
"${OBS_STUDIO_DIR}/libobs"
|
|
)
|
|
list(APPEND PROJECT_LIBRARIES
|
|
"${LIBOBS_LIB}"
|
|
)
|
|
elseif(${PropertyPrefix}OBS_PACKAGE)
|
|
list(APPEND PROJECT_INCLUDE_DIRS
|
|
"${OBS_STUDIO_DIR}/include"
|
|
)
|
|
list(APPEND PROJECT_LIBRARIES
|
|
libobs
|
|
)
|
|
elseif(${PropertyPrefix}OBS_DOWNLOAD)
|
|
list(APPEND PROJECT_LIBRARIES
|
|
libobs
|
|
)
|
|
endif()
|
|
|
|
## Dependency: CURL
|
|
if(REQUIRE_CURL)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/util/util-curl.hpp"
|
|
"source/util/util-curl.cpp"
|
|
)
|
|
list(APPEND PROJECT_LIBRARIES
|
|
${CURL_LIBRARY_RELEASE}
|
|
)
|
|
list(APPEND PROJECT_INCLUDE_DIRS
|
|
${CURL_INCLUDE_DIR}
|
|
)
|
|
endif()
|
|
|
|
## Dependency: nlohmann_json
|
|
if(REQUIRE_JSON)
|
|
list(APPEND PROJECT_INCLUDE_DIRS
|
|
${JSON_INCLUDE_DIR}
|
|
)
|
|
endif()
|
|
|
|
## Data & Source
|
|
list(APPEND PROJECT_DATA
|
|
"data/locale/en-US.ini"
|
|
"data/effects/color-conversion.effect"
|
|
"data/effects/mipgen.effect"
|
|
"data/effects/pack-unpack.effect"
|
|
)
|
|
list(APPEND PROJECT_TEMPLATES
|
|
"templates/version.hpp.in"
|
|
"templates/module.cpp.in"
|
|
"templates/config.hpp.in"
|
|
)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
# Plugin
|
|
"source/configuration.hpp"
|
|
"source/configuration.cpp"
|
|
"source/common.hpp"
|
|
"source/strings.hpp"
|
|
"source/plugin.hpp"
|
|
"source/plugin.cpp"
|
|
"source/util/utility.hpp"
|
|
"source/util/utility.cpp"
|
|
"source/util/util-event.hpp"
|
|
"source/util/util-library.cpp"
|
|
"source/util/util-library.hpp"
|
|
"source/util/util-profiler.cpp"
|
|
"source/util/util-profiler.hpp"
|
|
"source/util/util-threadpool.cpp"
|
|
"source/util/util-threadpool.hpp"
|
|
|
|
# Graphics
|
|
"source/gfx/gfx-source-texture.hpp"
|
|
"source/gfx/gfx-source-texture.cpp"
|
|
|
|
# OBS
|
|
"source/obs/gs/gs-helper.hpp"
|
|
"source/obs/gs/gs-helper.cpp"
|
|
"source/obs/gs/gs-effect.hpp"
|
|
"source/obs/gs/gs-effect.cpp"
|
|
"source/obs/gs/gs-effect-parameter.hpp"
|
|
"source/obs/gs/gs-effect-parameter.cpp"
|
|
"source/obs/gs/gs-effect-pass.hpp"
|
|
"source/obs/gs/gs-effect-pass.cpp"
|
|
"source/obs/gs/gs-effect-technique.hpp"
|
|
"source/obs/gs/gs-effect-technique.cpp"
|
|
"source/obs/gs/gs-indexbuffer.hpp"
|
|
"source/obs/gs/gs-indexbuffer.cpp"
|
|
"source/obs/gs/gs-limits.hpp"
|
|
"source/obs/gs/gs-mipmapper.hpp"
|
|
"source/obs/gs/gs-mipmapper.cpp"
|
|
"source/obs/gs/gs-rendertarget.hpp"
|
|
"source/obs/gs/gs-rendertarget.cpp"
|
|
"source/obs/gs/gs-sampler.hpp"
|
|
"source/obs/gs/gs-sampler.cpp"
|
|
"source/obs/gs/gs-texture.hpp"
|
|
"source/obs/gs/gs-texture.cpp"
|
|
"source/obs/gs/gs-vertex.hpp"
|
|
"source/obs/gs/gs-vertex.cpp"
|
|
"source/obs/gs/gs-vertexbuffer.hpp"
|
|
"source/obs/gs/gs-vertexbuffer.cpp"
|
|
"source/obs/obs-encoder-factory.hpp"
|
|
"source/obs/obs-encoder-factory.cpp"
|
|
"source/obs/obs-signal-handler.hpp"
|
|
"source/obs/obs-signal-handler.cpp"
|
|
"source/obs/obs-source.hpp"
|
|
"source/obs/obs-source.cpp"
|
|
"source/obs/obs-source-factory.hpp"
|
|
"source/obs/obs-source-factory.cpp"
|
|
"source/obs/obs-source-tracker.hpp"
|
|
"source/obs/obs-source-tracker.cpp"
|
|
"source/obs/obs-tools.hpp"
|
|
"source/obs/obs-tools.cpp"
|
|
)
|
|
list(APPEND PROJECT_PRIVATE_GENERATED
|
|
"${PROJECT_BINARY_DIR}/generated/module.cpp"
|
|
"${PROJECT_BINARY_DIR}/generated/version.hpp"
|
|
"${PROJECT_BINARY_DIR}/generated/config.hpp"
|
|
)
|
|
if(WIN32)
|
|
list(APPEND PROJECT_TEMPLATES
|
|
"templates/installer.iss.in"
|
|
"templates/version.rc.in"
|
|
)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/windll.cpp"
|
|
)
|
|
list(APPEND PROJECT_PRIVATE_GENERATED
|
|
"${PROJECT_BINARY_DIR}/generated/version.rc"
|
|
)
|
|
endif()
|
|
if((CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
|
OR (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
OR (CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
|
OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))
|
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0)
|
|
list(APPEND PROJECT_LIBRARIES
|
|
"stdc++fs"
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
## OBS Studio - Frontend/Qt
|
|
if(HAVE_OBS_FRONTEND)
|
|
list(APPEND PROJECT_UI
|
|
"ui/streamfx.qrc"
|
|
"ui/about.ui"
|
|
"ui/about-entry.ui"
|
|
)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/ui/ui-common.hpp"
|
|
"source/ui/ui.hpp"
|
|
"source/ui/ui.cpp"
|
|
"source/ui/ui-about.hpp"
|
|
"source/ui/ui-about.cpp"
|
|
"source/ui/ui-about-entry.hpp"
|
|
"source/ui/ui-about-entry.cpp"
|
|
)
|
|
list(APPEND PROJECT_DATA
|
|
|
|
)
|
|
list(APPEND PROJECT_INCLUDE_DIRS
|
|
"source/ui"
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_FRONTEND
|
|
)
|
|
endif()
|
|
|
|
## Feature - Automatic Updater
|
|
if(${PropertyPrefix}ENABLE_UPDATER AND CURL_FOUND)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/updater.hpp"
|
|
"source/updater.cpp"
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_UPDATER
|
|
)
|
|
if(HAVE_OBS_FRONTEND)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/ui/ui-updater.hpp"
|
|
"source/ui/ui-updater.cpp"
|
|
)
|
|
list(APPEND PROJECT_UI
|
|
"ui/updater.ui"
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
## Feature - FFmpeg Encoder
|
|
if(${PropertyPrefix}ENABLE_ENCODER_FFMPEG)
|
|
if(NOT ${PropertyPrefix}OBS_NATIVE)
|
|
find_path(
|
|
FFmpegPath "libavcodec/avcodec.h"
|
|
HINTS
|
|
${OBS_DEPENDENCIES_DIR}
|
|
${obsdeps_SOURCE_DIR}
|
|
${DepsPath}
|
|
${DepsPath32}
|
|
${DepsPath64}
|
|
|
|
PATHS
|
|
/usr/include
|
|
/usr/local/include
|
|
/opt/local/include
|
|
/sw/include
|
|
PATH_SUFFIXES
|
|
win${BITS}
|
|
win${BITS}/bin
|
|
win${BITS}/include
|
|
win${ARCH}
|
|
win${ARCH}/bin
|
|
win${ARCH}/include
|
|
bin
|
|
include
|
|
)
|
|
endif()
|
|
find_package(FFmpeg REQUIRED COMPONENTS avutil avcodec swscale)
|
|
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
# FFmpeg
|
|
"source/ffmpeg/avframe-queue.cpp"
|
|
"source/ffmpeg/avframe-queue.hpp"
|
|
"source/ffmpeg/swscale.hpp"
|
|
"source/ffmpeg/swscale.cpp"
|
|
"source/ffmpeg/tools.hpp"
|
|
"source/ffmpeg/tools.cpp"
|
|
"source/ffmpeg/hwapi/base.hpp"
|
|
"source/ffmpeg/hwapi/base.cpp"
|
|
"source/ffmpeg/hwapi/d3d11.hpp"
|
|
"source/ffmpeg/hwapi/d3d11.cpp"
|
|
|
|
# Encoders
|
|
"source/encoders/encoder-ffmpeg.hpp"
|
|
"source/encoders/encoder-ffmpeg.cpp"
|
|
|
|
# Encoders/Codecs
|
|
"source/encoders/codecs/hevc.hpp"
|
|
"source/encoders/codecs/hevc.cpp"
|
|
"source/encoders/codecs/h264.hpp"
|
|
"source/encoders/codecs/h264.cpp"
|
|
"source/encoders/codecs/prores.hpp"
|
|
"source/encoders/codecs/prores.cpp"
|
|
|
|
# Encoders/Handlers
|
|
"source/encoders/handlers/handler.hpp"
|
|
"source/encoders/handlers/handler.cpp"
|
|
"source/encoders/handlers/debug_handler.hpp"
|
|
"source/encoders/handlers/debug_handler.cpp"
|
|
"source/encoders/handlers/prores_aw_handler.hpp"
|
|
"source/encoders/handlers/prores_aw_handler.cpp"
|
|
"source/encoders/handlers/nvenc_shared.hpp"
|
|
"source/encoders/handlers/nvenc_shared.cpp"
|
|
"source/encoders/handlers/nvenc_h264_handler.hpp"
|
|
"source/encoders/handlers/nvenc_h264_handler.cpp"
|
|
"source/encoders/handlers/nvenc_hevc_handler.hpp"
|
|
"source/encoders/handlers/nvenc_hevc_handler.cpp"
|
|
)
|
|
list(APPEND PROJECT_LIBRARIES
|
|
${FFMPEG_LIBRARIES}
|
|
)
|
|
list(APPEND PROJECT_INCLUDE_DIRS
|
|
${FFMPEG_INCLUDE_DIRS}
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_ENCODER_FFMPEG
|
|
)
|
|
endif()
|
|
|
|
## Feature - Blur Filter
|
|
if(${PropertyPrefix}ENABLE_FILTER_BLUR)
|
|
list(APPEND PROJECT_DATA
|
|
"data/effects/mask.effect"
|
|
"data/effects/blur/box.effect"
|
|
"data/effects/blur/box-linear.effect"
|
|
"data/effects/blur/dual-filtering.effect"
|
|
"data/effects/blur/gaussian.effect"
|
|
"data/effects/blur/gaussian-linear.effect"
|
|
)
|
|
list (APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/gfx/blur/gfx-blur-base.hpp"
|
|
"source/gfx/blur/gfx-blur-base.cpp"
|
|
"source/gfx/blur/gfx-blur-box.hpp"
|
|
"source/gfx/blur/gfx-blur-box.cpp"
|
|
"source/gfx/blur/gfx-blur-box-linear.hpp"
|
|
"source/gfx/blur/gfx-blur-box-linear.cpp"
|
|
"source/gfx/blur/gfx-blur-dual-filtering.hpp"
|
|
"source/gfx/blur/gfx-blur-dual-filtering.cpp"
|
|
"source/gfx/blur/gfx-blur-gaussian.hpp"
|
|
"source/gfx/blur/gfx-blur-gaussian.cpp"
|
|
"source/gfx/blur/gfx-blur-gaussian-linear.hpp"
|
|
"source/gfx/blur/gfx-blur-gaussian-linear.cpp"
|
|
"source/filters/filter-blur.hpp"
|
|
"source/filters/filter-blur.cpp"
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_FILTER_BLUR
|
|
)
|
|
endif()
|
|
|
|
## Features - Color Grade Filter
|
|
if(${PropertyPrefix}ENABLE_FILTER_COLOR_GRADE)
|
|
list(APPEND PROJECT_DATA
|
|
"data/effects/color-grade.effect"
|
|
)
|
|
list (APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/filters/filter-color-grade.hpp"
|
|
"source/filters/filter-color-grade.cpp"
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_FILTER_COLOR_GRADE
|
|
)
|
|
endif()
|
|
|
|
## Features - Displacement Filter
|
|
if(${PropertyPrefix}ENABLE_FILTER_DISPLACEMENT)
|
|
list(APPEND PROJECT_DATA
|
|
"data/effects/displace.effect"
|
|
)
|
|
list (APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/filters/filter-displacement.hpp"
|
|
"source/filters/filter-displacement.cpp"
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_FILTER_DISPLACEMENT
|
|
)
|
|
endif()
|
|
|
|
## Features - Dynamic Mask Filter
|
|
if(${PropertyPrefix}ENABLE_FILTER_DYNAMIC_MASK)
|
|
list(APPEND PROJECT_DATA
|
|
"data/effects/channel-mask.effect"
|
|
)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/filters/filter-dynamic-mask.hpp"
|
|
"source/filters/filter-dynamic-mask.cpp"
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_FILTER_DYNAMIC_MASK
|
|
)
|
|
endif()
|
|
|
|
## Features - Nvidia Face Tracking Filter
|
|
if(${PropertyPrefix}ENABLE_FILTER_NVIDIA_FACE_TRACKING AND WIN32)
|
|
set(NVAR_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/third-party/nvidia-arsdk")
|
|
find_package(NVAR REQUIRED)
|
|
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/filters/filter-nv-face-tracking.hpp"
|
|
"source/filters/filter-nv-face-tracking.cpp"
|
|
"source/nvidia/ar/nvidia-ar.hpp"
|
|
"source/nvidia/ar/nvidia-ar.cpp"
|
|
"source/nvidia/ar/nvidia-ar-feature.hpp"
|
|
"source/nvidia/ar/nvidia-ar-feature.cpp"
|
|
"source/nvidia/cuda/nvidia-cuda.hpp"
|
|
"source/nvidia/cuda/nvidia-cuda.cpp"
|
|
"source/nvidia/cuda/nvidia-cuda-context.hpp"
|
|
"source/nvidia/cuda/nvidia-cuda-context.cpp"
|
|
"source/nvidia/cuda/nvidia-cuda-context-stack.hpp"
|
|
"source/nvidia/cuda/nvidia-cuda-context-stack.cpp"
|
|
"source/nvidia/cuda/nvidia-cuda-gs-texture.hpp"
|
|
"source/nvidia/cuda/nvidia-cuda-gs-texture.cpp"
|
|
"source/nvidia/cuda/nvidia-cuda-memory.hpp"
|
|
"source/nvidia/cuda/nvidia-cuda-memory.cpp"
|
|
"source/nvidia/cuda/nvidia-cuda-stream.hpp"
|
|
"source/nvidia/cuda/nvidia-cuda-stream.cpp"
|
|
)
|
|
list(APPEND PROJECT_LIBRARIES
|
|
nvARProxy
|
|
)
|
|
list(APPEND PROJECT_INCLUDE_DIRS
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_FILTER_NVIDIA_FACE_TRACKING
|
|
)
|
|
endif()
|
|
|
|
## Features - SDF Effects Filter
|
|
if(${PropertyPrefix}ENABLE_FILTER_SDF_EFFECTS)
|
|
list(APPEND PROJECT_DATA
|
|
"data/effects/sdf/sdf-producer.effect"
|
|
"data/effects/sdf/sdf-consumer.effect"
|
|
)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/filters/filter-sdf-effects.hpp"
|
|
"source/filters/filter-sdf-effects.cpp"
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_FILTER_SDF_EFFECTS
|
|
)
|
|
endif()
|
|
|
|
## Features - Shader Filter
|
|
if(${PropertyPrefix}ENABLE_FILTER_SHADER)
|
|
set(REQUIRE_SHADER_CODE ON)
|
|
list(APPEND PROJECT_DATA
|
|
"data/examples/shaders/filter/crt-curvature.effect"
|
|
"data/examples/shaders/filter/crt-scanlines.effect"
|
|
"data/examples/shaders/filter/drunk.effect"
|
|
"data/examples/shaders/filter/hexagonize.effect"
|
|
"data/examples/shaders/filter/semiline.effect"
|
|
)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/filters/filter-shader.hpp"
|
|
"source/filters/filter-shader.cpp"
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_FILTER_SHADER
|
|
)
|
|
endif()
|
|
|
|
## Features - Transform Filter
|
|
if(${PropertyPrefix}ENABLE_FILTER_TRANSFORM)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/filters/filter-transform.hpp"
|
|
"source/filters/filter-transform.cpp"
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_FILTER_TRANSFORM
|
|
)
|
|
endif()
|
|
|
|
## Features - Mirror Source
|
|
if(${PropertyPrefix}ENABLE_SOURCE_MIRROR)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/sources/source-mirror.hpp"
|
|
"source/sources/source-mirror.cpp"
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_SOURCE_MIRROR
|
|
)
|
|
endif()
|
|
|
|
## Features - Shader Source
|
|
if(${PropertyPrefix}ENABLE_SOURCE_SHADER)
|
|
set(REQUIRE_SHADER_CODE ON)
|
|
list(APPEND PROJECT_DATA
|
|
"data/examples/shaders/source/shadertoy-3l23Rh.effect"
|
|
"data/examples/shaders/source/shadertoy-3tlXWS.effect"
|
|
"data/examples/shaders/source/shadertoy-MslfRn.effect"
|
|
"data/examples/shaders/source/shadertoy-MslGRn.effect"
|
|
)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/sources/source-shader.hpp"
|
|
"source/sources/source-shader.cpp"
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_SOURCE_SHADER
|
|
)
|
|
endif()
|
|
|
|
## Features - Shader Transition
|
|
if(${PropertyPrefix}ENABLE_TRANSITION_SHADER)
|
|
set(REQUIRE_SHADER_CODE ON)
|
|
list(APPEND PROJECT_DATA
|
|
"data/examples/shaders/transition/color-shift.effect"
|
|
"data/examples/shaders/transition/luma-burn.effect"
|
|
"data/examples/shaders/transition/pixelator.effect"
|
|
"data/examples/shaders/transition/sliding-bars.effect"
|
|
)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/transitions/transition-shader.hpp"
|
|
"source/transitions/transition-shader.cpp"
|
|
)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_TRANSITION_SHADER
|
|
)
|
|
endif()
|
|
|
|
## Features - Performance Profiling
|
|
if(${PropertyPrefix}ENABLE_PROFILING)
|
|
list(APPEND PROJECT_DEFINITIONS
|
|
ENABLE_PROFILING
|
|
)
|
|
endif()
|
|
|
|
## Parts
|
|
if(REQUIRE_SHADER_CODE)
|
|
list(APPEND PROJECT_PRIVATE_SOURCE
|
|
"source/gfx/shader/gfx-shader.hpp"
|
|
"source/gfx/shader/gfx-shader.cpp"
|
|
"source/gfx/shader/gfx-shader-param.hpp"
|
|
"source/gfx/shader/gfx-shader-param.cpp"
|
|
"source/gfx/shader/gfx-shader-param-audio.hpp"
|
|
"source/gfx/shader/gfx-shader-param-audio.cpp"
|
|
"source/gfx/shader/gfx-shader-param-basic.hpp"
|
|
"source/gfx/shader/gfx-shader-param-basic.cpp"
|
|
"source/gfx/shader/gfx-shader-param-matrix.hpp"
|
|
"source/gfx/shader/gfx-shader-param-matrix.cpp"
|
|
"source/gfx/shader/gfx-shader-param-texture.hpp"
|
|
"source/gfx/shader/gfx-shader-param-texture.cpp"
|
|
)
|
|
list(APPEND PROJECT_DATA
|
|
"data/examples/shaders/feature-test.effect"
|
|
)
|
|
endif()
|
|
|
|
# Combine it all
|
|
set(PROJECT_PRIVATE
|
|
${PROJECT_DATA}
|
|
${PROJECT_PRIVATE_GENERATED}
|
|
${PROJECT_PRIVATE_SOURCE}
|
|
${PROJECT_UI}
|
|
${PROJECT_TEMPLATES}
|
|
)
|
|
|
|
source_group(TREE "${PROJECT_SOURCE_DIR}/data" PREFIX "Data Files" FILES ${PROJECT_DATA})
|
|
source_group(TREE "${PROJECT_SOURCE_DIR}/source" PREFIX "Code Files" FILES ${PROJECT_PRIVATE_SOURCE})
|
|
source_group(TREE "${PROJECT_BINARY_DIR}/generated" PREFIX "Generated Files" FILES ${PROJECT_PRIVATE_GENERATED})
|
|
source_group(TREE "${PROJECT_SOURCE_DIR}/templates" PREFIX "Template Files" FILES ${PROJECT_TEMPLATES})
|
|
source_group(TREE "${PROJECT_SOURCE_DIR}/ui" PREFIX "User Interface Files" FILES ${PROJECT_UI})
|
|
|
|
set_source_files_properties(${PROJECT_TEMPLATES} PROPERTIES HEADER_FILE_ONLY TRUE)
|
|
|
|
################################################################################
|
|
# Target
|
|
################################################################################
|
|
|
|
add_library(${PROJECT_NAME} MODULE
|
|
${PROJECT_PUBLIC}
|
|
${PROJECT_PRIVATE}
|
|
)
|
|
|
|
set_target_properties(${PROJECT_NAME}
|
|
PROPERTIES
|
|
PREFIX ""
|
|
IMPORT_PREFIX ""
|
|
)
|
|
|
|
# Include Directories
|
|
target_include_directories(${PROJECT_NAME}
|
|
PUBLIC
|
|
PRIVATE
|
|
"${PROJECT_BINARY_DIR}/generated"
|
|
"${PROJECT_SOURCE_DIR}/source"
|
|
${PROJECT_INCLUDE_DIRS}
|
|
)
|
|
|
|
# Link Libraries
|
|
target_link_libraries(${PROJECT_NAME}
|
|
${PROJECT_LIBRARIES}
|
|
)
|
|
if(WIN32)
|
|
target_link_libraries(${PROJECT_NAME}
|
|
Delayimp.lib
|
|
)
|
|
foreach(DELAYLOAD ${PROJECT_LIBRARIES_DELAYED})
|
|
get_target_property(_lf ${PROJECT_NAME} LINK_FLAGS)
|
|
if (NOT _lf)
|
|
set(_lf "")
|
|
endif()
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "${_lf} /DELAYLOAD:${DELAYLOAD}")
|
|
endforeach()
|
|
endif()
|
|
|
|
# Definitions
|
|
target_compile_definitions(${PROJECT_NAME}
|
|
PRIVATE
|
|
${PROJECT_DEFINITIONS}
|
|
)
|
|
if(WIN32)
|
|
target_compile_definitions(${PROJECT_NAME}
|
|
PRIVATE
|
|
_CRT_SECURE_NO_WARNINGS
|
|
_ENABLE_EXTENDED_ALIGNED_STORAGE
|
|
# windows.h
|
|
WIN32_LEAN_AND_MEAN
|
|
NOGPICAPMASKS
|
|
NOVIRTUALKEYCODES
|
|
#NOWINMESSAGES
|
|
NOWINSTYLES
|
|
NOSYSMETRICS
|
|
NOMENUS
|
|
NOICONS
|
|
NOKEYSTATES
|
|
NOSYSCOMMANDS
|
|
NORASTEROPS
|
|
NOSHOWWINDOW
|
|
NOATOM
|
|
NOCLIPBOARD
|
|
NOCOLOR
|
|
#NOCTLMGR
|
|
NODRAWTEXT
|
|
#NOGDI
|
|
NOKERNEL
|
|
#NOUSER
|
|
#NONLS
|
|
NOMB
|
|
NOMEMMGR
|
|
NOMETAFILE
|
|
NOMINMAX
|
|
#NOMSG
|
|
NOOPENFILE
|
|
NOSCROLL
|
|
NOSERVICE
|
|
NOSOUND
|
|
#NOTEXTMETRIC
|
|
NOWH
|
|
NOWINOFFSETS
|
|
NOCOMM
|
|
NOKANJI
|
|
#NOHELP
|
|
NOPROFILER
|
|
NODEFERWINDOWPOS
|
|
NOMCX
|
|
NOIME
|
|
NOMDI
|
|
NOINOUT
|
|
)
|
|
endif()
|
|
|
|
# C++ Standard and Extensions
|
|
set_target_properties(
|
|
${PROJECT_NAME}
|
|
PROPERTIES
|
|
CXX_STANDARD ${_CXX_STANDARD}
|
|
CXX_STANDARD_REQUIRED ON
|
|
CXX_EXTENSIONS ${_CXX_EXTENSIONS}
|
|
)
|
|
|
|
# File Version
|
|
if(WIN32)
|
|
set_target_properties(
|
|
${PROJECT_NAME}
|
|
PROPERTIES
|
|
VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.${PROJECT_VERSION_TWEAK}
|
|
SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.${PROJECT_VERSION_TWEAK}
|
|
)
|
|
elseif(NOT APPLE)
|
|
set_target_properties(
|
|
${PROJECT_NAME}
|
|
PROPERTIES
|
|
VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.${PROJECT_VERSION_TWEAK}
|
|
SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.${PROJECT_VERSION_TWEAK}
|
|
)
|
|
endif()
|
|
|
|
# UI
|
|
if(HAVE_OBS_FRONTEND)
|
|
target_link_libraries(${PROJECT_NAME}
|
|
obs-frontend-api
|
|
Qt5::Core
|
|
Qt5::Widgets
|
|
)
|
|
set_target_properties(
|
|
${PROJECT_NAME}
|
|
PROPERTIES
|
|
AUTOUIC TRUE
|
|
AUTOUIC_SEARCH_PATHS "${PROJECT_SOURCE_DIR};${PROJECT_SOURCE_DIR}/ui"
|
|
AUTOMOC TRUE
|
|
AUTORCC TRUE
|
|
AUTOGEN_BUILD_DIR "${PROJECT_BINARY_DIR}/generated"
|
|
AUTOGEN_SOURCE_GROUP "Qt Files"
|
|
)
|
|
endif()
|
|
|
|
# Clang Tools
|
|
if(${PropertyPrefix}ENABLE_CLANG AND HAVE_CLANG)
|
|
generate_compile_commands_json(
|
|
TARGETS ${PROJECT_NAME}
|
|
)
|
|
clang_tidy(
|
|
TARGETS ${PROJECT_NAME}
|
|
VERSION 9.0.0
|
|
)
|
|
clang_format(
|
|
TARGETS ${PROJECT_NAME}
|
|
DEPENDENCY
|
|
VERSION 9.0.0
|
|
)
|
|
endif()
|
|
|
|
# Signing
|
|
if(${PropertyPrefix}SIGN_ENABLED)
|
|
# Investigate: https://github.com/Monetra/mstdlib/blob/master/CMakeModules/CodeSign.cmake
|
|
if(MSVC)
|
|
find_program(${PropertyPrefix}SIGN_TOOL
|
|
NAMES "signtool"
|
|
DOC "Path to the signing tool."
|
|
REQUIRED
|
|
)
|
|
|
|
if(${PropertyPrefix}SIGN_TOOL)
|
|
message(STATUS "${PROJECT_NAME}: Signing enabled")
|
|
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
|
COMMAND ${${PropertyPrefix}SIGN_TOOL}
|
|
ARGS sign /p "${${PropertyPrefix}SIGN_PASSWORD}" /f "${${PropertyPrefix}SIGN_KEY}" $<TARGET_FILE:${PROJECT_NAME}>
|
|
)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
################################################################################
|
|
# Installation
|
|
################################################################################
|
|
|
|
if(${PropertyPrefix}OBS_NATIVE)
|
|
install_obs_plugin_with_data(${PROJECT_NAME} data)
|
|
else()
|
|
if(UNIX_LOCAL_STRUCTURE)
|
|
install(
|
|
TARGETS ${PROJECT_NAME}
|
|
RUNTIME DESTINATION "./plugins/${PROJECT_NAME}/bin/${BITS}bit/" COMPONENT Runtime
|
|
LIBRARY DESTINATION "./plugins/${PROJECT_NAME}/bin/${BITS}bit/" COMPONENT Runtime
|
|
)
|
|
|
|
install(
|
|
DIRECTORY "data/"
|
|
DESTINATION "./plugins/${PROJECT_NAME}/data/"
|
|
)
|
|
|
|
add_custom_target(
|
|
PACKAGE_7Z
|
|
${CMAKE_COMMAND} -E tar cfv "${_PACKAGE_FULL_NAME}.7z" --format=7zip --
|
|
"${CMAKE_INSTALL_PREFIX}/plugins/${PROJECT_NAME}"
|
|
WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}"
|
|
)
|
|
add_custom_target(
|
|
PACKAGE_ZIP
|
|
${CMAKE_COMMAND} -E tar cfv "${_PACKAGE_FULL_NAME}.zip" --format=zip --
|
|
"${CMAKE_INSTALL_PREFIX}/plugins/${PROJECT_NAME}"
|
|
WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}"
|
|
)
|
|
else()
|
|
install(
|
|
TARGETS ${PROJECT_NAME}
|
|
RUNTIME DESTINATION "./obs-plugins/${BITS}bit/" COMPONENT Runtime
|
|
LIBRARY DESTINATION "./obs-plugins/${BITS}bit/" COMPONENT Runtime
|
|
)
|
|
if(MSVC)
|
|
install(
|
|
FILES $<TARGET_PDB_FILE:${PROJECT_NAME}>
|
|
DESTINATION "./obs-plugins/${BITS}bit/"
|
|
OPTIONAL
|
|
)
|
|
endif()
|
|
|
|
install(
|
|
DIRECTORY "data/"
|
|
DESTINATION "./data/obs-plugins/${PROJECT_NAME}/"
|
|
)
|
|
|
|
add_custom_target(
|
|
PACKAGE_7Z
|
|
${CMAKE_COMMAND} -E tar cfv "${_PACKAGE_FULL_NAME}.7z" --format=7zip --
|
|
"${CMAKE_INSTALL_PREFIX}/obs-plugins"
|
|
"${CMAKE_INSTALL_PREFIX}/data"
|
|
WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}"
|
|
)
|
|
add_custom_target(
|
|
PACKAGE_ZIP
|
|
${CMAKE_COMMAND} -E tar cfv "${_PACKAGE_FULL_NAME}.zip" --format=zip --
|
|
"${CMAKE_INSTALL_PREFIX}/obs-plugins"
|
|
"${CMAKE_INSTALL_PREFIX}/data"
|
|
WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}"
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
cmake_policy(POP)
|