2018-09-25 23:17:08 +00:00
# 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
2017-06-28 21:21:42 +00:00
2018-04-24 10:31:43 +00:00
# CMake Setup
2019-12-21 16:03:00 +00:00
cmake_minimum_required ( VERSION 3.8.0 )
2017-11-02 23:30:53 +00:00
2018-09-25 23:17:08 +00:00
# Automatic Versioning
2019-10-13 03:42:54 +00:00
set ( VERSION_MAJOR 0 )
2019-12-22 07:31:00 +00:00
set ( VERSION_MINOR 8 )
set ( VERSION_PATCH 0 )
2019-10-13 03:42:54 +00:00
set ( VERSION_TWEAK 0 )
2020-04-08 22:21:45 +00:00
set ( VERSION_SUFFIX "b1" )
2019-10-13 03:42:54 +00:00
set ( PROJECT_COMMIT "N/A" )
if ( EXISTS "${CMAKE_CURRENT_LIST_DIR}/.git" )
set ( GIT_RESULT "" )
set ( GIT_OUTPUT "" )
2019-12-21 16:03:00 +00:00
execute_process (
2019-12-22 07:28:32 +00:00
C O M M A N D g i t r e v - l i s t - - c o u n t - - t o p o - o r d e r $ { V E R S I O N _ M A J O R } . $ { V E R S I O N _ M I N O R } . $ { V E R S I O N _ P A T C H } $ { V E R S I O N _ S U F F I X } . . H E A D
2018-09-25 23:17:08 +00:00
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ C U R R E N T _ L I S T _ D I R }
R E S U L T _ V A R I A B L E G I T _ R E S U L T
O U T P U T _ V A R I A B L E G I T _ O U T P U T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E E R R O R _ S T R I P _ T R A I L I N G _ W H I T E S P A C E E R R O R _ Q U I E T
)
2019-10-13 03:42:54 +00:00
if ( GIT_RESULT EQUAL 0 )
set ( VERSION_TWEAK ${ GIT_OUTPUT } )
endif ( )
2019-12-21 16:03:00 +00:00
execute_process (
2019-12-22 05:26:28 +00:00
C O M M A N D g i t r e v - p a r s e - - s h o r t = 8 H E A D
2018-09-25 23:17:08 +00:00
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ C U R R E N T _ L I S T _ D I R }
R E S U L T _ V A R I A B L E G I T _ R E S U L T
O U T P U T _ V A R I A B L E G I T _ O U T P U T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E E R R O R _ S T R I P _ T R A I L I N G _ W H I T E S P A C E E R R O R _ Q U I E T
)
2019-10-13 03:42:54 +00:00
if ( GIT_RESULT EQUAL 0 )
set ( PROJECT_COMMIT ${ GIT_OUTPUT } )
endif ( )
endif ( )
2018-04-24 10:31:43 +00:00
2020-03-16 19:37:31 +00:00
# Policies
cmake_policy ( PUSH )
2020-04-02 18:22:12 +00:00
if ( ${ CMAKE_VERSION } VERSION_GREATER "3.12.0" )
cmake_policy ( SET CMP0074 NEW )
endif ( )
2020-03-16 19:37:31 +00:00
2018-09-25 23:17:08 +00:00
# Define Project
2019-12-21 16:03:00 +00:00
project (
2019-12-22 05:26:28 +00:00
S t r e a m F X
2018-09-25 23:17:08 +00:00
V E R S I O N $ { V E R S I O N _ M A J O R } . $ { V E R S I O N _ M I N O R } . $ { V E R S I O N _ P A T C H } . $ { V E R S I O N _ T W E A K }
)
2019-12-22 05:26:28 +00:00
set ( PROJECT_FULL_NAME "StreamFX for OBS Studio" )
2020-01-13 00:52:30 +00:00
set ( PROJECT_DESCRIPTION "Better Production Quality, for free." )
2018-12-23 19:49:18 +00:00
set ( PROJECT_AUTHORS "Michael Fabian 'Xaymar' Dirks <info@xaymar.com>" )
2020-01-13 00:52:30 +00:00
set ( PROJECT_COPYRIGHT_YEARS "2018 - 2020" )
2017-06-28 21:21:42 +00:00
2017-11-02 23:30:53 +00:00
################################################################################
2018-12-23 19:49:18 +00:00
# Setup / Bootstrap
2017-11-02 23:30:53 +00:00
################################################################################
2019-12-21 16:03:00 +00:00
# Search Path
2020-01-22 10:12:34 +00:00
set ( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/clang" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" "${CMAKE_CURRENT_SOURCE_DIR}/cmake" )
2019-12-21 16:03:00 +00:00
# CMake Modules
include ( "util" )
2020-04-05 04:13:14 +00:00
if ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Clang/Clang.cmake" )
2020-02-13 04:21:06 +00:00
include ( "Clang" )
set ( HAVE_CLANG ON )
endif ( )
2019-12-21 16:03:00 +00:00
2018-09-25 23:17:08 +00:00
# Detect Build Type
2018-12-23 19:49:18 +00:00
if ( "${CMAKE_SOURCE_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}" )
set ( PropertyPrefix "" )
else ( )
set ( PropertyPrefix "${PROJECT_NAME}_" )
endif ( )
2018-09-25 23:17:08 +00:00
# Detect Architecture
math ( EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}" )
2018-12-23 19:49:18 +00:00
if ( "${BITS}" STREQUAL "32" )
set ( ARCH "x86" )
2019-12-22 05:26:28 +00:00
message ( STATUS "StreamFX no longer supports 32-bit builds, you are on your own if you continue." )
2018-12-23 19:49:18 +00:00
else ( )
set ( ARCH "x64" )
endif ( )
2017-11-02 23:30:53 +00:00
2019-09-04 01:32:18 +00:00
# All Warnings, Extra Warnings, Pedantic
2020-03-16 19:37:31 +00:00
if ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
2019-09-04 01:32:18 +00:00
# using Clang
2019-09-04 01:43:43 +00:00
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" )
2019-09-04 01:32:18 +00:00
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" )
2020-03-16 19:37:31 +00:00
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" )
2019-09-04 01:32:18 +00:00
# GCC: -fpermissive is required as GCC does not allow the same template to be in different namespaces.
2019-09-04 01:43:43 +00:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wpedantic -fpermissive -Wno-long-long -Wno-missing-braces -Wmissing-field-initializers" )
2019-09-04 01:32:18 +00:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wpedantic -fpermissive -Wno-long-long -Wno-missing-braces -Wmissing-field-initializers" )
2020-03-16 19:37:31 +00:00
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" )
2019-09-04 01:32:18 +00:00
# using Intel C++
2020-03-16 19:37:31 +00:00
elseif ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" )
2020-04-02 15:02:01 +00:00
set ( MSVC_EXTRA_FLAGS "/wd4061 /wd4100 /wd4180 /wd4201 /wd4464 /wd4505 /wd4514 /wd4571 /wd4623 /wd4625 /wd4626 /wd4668 /wd4710 /wd4774 /wd4820 /wd5026 /wd5027 /wd5039 /wd5045 /wd26812" )
2019-09-04 01:32:18 +00:00
# Force to always compile with W4
if ( CMAKE_CXX_FLAGS MATCHES "/W[0-4]" )
2019-09-04 01:43:43 +00:00
string ( REGEX REPLACE "/W[0-4]" "/Wall" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" )
2019-09-04 01:32:18 +00:00
else ( )
2019-09-04 01:43:43 +00:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wall" )
2019-09-04 01:32:18 +00:00
endif ( )
2019-09-04 01:47:53 +00:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MSVC_EXTRA_FLAGS}" )
2019-09-04 01:43:43 +00:00
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 ( )
2019-09-04 01:47:53 +00:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MSVC_EXTRA_FLAGS}" )
2020-02-13 09:11:33 +00:00
2020-02-13 09:33:31 +00:00
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 (
C M A K E _ C X X _ F L A G S _ S P E E D
C M A K E _ C _ F L A G S _ S P E E D
C M A K E _ E X E _ L I N K E R _ F L A G S _ S P E E D
C M A K E _ S H A R E D _ L I N K E R _ F L A G S _ S P E E D
C M A K E _ M O D U L E _ L I N K E R _ F L A G S _ S P E E D
)
2020-02-13 09:11:33 +00:00
2020-02-13 09:33:31 +00:00
if ( CMAKE_CONFIGURATION_TYPES )
list ( APPEND CMAKE_CONFIGURATION_TYPES Speed )
list ( REMOVE_DUPLICATES CMAKE_CONFIGURATION_TYPES )
CacheSet ( CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" )
endif ( )
2020-02-13 09:11:33 +00:00
endif ( )
2019-09-04 01:32:18 +00:00
endif ( )
# C++ Standard and Extensions
## Use C++17 and no non-standard extensions.
2019-10-13 03:42:54 +00:00
set ( _CXX_STANDARD 17 )
set ( _CXX_EXTENSIONS OFF )
2019-09-04 01:32:18 +00:00
2018-12-23 19:49:18 +00:00
################################################################################
2019-12-22 05:26:28 +00:00
# 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 )
2020-01-13 00:52:30 +00:00
set ( ${ PropertyPrefix } OBS_DOWNLOAD FALSE CACHE BOOL "Use downloaded obs-studio build" )
2019-12-22 05:26:28 +00:00
mark_as_advanced ( FORCE OBS_NATIVE OBS_PACKAGE OBS_REFERENCE OBS_DOWNLOAD )
2020-01-13 00:52:30 +00:00
# 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 )
2020-04-05 08:33:35 +00:00
if ( TARGET obs-frontend-api )
2020-04-05 09:09:21 +00:00
set ( HAVE_OBS_FRONTEND TRUE )
2020-04-05 08:33:35 +00:00
endif ( )
2020-01-13 00:52:30 +00:00
else ( )
message ( STATUS "${PROJECT_NAME}: Using packaged or remote obs-studio." )
CacheSet ( ${ PropertyPrefix } OBS_NATIVE FALSE )
2019-12-22 05:26:28 +00:00
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." )
2020-01-13 00:52:30 +00:00
2020-04-02 19:47:41 +00:00
if ( UNIX )
set ( UNIX_LOCAL_STRUCTURE TRUE CACHE BOOL "Package for a local linux install." )
endif ( )
2020-04-02 18:22:12 +00:00
if ( NOT ${ PropertyPrefix } OBS_DOWNLOAD )
2020-01-13 00:52:30 +00:00
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 ( )
2019-12-22 05:26:28 +00:00
endif ( )
2020-03-16 19:37:31 +00:00
# Features
2020-04-02 18:22:12 +00:00
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 )
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 ( )
set ( ${ PropertyPrefix } ENABLE_ENCODER_FFMPEG ${ ENABLE_ENCODER_FFMPEG } CACHE BOOL "Enable FFmpeg Encoder" )
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" )
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" )
set ( ${ PropertyPrefix } ENABLE_TRANSITION_SHADER ${ ENABLE_TRANSITION_SHADER } CACHE BOOL "Enable Shader Transition" )
2020-03-16 19:37:31 +00:00
2019-12-22 05:26:28 +00:00
################################################################################
# CMake / Compiler Dependencies
2018-12-23 19:49:18 +00:00
################################################################################
2018-09-25 23:17:08 +00:00
# Configure Version Header
2018-12-23 19:49:18 +00:00
configure_file (
2020-03-16 19:37:31 +00:00
" c m a k e / v e r s i o n . h p p . i n "
2018-12-23 19:49:18 +00:00
" $ { P R O J E C T _ B I N A R Y _ D I R } / s o u r c e / v e r s i o n . h p p "
)
configure_file (
2020-03-16 19:37:31 +00:00
" c m a k e / m o d u l e . c p p . i n "
2018-12-23 19:49:18 +00:00
" $ { P R O J E C T _ B I N A R Y _ D I R } / s o u r c e / m o d u l e . c p p "
)
2019-12-22 05:26:28 +00:00
# Packaging
if ( "${CMAKE_PACKAGE_SUFFIX_OVERRIDE}" STREQUAL "" )
2019-12-22 07:28:32 +00:00
set ( _PACKAGE_SUFFIX_OVERRIDE "${PROJECT_VERSION}${VERSION_SUFFIX}-${PROJECT_COMMIT}" )
2019-12-22 05:26:28 +00:00
else ( )
set ( _PACKAGE_SUFFIX_OVERRIDE "${CMAKE_PACKAGE_SUFFIX_OVERRIDE}" )
endif ( )
set ( _PACKAGE_FULL_NAME "${CMAKE_PACKAGE_PREFIX}/${CMAKE_PACKAGE_NAME}-${_PACKAGE_SUFFIX_OVERRIDE}" )
2018-12-23 19:49:18 +00:00
# Windows
if ( WIN32 )
2019-02-02 05:33:28 +00:00
## Installer (InnoSetup)
2019-12-22 05:26:28 +00:00
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 )
2019-10-13 03:42:54 +00:00
configure_file (
2020-03-16 19:37:31 +00:00
" c m a k e / i n s t a l l e r . i s s . i n "
2019-02-02 05:33:28 +00:00
" $ { P R O J E C T _ B I N A R Y _ D I R } / i n s t a l l e r . i s s "
)
# Windows Specific Resource Definition
2018-12-23 19:49:18 +00:00
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 "" )
2018-09-25 23:22:54 +00:00
2018-12-23 19:49:18 +00:00
configure_file (
2020-03-16 19:37:31 +00:00
" c m a k e / v e r s i o n . r c . i n "
2018-09-25 23:17:08 +00:00
" $ { P R O J E C T _ B I N A R Y _ D I R } / c m a k e / v e r s i o n . r c "
@ O N L Y
)
2018-12-23 19:49:18 +00:00
endif ( )
2018-09-25 23:17:08 +00:00
2020-01-13 00:52:30 +00:00
# Download OBS Studio and OBS Dependencies
2018-12-23 19:49:18 +00:00
if ( ${ PropertyPrefix } OBS_DOWNLOAD )
2019-12-21 16:03:00 +00:00
include ( "DownloadProject" )
2020-01-13 00:52:30 +00:00
2020-04-05 08:33:35 +00:00
set ( OBS_DOWNLOAD_VERSION "25.0.3-fe-ci" )
2020-04-02 18:22:12 +00:00
if ( WIN32 )
# Windows
2020-04-05 08:33:35 +00:00
set ( OBS_DEPENDENCIES_VERSION "25.0.0" )
set ( OBS_QT_VERSION "5.10.1" )
2020-04-02 18:22:12 +00:00
download_project (
P R O J l i b o b s
2020-04-05 08:33:35 +00:00
U R L h t t p s : / / g i t h u b . c o m / X a y m a r / o b s - s t u d i o / r e l e a s e s / d o w n l o a d / $ { O B S _ D O W N L O A D _ V E R S I O N } / o b s - s t u d i o - $ { A R C H } - 0 . 0 . 0 . 0 - v s 2 0 1 9 . 7 z
2020-04-02 18:22:12 +00:00
U P D A T E _ D I S C O N N E C T E D 1
)
2020-04-05 08:33:35 +00:00
2020-04-02 18:22:12 +00:00
download_project (
P R O J o b s d e p s
2020-04-05 08:33:35 +00:00
U R L h t t p s : / / c d n . x a y m a r . c o m / o b s / d e p e n d e n c i e s _ $ { O B S _ D E P E N D E N C I E S _ V E R S I O N } . 7 z
2020-04-02 18:22:12 +00:00
U P D A T E _ D I S C O N N E C T E D 1
)
elseif ( UNIX )
# Unix, Linux
download_project (
P R O J l i b o b s
2020-04-05 08:33:35 +00:00
U R L h t t p s : / / g i t h u b . c o m / X a y m a r / o b s - s t u d i o / r e l e a s e s / d o w n l o a d / $ { O B S _ D O W N L O A D _ V E R S I O N } / o b s - s t u d i o - $ { A R C H } - 0 . 0 . 0 . 0 - u b u n t u 1 8 0 4 . 7 z
2020-04-02 18:22:12 +00:00
U P D A T E _ D I S C O N N E C T E D 1
)
2020-04-05 08:33:35 +00:00
2020-04-02 18:22:12 +00:00
# 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 ( )
2018-12-23 19:49:18 +00:00
endif ( )
2020-01-13 00:52:30 +00:00
# Load OBS Studio & Dependencies
if ( ${ PropertyPrefix } OBS_PACKAGE )
2018-12-23 19:49:18 +00:00
include ( "${OBS_STUDIO_DIR}/cmake/LibObs/LibObsConfig.cmake" )
2020-04-05 08:33:35 +00:00
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 ( )
2018-12-23 19:49:18 +00:00
elseif ( ${ PropertyPrefix } OBS_REFERENCE )
set ( obsPath "${OBS_STUDIO_DIR}" )
2019-01-14 17:58:56 +00:00
include ( "${OBS_STUDIO_DIR}/cmake/external/FindLibobs.cmake" )
2018-12-23 19:49:18 +00:00
elseif ( ${ PropertyPrefix } OBS_DOWNLOAD )
2020-04-05 08:33:35 +00:00
set ( _INCLUDE_PREFIX "" )
2020-04-02 18:22:12 +00:00
if ( WIN32 )
2020-04-05 08:33:35 +00:00
set ( _INCLUDE_PREFIX "${libobs_SOURCE_DIR}/cmake" )
2020-04-02 18:22:12 +00:00
elseif ( UNIX )
2020-04-05 08:33:35 +00:00
set ( _INCLUDE_PREFIX "${libobs_SOURCE_DIR}/usr/local/lib/cmake" )
2020-04-02 18:22:12 +00:00
else ( )
endif ( )
2020-04-05 08:33:35 +00:00
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 (
P R O J q t
U R L h t t p s : / / c d n . x a y m a r . c o m / o b s / q t _ $ { O B S _ Q T _ V E R S I O N } . 7 z
U P D A T E _ D I S C O N N E C T E D 1
)
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 ( )
# QT5
if ( HAVE_OBS_FRONTEND )
find_package ( Qt5 COMPONENTS Core Widgets REQUIRED )
2018-12-23 19:49:18 +00:00
endif ( )
2018-04-24 10:31:43 +00:00
2017-06-28 21:21:42 +00:00
################################################################################
# Code
################################################################################
2020-03-16 19:37:31 +00:00
set ( PROJECT_DATA_LOCALE )
set ( PROJECT_DATA_EFFECTS )
set ( PROJECT_DATA_SHADERS )
set ( PROJECT_LIBRARIES )
set ( PROJECT_LIBRARIES_DELAYED )
2020-04-05 08:33:35 +00:00
set ( PROJECT_INCLUDE_DIRS )
2020-03-16 19:37:31 +00:00
set ( PROJECT_TEMPLATES )
set ( PROJECT_PUBLIC )
set ( PROJECT_PRIVATE_GENERATED )
set ( PROJECT_PRIVATE_SOURCE )
2020-04-05 08:33:35 +00:00
set ( PROJECT_UI )
2020-03-16 19:37:31 +00:00
set ( PROJECT_DEFINES )
## OBS Studio
if ( ${ PropertyPrefix } OBS_NATIVE )
list ( APPEND PROJECT_LIBRARIES
l i b o b s
)
elseif ( ${ PropertyPrefix } OBS_REFERENCE )
list ( APPEND PROJECT_INCLUDE_DIRS
" $ { O B S _ S T U D I O _ D I R } / l i b o b s "
)
list ( APPEND PROJECT_LIBRARIES
" $ { L I B O B S _ L I B } "
)
elseif ( ${ PropertyPrefix } OBS_PACKAGE )
list ( APPEND PROJECT_INCLUDE_DIRS
" $ { O B S _ S T U D I O _ D I R } / i n c l u d e "
)
list ( APPEND PROJECT_LIBRARIES
l i b o b s
)
elseif ( ${ PropertyPrefix } OBS_DOWNLOAD )
list ( APPEND PROJECT_LIBRARIES
l i b o b s
)
endif ( )
2019-02-11 02:54:16 +00:00
2020-03-16 19:37:31 +00:00
## Data & Source
list ( APPEND PROJECT_DATA
" d a t a / l o c a l e / e n - U S . i n i "
" d a t a / e f f e c t s / m i p g e n . e f f e c t "
" d a t a / e f f e c t s / p a c k - u n p a c k . e f f e c t "
2018-09-25 23:17:08 +00:00
)
2020-03-16 19:37:31 +00:00
list ( APPEND PROJECT_TEMPLATES
" c m a k e / v e r s i o n . h p p . i n "
" c m a k e / m o d u l e . c p p . i n "
2019-02-11 05:26:06 +00:00
)
if ( WIN32 )
list ( APPEND PROJECT_TEMPLATES
2020-03-16 19:37:31 +00:00
" c m a k e / i n s t a l l e r . i s s . i n "
" c m a k e / v e r s i o n . r c . i n "
2019-02-11 05:26:06 +00:00
)
endif ( )
2020-03-16 19:37:31 +00:00
list ( APPEND PROJECT_PRIVATE_SOURCE
# Plugin
2020-04-02 15:02:01 +00:00
" s o u r c e / c o m m o n . h p p "
2020-03-16 19:37:31 +00:00
" s o u r c e / p l u g i n . h p p "
" s o u r c e / p l u g i n . c p p "
" s o u r c e / s t r i n g s . h p p "
" s o u r c e / u t i l i t y . h p p "
" s o u r c e / u t i l i t y . c p p "
" s o u r c e / u t i l - e v e n t . h p p "
2020-03-26 13:57:24 +00:00
" s o u r c e / u t i l - p r o f i l e r . c p p "
" s o u r c e / u t i l - p r o f i l e r . h p p "
2020-03-16 19:37:31 +00:00
" s o u r c e / u t i l - t h r e a d p o o l . c p p "
" s o u r c e / u t i l - t h r e a d p o o l . h p p "
2019-02-11 05:26:06 +00:00
2020-03-16 19:37:31 +00:00
# Graphics
" s o u r c e / g f x / g f x - s o u r c e - t e x t u r e . h p p "
" s o u r c e / g f x / g f x - s o u r c e - t e x t u r e . c p p "
# OBS
" s o u r c e / o b s / g s / g s - h e l p e r . h p p "
" s o u r c e / o b s / g s / g s - h e l p e r . c p p "
" s o u r c e / o b s / g s / g s - e f f e c t . h p p "
" s o u r c e / o b s / g s / g s - e f f e c t . c p p "
" s o u r c e / o b s / g s / g s - e f f e c t - p a r a m e t e r . h p p "
" s o u r c e / o b s / g s / g s - e f f e c t - p a r a m e t e r . c p p "
" s o u r c e / o b s / g s / g s - e f f e c t - p a s s . h p p "
" s o u r c e / o b s / g s / g s - e f f e c t - p a s s . c p p "
" s o u r c e / o b s / g s / g s - e f f e c t - t e c h n i q u e . h p p "
" s o u r c e / o b s / g s / g s - e f f e c t - t e c h n i q u e . c p p "
" s o u r c e / o b s / g s / g s - i n d e x b u f f e r . h p p "
" s o u r c e / o b s / g s / g s - i n d e x b u f f e r . c p p "
" s o u r c e / o b s / g s / g s - l i m i t s . h p p "
" s o u r c e / o b s / g s / g s - m i p m a p p e r . h p p "
" s o u r c e / o b s / g s / g s - m i p m a p p e r . c p p "
" s o u r c e / o b s / g s / g s - r e n d e r t a r g e t . h p p "
" s o u r c e / o b s / g s / g s - r e n d e r t a r g e t . c p p "
" s o u r c e / o b s / g s / g s - s a m p l e r . h p p "
" s o u r c e / o b s / g s / g s - s a m p l e r . c p p "
" s o u r c e / o b s / g s / g s - t e x t u r e . h p p "
" s o u r c e / o b s / g s / g s - t e x t u r e . c p p "
" s o u r c e / o b s / g s / g s - v e r t e x . h p p "
" s o u r c e / o b s / g s / g s - v e r t e x . c p p "
" s o u r c e / o b s / g s / g s - v e r t e x b u f f e r . h p p "
" s o u r c e / o b s / g s / g s - v e r t e x b u f f e r . c p p "
" s o u r c e / o b s / o b s - s i g n a l - h a n d l e r . h p p "
" s o u r c e / o b s / o b s - s i g n a l - h a n d l e r . c p p "
" s o u r c e / o b s / o b s - s o u r c e . h p p "
" s o u r c e / o b s / o b s - s o u r c e . c p p "
" s o u r c e / o b s / o b s - s o u r c e - f a c t o r y . h p p "
" s o u r c e / o b s / o b s - s o u r c e - f a c t o r y . c p p "
" s o u r c e / o b s / o b s - s o u r c e - t r a c k e r . h p p "
" s o u r c e / o b s / o b s - s o u r c e - t r a c k e r . c p p "
" s o u r c e / o b s / o b s - t o o l s . h p p "
" s o u r c e / o b s / o b s - t o o l s . c p p "
2018-09-25 23:17:08 +00:00
)
2020-03-16 19:37:31 +00:00
list ( APPEND PROJECT_PRIVATE_GENERATED
2018-12-23 19:49:18 +00:00
" $ { P R O J E C T _ B I N A R Y _ D I R } / s o u r c e / m o d u l e . c p p "
" $ { P R O J E C T _ B I N A R Y _ D I R } / s o u r c e / v e r s i o n . h p p "
2019-02-11 02:54:16 +00:00
)
2019-04-02 02:37:37 +00:00
2020-04-05 08:33:35 +00:00
## OBS Studio - Frontend/Qt
if ( HAVE_OBS_FRONTEND )
list ( APPEND PROJECT_UI
)
list ( APPEND PROJECT_PRIVATE_SOURCE
)
list ( APPEND PROJECT_INCLUDE_DIRS
" u i "
)
list ( APPEND PROJECT_DEFINITIONS
E N A B L E _ F R O N T E N D
)
endif ( )
2020-03-16 19:37:31 +00:00
## Feature - FFmpeg Encoder
if ( ${ PropertyPrefix } ENABLE_ENCODER_FFMPEG )
if ( NOT ${ PropertyPrefix } OBS_NATIVE )
find_path (
F F m p e g P a t h " l i b a v c o d e c / a v c o d e c . h "
H I N T S
$ { O B S _ D E P E N D E N C I E S _ D I R }
$ { o b s d e p s _ S O U R C E _ D I R }
$ { D e p s P a t h }
$ { D e p s P a t h 3 2 }
$ { D e p s P a t h 6 4 }
P A T H S
/ u s r / i n c l u d e
/ u s r / l o c a l / i n c l u d e
/ o p t / l o c a l / i n c l u d e
/ s w / i n c l u d e
P A T H _ S U F F I X E S
w i n $ { B I T S }
w i n $ { B I T S } / b i n
w i n $ { B I T S } / i n c l u d e
w i n $ { A R C H }
w i n $ { A R C H } / b i n
w i n $ { A R C H } / i n c l u d e
b i n
i n c l u d e
)
endif ( )
find_package ( FFmpeg REQUIRED COMPONENTS avutil avcodec swscale )
list ( APPEND PROJECT_PRIVATE_SOURCE
# FFmpeg
" s o u r c e / f f m p e g / a v f r a m e - q u e u e . c p p "
" s o u r c e / f f m p e g / a v f r a m e - q u e u e . h p p "
" s o u r c e / f f m p e g / s w s c a l e . h p p "
" s o u r c e / f f m p e g / s w s c a l e . c p p "
" s o u r c e / f f m p e g / t o o l s . h p p "
" s o u r c e / f f m p e g / t o o l s . c p p "
" s o u r c e / f f m p e g / h w a p i / b a s e . h p p "
" s o u r c e / f f m p e g / h w a p i / b a s e . c p p "
" s o u r c e / f f m p e g / h w a p i / d 3 d 1 1 . h p p "
" s o u r c e / f f m p e g / h w a p i / d 3 d 1 1 . c p p "
2020-01-13 00:52:30 +00:00
2020-03-16 19:37:31 +00:00
# Encoders
" s o u r c e / e n c o d e r s / f f m p e g - e n c o d e r . h p p "
" s o u r c e / e n c o d e r s / f f m p e g - e n c o d e r . c p p "
# Encoders/Codecs
" s o u r c e / e n c o d e r s / c o d e c s / h e v c . h p p "
" s o u r c e / e n c o d e r s / c o d e c s / h e v c . c p p "
" s o u r c e / e n c o d e r s / c o d e c s / h 2 6 4 . h p p "
" s o u r c e / e n c o d e r s / c o d e c s / h 2 6 4 . c p p "
" s o u r c e / e n c o d e r s / c o d e c s / p r o r e s . h p p "
" s o u r c e / e n c o d e r s / c o d e c s / p r o r e s . c p p "
# Encoders/Handlers
" s o u r c e / e n c o d e r s / h a n d l e r s / h a n d l e r . h p p "
" s o u r c e / e n c o d e r s / h a n d l e r s / h a n d l e r . c p p "
" s o u r c e / e n c o d e r s / h a n d l e r s / d e b u g _ h a n d l e r . h p p "
" s o u r c e / e n c o d e r s / h a n d l e r s / d e b u g _ h a n d l e r . c p p "
" s o u r c e / e n c o d e r s / h a n d l e r s / p r o r e s _ a w _ h a n d l e r . h p p "
" s o u r c e / e n c o d e r s / h a n d l e r s / p r o r e s _ a w _ h a n d l e r . c p p "
" s o u r c e / e n c o d e r s / h a n d l e r s / n v e n c _ s h a r e d . h p p "
" s o u r c e / e n c o d e r s / h a n d l e r s / n v e n c _ s h a r e d . c p p "
" s o u r c e / e n c o d e r s / h a n d l e r s / n v e n c _ h 2 6 4 _ h a n d l e r . h p p "
" s o u r c e / e n c o d e r s / h a n d l e r s / n v e n c _ h 2 6 4 _ h a n d l e r . c p p "
" s o u r c e / e n c o d e r s / h a n d l e r s / n v e n c _ h e v c _ h a n d l e r . h p p "
" s o u r c e / e n c o d e r s / h a n d l e r s / n v e n c _ h e v c _ h a n d l e r . c p p "
)
list ( APPEND PROJECT_LIBRARIES
$ { F F M P E G _ L I B R A R I E S }
)
list ( APPEND PROJECT_INCLUDE_DIRS
$ { F F M P E G _ I N C L U D E _ D I R S }
)
list ( APPEND PROJECT_DEFINITIONS
E N A B L E _ E N C O D E R _ F F M P E G
)
endif ( )
## Feature - Blur Filter
if ( ${ PropertyPrefix } ENABLE_FILTER_BLUR )
list ( APPEND PROJECT_DATA
" d a t a / e f f e c t s / m a s k . e f f e c t "
" d a t a / e f f e c t s / b l u r / b o x . e f f e c t "
" d a t a / e f f e c t s / b l u r / b o x - l i n e a r . e f f e c t "
" d a t a / e f f e c t s / b l u r / d u a l - f i l t e r i n g . e f f e c t "
" d a t a / e f f e c t s / b l u r / g a u s s i a n . e f f e c t "
" d a t a / e f f e c t s / b l u r / g a u s s i a n - l i n e a r . e f f e c t "
)
list ( APPEND PROJECT_PRIVATE_SOURCE
" s o u r c e / g f x / b l u r / g f x - b l u r - b a s e . h p p "
" s o u r c e / g f x / b l u r / g f x - b l u r - b a s e . c p p "
" s o u r c e / g f x / b l u r / g f x - b l u r - b o x . h p p "
" s o u r c e / g f x / b l u r / g f x - b l u r - b o x . c p p "
" s o u r c e / g f x / b l u r / g f x - b l u r - b o x - l i n e a r . h p p "
" s o u r c e / g f x / b l u r / g f x - b l u r - b o x - l i n e a r . c p p "
" s o u r c e / g f x / b l u r / g f x - b l u r - d u a l - f i l t e r i n g . h p p "
" s o u r c e / g f x / b l u r / g f x - b l u r - d u a l - f i l t e r i n g . c p p "
" s o u r c e / g f x / b l u r / g f x - b l u r - g a u s s i a n . h p p "
" s o u r c e / g f x / b l u r / g f x - b l u r - g a u s s i a n . c p p "
" s o u r c e / g f x / b l u r / g f x - b l u r - g a u s s i a n - l i n e a r . h p p "
" s o u r c e / g f x / b l u r / g f x - b l u r - g a u s s i a n - l i n e a r . c p p "
" s o u r c e / f i l t e r s / f i l t e r - b l u r . h p p "
" s o u r c e / f i l t e r s / f i l t e r - b l u r . c p p "
)
list ( APPEND PROJECT_DEFINITIONS
E N A B L E _ F I L T E R _ B L U R
)
endif ( )
## Features - Color Grade Filter
if ( ${ PropertyPrefix } ENABLE_FILTER_COLOR_GRADE )
list ( APPEND PROJECT_DATA
" d a t a / e f f e c t s / c o l o r - g r a d e . e f f e c t "
)
list ( APPEND PROJECT_PRIVATE_SOURCE
" s o u r c e / f i l t e r s / f i l t e r - c o l o r - g r a d e . h p p "
" s o u r c e / f i l t e r s / f i l t e r - c o l o r - g r a d e . c p p "
)
list ( APPEND PROJECT_DEFINITIONS
E N A B L E _ F I L T E R _ C O L O R _ G R A D E
)
endif ( )
## Features - Displacement Filter
if ( ${ PropertyPrefix } ENABLE_FILTER_DISPLACEMENT )
list ( APPEND PROJECT_DATA
" d a t a / e f f e c t s / d i s p l a c e . e f f e c t "
)
list ( APPEND PROJECT_PRIVATE_SOURCE
" s o u r c e / f i l t e r s / f i l t e r - d i s p l a c e m e n t . h p p "
" s o u r c e / f i l t e r s / f i l t e r - d i s p l a c e m e n t . c p p "
)
list ( APPEND PROJECT_DEFINITIONS
E N A B L E _ F I L T E R _ D I S P L A C E M E N T
)
endif ( )
## Features - Dynamic Mask Filter
if ( ${ PropertyPrefix } ENABLE_FILTER_DYNAMIC_MASK )
list ( APPEND PROJECT_DATA
" d a t a / e f f e c t s / c h a n n e l - m a s k . e f f e c t "
)
list ( APPEND PROJECT_PRIVATE_SOURCE
" s o u r c e / f i l t e r s / f i l t e r - d y n a m i c - m a s k . h p p "
" s o u r c e / f i l t e r s / f i l t e r - d y n a m i c - m a s k . c p p "
)
list ( APPEND PROJECT_DEFINITIONS
E N A B L E _ F I L T E R _ D Y N A M I C _ M A S K
)
endif ( )
2020-03-25 17:31:22 +00:00
## 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
" s o u r c e / f i l t e r s / f i l t e r - n v - f a c e - t r a c k i n g . h p p "
" s o u r c e / f i l t e r s / f i l t e r - n v - f a c e - t r a c k i n g . c p p "
" s o u r c e / n v i d i a / a r / n v i d i a - a r . h p p "
" s o u r c e / n v i d i a / a r / n v i d i a - a r . c p p "
" s o u r c e / n v i d i a / a r / n v i d i a - a r - f e a t u r e . h p p "
" s o u r c e / n v i d i a / a r / n v i d i a - a r - f e a t u r e . c p p "
" s o u r c e / n v i d i a / c u d a / n v i d i a - c u d a . h p p "
" s o u r c e / n v i d i a / c u d a / n v i d i a - c u d a . c p p "
" s o u r c e / n v i d i a / c u d a / n v i d i a - c u d a - c o n t e x t . h p p "
" s o u r c e / n v i d i a / c u d a / n v i d i a - c u d a - c o n t e x t . c p p "
" s o u r c e / n v i d i a / c u d a / n v i d i a - c u d a - c o n t e x t - s t a c k . h p p "
" s o u r c e / n v i d i a / c u d a / n v i d i a - c u d a - c o n t e x t - s t a c k . c p p "
" s o u r c e / n v i d i a / c u d a / n v i d i a - c u d a - g s - t e x t u r e . h p p "
" s o u r c e / n v i d i a / c u d a / n v i d i a - c u d a - g s - t e x t u r e . c p p "
" s o u r c e / n v i d i a / c u d a / n v i d i a - c u d a - m e m o r y . h p p "
" s o u r c e / n v i d i a / c u d a / n v i d i a - c u d a - m e m o r y . c p p "
" s o u r c e / n v i d i a / c u d a / n v i d i a - c u d a - s t r e a m . h p p "
" s o u r c e / n v i d i a / c u d a / n v i d i a - c u d a - s t r e a m . c p p "
)
list ( APPEND PROJECT_LIBRARIES
n v A R P r o x y
)
list ( APPEND PROJECT_INCLUDE_DIRS
)
list ( APPEND PROJECT_DEFINITIONS
E N A B L E _ F I L T E R _ N V I D I A _ F A C E _ T R A C K I N G
)
endif ( )
2020-03-16 19:37:31 +00:00
## Features - SDF Effects Filter
if ( ${ PropertyPrefix } ENABLE_FILTER_SDF_EFFECTS )
list ( APPEND PROJECT_DATA
" d a t a / e f f e c t s / s d f / s d f - p r o d u c e r . e f f e c t "
" d a t a / e f f e c t s / s d f / s d f - c o n s u m e r . e f f e c t "
)
list ( APPEND PROJECT_PRIVATE_SOURCE
" s o u r c e / f i l t e r s / f i l t e r - s d f - e f f e c t s . h p p "
" s o u r c e / f i l t e r s / f i l t e r - s d f - e f f e c t s . c p p "
)
list ( APPEND PROJECT_DEFINITIONS
E N A B L E _ F I L T E R _ S D F _ E F F E C T S
)
endif ( )
## Features - Shader Filter
if ( ${ PropertyPrefix } ENABLE_FILTER_SHADER )
set ( REQUIRE_SHADER_CODE ON )
list ( APPEND PROJECT_DATA
" d a t a / e x a m p l e s / s h a d e r s / f i l t e r / d r u n k . e f f e c t "
" d a t a / e x a m p l e s / s h a d e r s / f i l t e r / e x a m p l e . e f f e c t "
" d a t a / e x a m p l e s / s h a d e r s / f i l t e r / e x a m p l e _ d i s p l a c e _ b y _ t e x t u r e . e f f e c t "
)
list ( APPEND PROJECT_PRIVATE_SOURCE
2020-03-28 17:54:56 +00:00
" s o u r c e / f i l t e r s / f i l t e r - s h a d e r . h p p "
" s o u r c e / f i l t e r s / f i l t e r - s h a d e r . c p p "
2020-03-16 19:37:31 +00:00
)
list ( APPEND PROJECT_DEFINITIONS
E N A B L E _ F I L T E R _ S H A D E R
)
endif ( )
## Features - Transform Filter
if ( ${ PropertyPrefix } ENABLE_FILTER_TRANSFORM )
list ( APPEND PROJECT_PRIVATE_SOURCE
" s o u r c e / f i l t e r s / f i l t e r - t r a n s f o r m . h p p "
" s o u r c e / f i l t e r s / f i l t e r - t r a n s f o r m . c p p "
)
list ( APPEND PROJECT_DEFINITIONS
E N A B L E _ F I L T E R _ T R A N S F O R M
)
endif ( )
## Features - Mirror Source
if ( ${ PropertyPrefix } ENABLE_SOURCE_MIRROR )
list ( APPEND PROJECT_PRIVATE_SOURCE
" s o u r c e / s o u r c e s / s o u r c e - m i r r o r . h p p "
" s o u r c e / s o u r c e s / s o u r c e - m i r r o r . c p p "
)
list ( APPEND PROJECT_DEFINITIONS
E N A B L E _ S O U R C E _ M I R R O R
)
endif ( )
## Features - Shader Source
if ( ${ PropertyPrefix } ENABLE_SOURCE_SHADER )
set ( REQUIRE_SHADER_CODE ON )
list ( APPEND PROJECT_DATA
" d a t a / e x a m p l e s / s h a d e r s / s o u r c e / e x a m p l e . e f f e c t "
)
list ( APPEND PROJECT_PRIVATE_SOURCE
" s o u r c e / s o u r c e s / s o u r c e - s h a d e r . h p p "
" s o u r c e / s o u r c e s / s o u r c e - s h a d e r . c p p "
)
list ( APPEND PROJECT_DEFINITIONS
E N A B L E _ S O U R C E _ S H A D E R
)
endif ( )
## Features - Shader Transition
if ( ${ PropertyPrefix } ENABLE_TRANSITION_SHADER )
set ( REQUIRE_SHADER_CODE ON )
list ( APPEND PROJECT_DATA
)
list ( APPEND PROJECT_PRIVATE_SOURCE
2020-03-28 17:38:45 +00:00
" s o u r c e / t r a n s i t i o n s / t r a n s i t i o n - s h a d e r . h p p "
" s o u r c e / t r a n s i t i o n s / t r a n s i t i o n - s h a d e r . c p p "
2020-03-16 19:37:31 +00:00
)
list ( APPEND PROJECT_DEFINITIONS
E N A B L E _ T R A N S I T I O N _ S H A D E R
)
endif ( )
## Parts
if ( REQUIRE_SHADER_CODE )
list ( APPEND PROJECT_PRIVATE_SOURCE
" s o u r c e / g f x / s h a d e r / g f x - s h a d e r . h p p "
" s o u r c e / g f x / s h a d e r / g f x - s h a d e r . c p p "
" s o u r c e / g f x / s h a d e r / g f x - s h a d e r - p a r a m . h p p "
" s o u r c e / g f x / s h a d e r / g f x - s h a d e r - p a r a m . c p p "
" s o u r c e / g f x / s h a d e r / g f x - s h a d e r - p a r a m - a u d i o . h p p "
" s o u r c e / g f x / s h a d e r / g f x - s h a d e r - p a r a m - a u d i o . c p p "
" s o u r c e / g f x / s h a d e r / g f x - s h a d e r - p a r a m - b a s i c . h p p "
" s o u r c e / g f x / s h a d e r / g f x - s h a d e r - p a r a m - b a s i c . c p p "
" s o u r c e / g f x / s h a d e r / g f x - s h a d e r - p a r a m - m a t r i x . h p p "
" s o u r c e / g f x / s h a d e r / g f x - s h a d e r - p a r a m - m a t r i x . c p p "
" s o u r c e / g f x / s h a d e r / g f x - s h a d e r - p a r a m - t e x t u r e . h p p "
" s o u r c e / g f x / s h a d e r / g f x - s h a d e r - p a r a m - t e x t u r e . c p p "
)
endif ( )
2020-01-13 00:52:30 +00:00
2020-04-05 08:33:35 +00:00
# Combine it all
2019-02-11 02:54:16 +00:00
set ( PROJECT_PRIVATE
$ { P R O J E C T _ D A T A }
$ { P R O J E C T _ P R I V A T E _ G E N E R A T E D }
$ { P R O J E C T _ P R I V A T E _ S O U R C E }
2020-04-05 08:33:35 +00:00
$ { P R O J E C T _ U I }
2019-10-13 03:42:54 +00:00
$ { P R O J E C T _ T E M P L A T E S }
2017-09-17 19:55:16 +00:00
)
2018-09-25 23:17:08 +00:00
2019-02-11 02:54:16 +00:00
source_group ( TREE "${PROJECT_SOURCE_DIR}/data" PREFIX "Data Files" FILES ${ PROJECT_DATA } )
2020-04-05 08:33:35 +00:00
source_group ( TREE "${PROJECT_SOURCE_DIR}/source" PREFIX "Code Files" FILES ${ PROJECT_PRIVATE_SOURCE } )
2019-02-11 02:54:16 +00:00
source_group ( TREE "${PROJECT_BINARY_DIR}/source" PREFIX "Generated Files" FILES ${ PROJECT_PRIVATE_GENERATED } )
2019-02-11 05:26:06 +00:00
source_group ( TREE "${PROJECT_SOURCE_DIR}/cmake" PREFIX "Template Files" FILES ${ PROJECT_TEMPLATES } )
2020-04-05 08:33:35 +00:00
source_group ( TREE "${PROJECT_SOURCE_DIR}/ui" PREFIX "User Interface Files" FILES ${ PROJECT_UI } )
2017-06-28 21:21:42 +00:00
################################################################################
2018-09-25 23:17:08 +00:00
# Target
2017-06-28 21:21:42 +00:00
################################################################################
2018-12-23 19:49:18 +00:00
add_library ( ${ PROJECT_NAME } MODULE
2018-09-25 23:17:08 +00:00
$ { P R O J E C T _ P U B L I C }
$ { P R O J E C T _ P R I V A T E }
)
2020-04-04 19:08:56 +00:00
set_target_properties ( ${ PROJECT_NAME }
P R O P E R T I E S
P R E F I X " "
I M P O R T _ P R E F I X " "
)
2018-09-25 23:17:08 +00:00
# Include Directories
2018-12-23 19:49:18 +00:00
target_include_directories ( ${ PROJECT_NAME }
2018-09-25 23:17:08 +00:00
P U B L I C
P R I V A T E
2017-06-28 21:21:42 +00:00
" $ { P R O J E C T _ B I N A R Y _ D I R } / s o u r c e "
" $ { P R O J E C T _ S O U R C E _ D I R } / s o u r c e "
2020-03-16 19:37:31 +00:00
$ { P R O J E C T _ I N C L U D E _ D I R S }
2018-09-25 23:17:08 +00:00
)
# Link Libraries
2018-12-23 19:49:18 +00:00
target_link_libraries ( ${ PROJECT_NAME }
2020-01-13 00:52:30 +00:00
$ { P R O J E C T _ L I B R A R I E S }
2018-09-25 23:17:08 +00:00
)
2020-03-16 19:37:31 +00:00
if ( WIN32 )
2020-03-20 22:39:21 +00:00
target_link_libraries ( ${ PROJECT_NAME }
D e l a y i m p . l i b
)
2020-03-16 19:37:31 +00:00
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 ( )
2018-09-25 23:17:08 +00:00
# Definitions
2020-03-16 19:37:31 +00:00
target_compile_definitions ( ${ PROJECT_NAME }
P R I V A T E
$ { P R O J E C T _ D E F I N I T I O N S }
)
if ( WIN32 )
2018-12-23 19:49:18 +00:00
target_compile_definitions ( ${ PROJECT_NAME }
2018-09-25 23:17:08 +00:00
P R I V A T E
_ C R T _ S E C U R E _ N O _ W A R N I N G S
2019-08-07 10:42:01 +00:00
_ E N A B L E _ E X T E N D E D _ A L I G N E D _ S T O R A G E
2018-09-25 23:17:08 +00:00
# windows.h
W I N 3 2 _ L E A N _ A N D _ M E A N
N O G P I C A P M A S K S
N O V I R T U A L K E Y C O D E S
2018-12-23 19:49:18 +00:00
#NOWINMESSAGES
2018-09-25 23:17:08 +00:00
N O W I N S T Y L E S
N O S Y S M E T R I C S
N O M E N U S
N O I C O N S
N O K E Y S T A T E S
N O S Y S C O M M A N D S
N O R A S T E R O P S
N O S H O W W I N D O W
N O A T O M
N O C L I P B O A R D
N O C O L O R
2020-03-25 17:31:22 +00:00
#NOCTLMGR
2018-09-25 23:17:08 +00:00
N O D R A W T E X T
2018-12-23 19:49:18 +00:00
#NOGDI
2018-09-25 23:17:08 +00:00
N O K E R N E L
2018-09-27 04:09:43 +00:00
#NOUSER
2018-12-23 19:49:18 +00:00
#NONLS
2018-09-25 23:17:08 +00:00
N O M B
N O M E M M G R
N O M E T A F I L E
N O M I N M A X
2018-09-27 04:09:43 +00:00
#NOMSG
2018-09-25 23:17:08 +00:00
N O O P E N F I L E
N O S C R O L L
N O S E R V I C E
N O S O U N D
2018-12-23 19:49:18 +00:00
#NOTEXTMETRIC
2018-09-25 23:17:08 +00:00
N O W H
N O W I N O F F S E T S
N O C O M M
N O K A N J I
2020-03-25 17:31:22 +00:00
#NOHELP
2018-09-25 23:17:08 +00:00
N O P R O F I L E R
N O D E F E R W I N D O W P O S
N O M C X
N O I M E
N O M D I
N O I N O U T
)
2018-12-23 19:49:18 +00:00
endif ( )
2018-09-25 23:17:08 +00:00
2019-04-19 05:15:18 +00:00
# C++ Standard and Extensions
set_target_properties (
$ { P R O J E C T _ N A M E }
P R O P E R T I E S
C X X _ S T A N D A R D $ { _ C X X _ S T A N D A R D }
C X X _ E X T E N S I O N S $ { _ C X X _ E X T E N S I O N S }
)
2018-09-25 23:17:08 +00:00
# File Version
2018-12-23 19:49:18 +00:00
if ( WIN32 )
set_target_properties (
2018-09-25 23:17:08 +00:00
$ { P R O J E C T _ N A M E }
P R O P E R T I E S
V E R S I O N $ { P R O J E C T _ V E R S I O N _ M A J O R } . $ { P R O J E C T _ V E R S I O N _ M I N O R } . $ { P R O J E C T _ V E R S I O N _ P A T C H } . $ { P R O J E C T _ V E R S I O N _ T W E A K }
S O V E R S I O N $ { P R O J E C T _ V E R S I O N _ M A J O R } . $ { P R O J E C T _ V E R S I O N _ M I N O R } . $ { P R O J E C T _ V E R S I O N _ P A T C H } . $ { P R O J E C T _ V E R S I O N _ T W E A K }
)
2018-12-23 19:49:18 +00:00
else ( )
set_target_properties (
2018-09-25 23:17:08 +00:00
$ { P R O J E C T _ N A M E }
P R O P E R T I E S
V E R S I O N $ { P R O J E C T _ V E R S I O N _ M A J O R } . $ { P R O J E C T _ V E R S I O N _ M I N O R } . $ { P R O J E C T _ V E R S I O N _ P A T C H } . $ { P R O J E C T _ V E R S I O N _ T W E A K }
S O V E R S I O N $ { P R O J E C T _ V E R S I O N _ M A J O R } . $ { P R O J E C T _ V E R S I O N _ M I N O R } . $ { P R O J E C T _ V E R S I O N _ P A T C H } . $ { P R O J E C T _ V E R S I O N _ T W E A K }
)
2018-12-23 19:49:18 +00:00
endif ( )
2018-09-25 23:17:08 +00:00
2020-04-05 08:33:35 +00:00
# UI
if ( HAVE_OBS_FRONTEND )
target_link_libraries ( ${ PROJECT_NAME }
o b s - f r o n t e n d - a p i
Q t 5 : : C o r e
Q t 5 : : W i d g e t s
)
set_target_properties (
$ { P R O J E C T _ N A M E }
P R O P E R T I E S
A U T O U I C T R U E
A U T O U I C _ S E A R C H _ P A T H S " $ { P R O J E C T _ S O U R C E _ D I R } ; $ { P R O J E C T _ S O U R C E _ D I R } / u i "
A U T O M O C T R U E
A U T O G E N _ B U I L D _ D I R " $ { P R O J E C T _ B I N A R Y _ D I R } / s o u r c e "
A U T O R C C T R U E
)
endif ( )
# Clang-Format
if ( HAVE_CLANG )
clang_format (
T A R G E T S $ { P R O J E C T _ N A M E }
D E P E N D E N C Y
V E R S I O N 9 . 0 . 0
)
endif ( )
2017-06-28 21:21:42 +00:00
################################################################################
2018-09-25 23:17:08 +00:00
# Installation
2017-06-28 21:21:42 +00:00
################################################################################
2018-12-23 19:49:18 +00:00
if ( ${ PropertyPrefix } OBS_NATIVE )
2018-09-25 23:17:08 +00:00
install_obs_plugin_with_data ( ${ PROJECT_NAME } data )
2018-12-23 19:49:18 +00:00
else ( )
2020-04-02 19:47:41 +00:00
if ( UNIX_LOCAL_STRUCTURE )
2018-12-23 19:49:18 +00:00
install (
2020-04-02 19:47:41 +00:00
T A R G E T S $ { P R O J E C T _ N A M E }
R U N T I M E D E S T I N A T I O N " . / p l u g i n s / $ { P R O J E C T _ N A M E } / b i n / $ { B I T S } b i t / " C O M P O N E N T R u n t i m e
L I B R A R Y D E S T I N A T I O N " . / p l u g i n s / $ { P R O J E C T _ N A M E } / b i n / $ { B I T S } b i t / " C O M P O N E N T R u n t i m e
2018-09-25 23:17:08 +00:00
)
2020-04-02 19:47:41 +00:00
install (
D I R E C T O R Y " d a t a / "
D E S T I N A T I O N " . / p l u g i n s / $ { P R O J E C T _ N A M E } / d a t a / "
)
add_custom_target (
P A C K A G E _ 7 Z
$ { C M A K E _ C O M M A N D } - E t a r c f v " $ { _ P A C K A G E _ F U L L _ N A M E } . 7 z " - - f o r m a t = 7 z i p - -
" $ { C M A K E _ I N S T A L L _ P R E F I X } / p l u g i n s / $ { P R O J E C T _ N A M E } "
W O R K I N G _ D I R E C T O R Y " $ { C M A K E _ I N S T A L L _ P R E F I X } "
)
add_custom_target (
P A C K A G E _ Z I P
$ { C M A K E _ C O M M A N D } - E t a r c f v " $ { _ P A C K A G E _ F U L L _ N A M E } . z i p " - - f o r m a t = z i p - -
" $ { C M A K E _ I N S T A L L _ P R E F I X } / p l u g i n s / $ { P R O J E C T _ N A M E } "
W O R K I N G _ D I R E C T O R Y " $ { C M A K E _ I N S T A L L _ P R E F I X } "
)
else ( )
install (
T A R G E T S $ { P R O J E C T _ N A M E }
R U N T I M E D E S T I N A T I O N " . / o b s - p l u g i n s / $ { B I T S } b i t / " C O M P O N E N T R u n t i m e
L I B R A R Y D E S T I N A T I O N " . / o b s - p l u g i n s / $ { B I T S } b i t / " C O M P O N E N T R u n t i m e
)
if ( MSVC )
install (
F I L E S $ < T A R G E T _ P D B _ F I L E : $ { P R O J E C T _ N A M E } >
D E S T I N A T I O N " . / o b s - p l u g i n s / $ { B I T S } b i t / "
O P T I O N A L
)
endif ( )
2018-09-25 23:17:08 +00:00
2020-04-02 19:47:41 +00:00
install (
D I R E C T O R Y " d a t a / "
D E S T I N A T I O N " . / d a t a / o b s - p l u g i n s / $ { P R O J E C T _ N A M E } / "
)
add_custom_target (
P A C K A G E _ 7 Z
$ { C M A K E _ C O M M A N D } - E t a r c f v " $ { _ P A C K A G E _ F U L L _ N A M E } . 7 z " - - f o r m a t = 7 z i p - -
" $ { C M A K E _ I N S T A L L _ P R E F I X } / o b s - p l u g i n s "
" $ { C M A K E _ I N S T A L L _ P R E F I X } / d a t a "
W O R K I N G _ D I R E C T O R Y " $ { C M A K E _ I N S T A L L _ P R E F I X } "
)
add_custom_target (
P A C K A G E _ Z I P
$ { C M A K E _ C O M M A N D } - E t a r c f v " $ { _ P A C K A G E _ F U L L _ N A M E } . z i p " - - f o r m a t = z i p - -
" $ { C M A K E _ I N S T A L L _ P R E F I X } / o b s - p l u g i n s "
" $ { C M A K E _ I N S T A L L _ P R E F I X } / d a t a "
W O R K I N G _ D I R E C T O R Y " $ { C M A K E _ I N S T A L L _ P R E F I X } "
)
endif ( )
2018-12-23 19:49:18 +00:00
endif ( )
2020-03-16 19:37:31 +00:00
cmake_policy ( POP )