1412 lines
		
	
	
		
			42 KiB
		
	
	
	
		
			CMake
		
	
	
	
			
		
		
	
	
			1412 lines
		
	
	
		
			42 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...3.12)
 | |
| 
 | |
| # Automatic Versioning
 | |
| set(VERSION_MAJOR 0)
 | |
| set(VERSION_MINOR 9)
 | |
| set(VERSION_PATCH 0)
 | |
| set(VERSION_TWEAK 0)
 | |
| set(VERSION_SUFFIX "")
 | |
| if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/.git")
 | |
| 	set(GIT_RESULT "")
 | |
| 	set(GIT_OUTPUT "")
 | |
| 
 | |
| 	# Get commit index
 | |
| 	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()
 | |
| 	
 | |
| 	# Get commit hash
 | |
| 	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(VERSION_COMMIT ${GIT_OUTPUT})
 | |
| 	else()
 | |
| 		set(VERSION_COMMIT "")
 | |
| 	endif()
 | |
| endif()
 | |
| if(VERSION_COMMIT)
 | |
| 	set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}${VERSION_SUFFIX}-${VERSION_COMMIT}")
 | |
| else()
 | |
| 	set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}${VERSION_SUFFIX}")
 | |
| 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 Project Type (solo, combined)
 | |
| if("${CMAKE_SOURCE_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
 | |
| 	set(PREFIX "")
 | |
| else()
 | |
| 	set(PREFIX "${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(${PREFIX}ENABLE_CLANG AND (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/clang/Clang.cmake"))
 | |
| 	include("Clang")
 | |
| 	set(HAVE_CLANG ON)
 | |
| endif()
 | |
| ## Download Project
 | |
| include("DownloadProject")
 | |
| 
 | |
| # Detect Platform & Architecture
 | |
| math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
 | |
| if(BITS EQUAL 32)
 | |
| 	set(D_PLATFORM_BITS 32)
 | |
| 	set(ARCH "x86")
 | |
| elseif(BITS EQUAL 64)
 | |
| 	set(D_PLATFORM_BITS 64)
 | |
| 	set(ARCH "x64")
 | |
| else()
 | |
| 	message(FATAL_ERROR "Unknown architecture, please file a bug with your exact setup if you believe this to be an error.")
 | |
| 	return()
 | |
| endif()
 | |
| 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 "Darwin")
 | |
| 	set(D_PLATFORM_MAC 1)
 | |
| else()
 | |
| 	message(FATAL_ERROR "Unknown platform, please file a bug with your exact setup if you believe this to be an error.")
 | |
| 	return()
 | |
| endif()
 | |
| 
 | |
| ################################################################################
 | |
| # C/C++ Compiler Adjustments
 | |
| ################################################################################
 | |
| if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" OR (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang"))
 | |
| 	message(STATUS "Applying custom flags for MSVC style build.")
 | |
| 
 | |
| 	# MSVC/ClangCL
 | |
| 	# - Dynamically link Microsoft C/C++ Redistributable.
 | |
| 	# - Enable /W3 and disable useless warnings.
 | |
| 	# - Enable C++ exceptions with SEH exceptions.
 | |
| 	# - Enable multi-processor compiling.
 | |
| 
 | |
| 	# Build with dynamic MSVC linkage.
 | |
|     add_compile_options(
 | |
|         $<$<CONFIG:>:/MD>
 | |
|         $<$<CONFIG:Debug>:/MDd>
 | |
|         $<$<CONFIG:Release>:/MD>
 | |
|         $<$<CONFIG:RelWithDebInfo>:/MD>
 | |
|         $<$<CONFIG:MinSizeRel>:/MD>
 | |
|     )
 | |
| 
 | |
| 	# Enable most useful warnings.
 | |
| 	set(DISABLED_WARNINGS 
 | |
| 		"/wd4061" "/wd4100" "/wd4180" "/wd4201" "/wd4464" "/wd4505" "/wd4514"
 | |
| 		"/wd4571" "/wd4623" "/wd4625" "/wd4626" "/wd4668" "/wd4710" "/wd4774"
 | |
| 		"/wd4820" "/wd5026" "/wd5027" "/wd5039" "/wd5045" "/wd26812"
 | |
| 	)
 | |
| 	add_compile_options("/W3")
 | |
| 	foreach(WARN ${DISABLED_WARNINGS})
 | |
| 		add_compile_options("${WARN}")
 | |
| 	endforeach()
 | |
| 
 | |
| 	# C++ Exceptions & SEH
 | |
| 	add_compile_options("/EHa")
 | |
| 
 | |
| 	# Multiprocessor compiling
 | |
| 	add_compile_options("/MP")
 | |
| elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
 | |
| 	message(STATUS "Applying custom flags for GNU style build.")
 | |
| 	
 | |
| 	# Clang/AppleClang/GNU
 | |
| 	# - Don't export by default. (Temporarily disabled)
 | |
| 	# - Enable all and extra warnings.
 | |
| 	
 | |
| 	add_compile_options("-Wall")
 | |
| 	add_compile_options("-Wextra")
 | |
| 	# add_compile_options("-fvisibility=hidden")
 | |
| endif()
 | |
| 
 | |
| # C++ Standard and Extensions
 | |
| ## Use C++17 and no non-standard extensions.
 | |
| set(_CXX_STANDARD 17)
 | |
| set(_CXX_EXTENSIONS OFF)
 | |
| 
 | |
| ################################################################################
 | |
| # Resolve Plugin Build Type
 | |
| ################################################################################
 | |
| if(TARGET libobs)
 | |
| 	# Plugin is built together with libOBS.
 | |
| 	message(STATUS "${PROJECT_NAME}: Using native libOBS.")
 | |
| 	set(${PREFIX}OBS_NATIVE TRUE)
 | |
| 	if (TARGET obs-frontend-api)
 | |
| 		set(HAVE_OBS_FRONTEND TRUE)
 | |
| 	endif()
 | |
| else()
 | |
| 	# Plugin is built by itself.
 | |
| 	message(STATUS "${PROJECT_NAME}: Using downloaded libOBS.")
 | |
| 	if(NOT WIN32)
 | |
| 		message(STATUS "${PROJECT_NAME}: Linux builds require preinstalled development packages. Refer to the manual for more information.")
 | |
| 	endif()
 | |
| 	set(${PREFIX}OBS_NATIVE FALSE)
 | |
| endif()
 | |
| 
 | |
| ################################################################################
 | |
| # Options
 | |
| ################################################################################
 | |
| 
 | |
| # Configuration by build type
 | |
| if(${PREFIX}OBS_NATIVE)
 | |
| else()
 | |
| 	# Packaging
 | |
| 	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.")
 | |
| 
 | |
| 	# Unix builds
 | |
| 	if(UNIX)
 | |
| 		set(UNIX_LOCAL_STRUCTURE TRUE CACHE BOOL "Package for a local linux install.")
 | |
| 	endif()
 | |
| endif()
 | |
| 
 | |
| # Features
 | |
| ## Encoders
 | |
| set(${PREFIX}ENABLE_ENCODER_FFMPEG TRUE CACHE BOOL "Enable FFmpeg Encoder")
 | |
| 
 | |
| ## Filters
 | |
| set(${PREFIX}ENABLE_FILTER_BLUR TRUE CACHE BOOL "Enable Blur Filter")
 | |
| set(${PREFIX}ENABLE_FILTER_COLOR_GRADE TRUE CACHE BOOL "Enable Color Grade Filter")
 | |
| set(${PREFIX}ENABLE_FILTER_DISPLACEMENT TRUE CACHE BOOL "Enable Displacement Filter")
 | |
| set(${PREFIX}ENABLE_FILTER_DYNAMIC_MASK TRUE CACHE BOOL "Enable Dynamic Mask Filter")
 | |
| set(${PREFIX}ENABLE_FILTER_NVIDIA_FACE_TRACKING TRUE CACHE BOOL "Enable NVidia Face Tracking Filter")
 | |
| set(${PREFIX}ENABLE_FILTER_SDF_EFFECTS TRUE CACHE BOOL "Enable SDF Effects Filter")
 | |
| set(${PREFIX}ENABLE_FILTER_SHADER TRUE CACHE BOOL "Enable Shader Filter")
 | |
| set(${PREFIX}ENABLE_FILTER_TRANSFORM TRUE CACHE BOOL "Enable Transform Filter")
 | |
| 
 | |
| ## Sources
 | |
| set(${PREFIX}ENABLE_SOURCE_MIRROR TRUE CACHE BOOL "Enable Mirror Source")
 | |
| set(${PREFIX}ENABLE_SOURCE_SHADER TRUE CACHE BOOL "Enable Shader Source")
 | |
| 
 | |
| ## Transitions
 | |
| set(${PREFIX}ENABLE_TRANSITION_SHADER TRUE CACHE BOOL "Enable Shader Transition")
 | |
| 
 | |
| ## FrontEnd / UI
 | |
| set(${PREFIX}ENABLE_FRONTEND TRUE CACHE BOOL "Enable Frontend code.")
 | |
| 
 | |
| ## Code Related
 | |
| set(${PREFIX}ENABLE_CLANG TRUE CACHE BOOL "Enable Clang integration for supported compilers.")
 | |
| set(${PREFIX}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(${PREFIX}ENABLE_UPDATER TRUE CACHE BOOL "Enable automatic update checks.")
 | |
| 
 | |
| # Code Signing
 | |
| set(${PREFIX}SIGN_ENABLED FALSE CACHE BOOL "Enable signing builds.")
 | |
| set(${PREFIX}SIGN_KEY "" CACHE FILEPATH "Path to the private key with which to sign.")
 | |
| set(${PREFIX}SIGN_PASSWORD "" CACHE STRING "Password for the private key.")
 | |
| 
 | |
| # Not-Native Components
 | |
| if(NOT ${PREFIX}OBS_NATIVE) 
 | |
| 	set(${PREFIX}DOWNLOAD_OBS_VERSION "" CACHE STRING "(Optional) OBS Studio version to build against.")
 | |
| 	set(${PREFIX}DOWNLOAD_OBS_HASH_32 "" CACHE STRING "")
 | |
| 	set(${PREFIX}DOWNLOAD_OBS_HASH_64 "" CACHE STRING "")
 | |
| 	mark_as_advanced(
 | |
| 		${PREFIX}DOWNLOAD_OBS_VERSION
 | |
| 		${PREFIX}DOWNLOAD_OBS_HASH_32
 | |
| 		${PREFIX}DOWNLOAD_OBS_HASH_64
 | |
| 	)
 | |
| 
 | |
| 	if(WIN32)
 | |
| 		set(${PREFIX}DOWNLOAD_OBSDEPS_VERSION "" CACHE STRING "(Optional) OBS Studio dependencies version to build against.")
 | |
| 		set(${PREFIX}DOWNLOAD_OBSDEPS_HASH "" CACHE STRING "")
 | |
| 		set(${PREFIX}DOWNLOAD_QT_VERSION "" CACHE STRING "(Optional) Qt Version to build against.")
 | |
| 		set(${PREFIX}DOWNLOAD_QT_HASH "" CACHE STRING "")
 | |
| 		mark_as_advanced(
 | |
| 			${PREFIX}DOWNLOAD_OBSDEPS_VERSION
 | |
| 			${PREFIX}DOWNLOAD_OBSDEPS_HASH
 | |
| 			${PREFIX}DOWNLOAD_QT_VERSION
 | |
| 			${PREFIX}DOWNLOAD_QT_HASH
 | |
| 		)
 | |
| 	endif()	
 | |
| endif()
 | |
| 
 | |
| ################################################################################
 | |
| # CMake / Compiler Dependencies
 | |
| ################################################################################
 | |
| 
 | |
| # Configure Files
 | |
| configure_file(
 | |
| 	"templates/config.hpp.in"
 | |
| 	"${PROJECT_BINARY_DIR}/generated/config.hpp"
 | |
| )
 | |
| 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(WIN32) # Windows 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()
 | |
| 
 | |
| ################################################################################
 | |
| # Code & Dependencies
 | |
| ################################################################################
 | |
| 
 | |
| function(refresh_components)
 | |
| 	# CURL
 | |
| 	if((${PREFIX}ENABLE_UPDATER AND NOT ${PREFIX}DISABLE_UPDATER))
 | |
| 		set(REQUIRE_CURL TRUE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(REQUIRE_CURL FALSE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 
 | |
| 	# FFmpeg
 | |
| 	if(${PREFIX}ENABLE_ENCODER_FFMPEG AND NOT ${PREFIX}DISABLE_ENCODER_FFMPEG)
 | |
| 		set(REQUIRE_FFMPEG TRUE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(REQUIRE_FFMPEG FALSE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 
 | |
| 	# JSON
 | |
| 	if((${PREFIX}ENABLE_UPDATER AND NOT ${PREFIX}DISABLE_UPDATER))
 | |
| 		set(REQUIRE_JSON TRUE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(REQUIRE_JSON FALSE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 
 | |
| 	# OBS Frontend API
 | |
| 	if((${PREFIX}ENABLE_FRONTEND AND NOT ${PREFIX}DISABLE_FRONTEND))
 | |
| 		set(REQUIRE_OBSFE TRUE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(REQUIRE_OBSFE FALSE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 
 | |
| 	# Qt
 | |
| 	if((${PREFIX}ENABLE_FRONTEND AND NOT ${PREFIX}DISABLE_FRONTEND))
 | |
| 		set(REQUIRE_QT TRUE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(REQUIRE_QT FALSE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 	
 | |
| 	# NVIDIA Broadcast/Augmented Reality
 | |
| 	if((${PREFIX}ENABLE_FILTER_NVIDIA_FACE_TRACKING AND NOT ${PREFIX}DISABLE_FILTER_NVIDIA_FACE_TRACKING))
 | |
| 		set(REQUIRE_NVAR TRUE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(REQUIRE_NVAR FALSE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 
 | |
| 	# NVIDIA CUDA
 | |
| 	if((${PREFIX}ENABLE_FILTER_NVIDIA_FACE_TRACKING AND NOT ${PREFIX}DISABLE_FILTER_NVIDIA_FACE_TRACKING))
 | |
| 		set(REQUIRE_NVCUDA TRUE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(REQUIRE_NVCUDA FALSE PARENT_SCOPE)
 | |
| 	endif()
 | |
| endfunction()
 | |
| 
 | |
| function(resolve_components)
 | |
| 	# Resolve features by dependencies
 | |
| 	if(${PREFIX}ENABLE_ENCODER_FFMPEG AND HAVE_FFMPEG)
 | |
| 		set(${PREFIX}DISABLE_ENCODER_FFMPEG FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_ENCODER_FFMPEG TRUE PARENT_SCOPE)
 | |
| 		if(${PREFIX}ENABLE_ENCODER_FFMPEG)
 | |
| 			message(WARNING "Encoder 'FFmpeg' requires FFmpeg.")
 | |
| 		endif()
 | |
| 	endif()
 | |
| 
 | |
| 	if(${PREFIX}ENABLE_FILTER_BLUR)
 | |
| 		set(${PREFIX}DISABLE_FILTER_BLUR FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_FILTER_BLUR TRUE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 	if(${PREFIX}ENABLE_FILTER_COLOR_GRADE)
 | |
| 		set(${PREFIX}DISABLE_FILTER_COLOR_GRADE FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_FILTER_COLOR_GRADE TRUE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 	if(${PREFIX}ENABLE_FILTER_DISPLACEMENT)
 | |
| 		set(${PREFIX}DISABLE_FILTER_DISPLACEMENT FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_FILTER_DISPLACEMENT TRUE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 	if(${PREFIX}ENABLE_FILTER_DYNAMIC_MASK)
 | |
| 		set(${PREFIX}DISABLE_FILTER_DYNAMIC_MASK FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_FILTER_DYNAMIC_MASK TRUE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 	if(${PREFIX}ENABLE_FILTER_NVIDIA_FACE_TRACKING AND WIN32 AND HAVE_NVCUDA AND HAVE_NVAR)
 | |
| 		set(${PREFIX}DISABLE_FILTER_NVIDIA_FACE_TRACKING FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_FILTER_NVIDIA_FACE_TRACKING TRUE PARENT_SCOPE)
 | |
| 		if(${PREFIX}ENABLE_FILTER_NVIDIA_FACE_TRACKING)
 | |
| 			message(WARNING "Filter 'NVIDIA Face Tracking' requires Windows, NVIDIA CUDA and NVIDIA AR SDK.")
 | |
| 		endif()
 | |
| 	endif()
 | |
| 	if(${PREFIX}ENABLE_FILTER_SDF_EFFECTS)
 | |
| 		set(${PREFIX}DISABLE_FILTER_SDF_EFFECTS FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_FILTER_SDF_EFFECTS TRUE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 	if(${PREFIX}ENABLE_FILTER_SHADER)
 | |
| 		set(${PREFIX}DISABLE_FILTER_SHADER FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_FILTER_SHADER TRUE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 
 | |
| 	if(${PREFIX}ENABLE_SOURCE_MIRROR)
 | |
| 		set(${PREFIX}DISABLE_SOURCE_MIRROR FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_SOURCE_MIRROR TRUE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 	if(${PREFIX}ENABLE_SOURCE_SHADER)
 | |
| 		set(${PREFIX}DISABLE_SOURCE_SHADER FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_SOURCE_SHADER TRUE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 
 | |
| 	if(${PREFIX}ENABLE_TRANSITION_SHADER)
 | |
| 		set(${PREFIX}DISABLE_TRANSITION_SHADER FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_TRANSITION_SHADER TRUE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 
 | |
| 	if(${PREFIX}ENABLE_FRONTEND AND HAVE_QT AND HAVE_OBSFE)
 | |
| 		set(${PREFIX}DISABLE_FRONTEND FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_FRONTEND TRUE PARENT_SCOPE)
 | |
| 		if(${PREFIX}ENABLE_FRONTEND)
 | |
| 			message(WARNING "Front-End requires Qt5 and OBS Frontend API.")
 | |
| 		endif()
 | |
| 	endif()
 | |
| 	if(${PREFIX}ENABLE_PROFILING)
 | |
| 		set(${PREFIX}DISABLE_PROFILING FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_PROFILING TRUE PARENT_SCOPE)
 | |
| 	endif()
 | |
| 	if(${PREFIX}ENABLE_UPDATER AND HAVE_CURL AND HAVE_JSON)
 | |
| 		set(${PREFIX}DISABLE_UPDATER FALSE PARENT_SCOPE)
 | |
| 	else()
 | |
| 		set(${PREFIX}DISABLE_UPDATER TRUE PARENT_SCOPE)
 | |
| 		if(${PREFIX}ENABLE_UPDATER)
 | |
| 			message(WARNING "Updater requires CURL and nlohmann/json")
 | |
| 		endif()
 | |
| 	endif()
 | |
| endfunction()
 | |
| 
 | |
| # Update Required Parts
 | |
| refresh_components()
 | |
| 
 | |
| # OBS (Always first)
 | |
| if(NOT ${PREFIX}OBS_NATIVE)
 | |
| 	if(NOT ${PREFIX}DOWNLOAD_OBS_VERSION STREQUAL "")
 | |
| 		set(_DOWNLOAD_OBS_VERSION ${PREFIX}DOWNLOAD_OBS_VERSION)
 | |
| 		set(_DOWNLOAD_OBS_HASH_32 ${PREFIX}DOWNLOAD_OBS_HASH_32)
 | |
| 		set(_DOWNLOAD_OBS_HASH_64 ${PREFIX}DOWNLOAD_OBS_HASH_64)
 | |
| 	else()
 | |
| 		set(_DOWNLOAD_OBS_VERSION "26.0.2-ci")
 | |
| 		if(D_PLATFORM_WINDOWS)
 | |
| 			set(_DOWNLOAD_OBS_HASH_32 "SHA512=468A999ECC8C826683E208B8758FBAE2FD3C9C034A73A147F6BE0F40B6E0AF0B0C9A99DFCB8D3A856206A26FC45F5F0A3B1FF781949B3EF68B765FECEB5CEB55")
 | |
| 			set(_DOWNLOAD_OBS_HASH_64 "SHA512=571B4196DF5CFBD3A8E113C97C7890000C490DDF1C6747529DE0F06063F928E7488095775919017104DE7A693CCF51A7A82BD04BCE62D6B3F0ED1F74A5F32B32")
 | |
| 		elseif(D_PLATFORM_LINUX)
 | |
| 			set(_DOWNLOAD_OBS_HASH_32 "")
 | |
| 			set(_DOWNLOAD_OBS_HASH_64 "SHA512=62EAD42890CEF953806F5780ED37304D6BD110F65D3ED83A88ADA462B0A0E46E9DEE477A76D456C444102EBA4F9F9A9EAAA299DCFDB2872233E2B35F775CCD0D")
 | |
| 		elseif(D_PLATFORM_MAC)
 | |
| 			set(_DOWNLOAD_OBS_HASH_32 "")
 | |
| 			set(_DOWNLOAD_OBS_HASH_64 "SHA512=2A7E312666FAABF539740DAD8E30788DEB5882BE8D2FF062848741FD6F8C2077FB237CFB399634BC9C3DE38CF78B3043B1EAE92D833CE6A8B32F5E1EB92D6618")
 | |
| 		else()
 | |
| 			message(FATAL_ERROR "No prebuilt packages available for this operating system.")
 | |
| 			return()
 | |
| 		endif()
 | |
| 	endif()
 | |
| 	if(WIN32)
 | |
| 		if(NOT ${PREFIX}DOWNLOAD_OBSDEPS_VERSION STREQUAL "")
 | |
| 			set(_DOWNLOAD_OBSDEPS_VERSION ${PREFIX}DOWNLOAD_OBSDEPS_VERSION)
 | |
| 			set(_DOWNLOAD_OBSDEPS_HASH ${PREFIX}DOWNLOAD_OBSDEPS_HASH)
 | |
| 		else()
 | |
| 			set(_DOWNLOAD_OBSDEPS_VERSION "26.0.0")
 | |
| 			set(_DOWNLOAD_OBSDEPS_HASH "SHA512=2D47E7579DE3FBD88C52BB62C2CA4D649BD958FBAE8E5B01EE263D7583B4D8EEEA8CE13C543BEF110FAC9142891C031973A1BC20AC6EED596E6AB97CCC669D16")
 | |
| 		endif()
 | |
| 		if(NOT ${PREFIX}DOWNLOAD_QT_VERSION STREQUAL "")
 | |
| 			set(_DOWNLOAD_QT_VERSION ${PREFIX}DOWNLOAD_QT_VERSION)
 | |
| 			set(_DOWNLOAD_QT_HASH ${PREFIX}DOWNLOAD_QT_HASH)
 | |
| 		else()
 | |
| 			set(_DOWNLOAD_QT_VERSION "5.10.1")
 | |
| 			set(_DOWNLOAD_QT_HASH "SHA512=848B9AC00B06FCA1F1A85BD4EFEA4138D278E8EC96823C5C36CC988DDE5D27E2F91300B02F2F0E71F075CCB0D791D3C888CDA6A5048DDFE6F946A8697DFEF1E9")
 | |
| 		endif()
 | |
| 	endif()
 | |
| 
 | |
| 	if(D_PLATFORM_WINDOWS)
 | |
| 		set(DLSUFFIX "windows${BITS}")
 | |
| 	elseif(D_PLATFORM_LINUX)
 | |
| 		set(DLSUFFIX "ubuntu${BITS}")
 | |
| 	elseif(D_PLATFORM_MAC)
 | |
| 		set(DLSUFFIX "macos${BITS}")
 | |
| 	else()
 | |
| 		message(FATAL_ERROR "Standalone builds are not supported for this platform. Please consider submitting the necessary changes to make them work.")
 | |
| 	endif()
 | |
| 
 | |
| 	# Library
 | |
| 	download_project(
 | |
| 		PROJ libobs
 | |
| 		URL "https://github.com/Xaymar/obs-studio/releases/download/${_DOWNLOAD_OBS_VERSION}/obs-studio-${ARCH}-0.0.0.0-${DLSUFFIX}.7z"
 | |
| 		URL_HASH "${_DOWNLOAD_OBS_HASH_${BITS}}"
 | |
| 		DOWNLOAD_NAME "libobs.7z"
 | |
| 		DOWNLOAD_NO_PROGRESS OFF
 | |
| 		UPDATE_DISCONNECTED OFF
 | |
| 	)
 | |
| 
 | |
| 	# Dependencies
 | |
| 	if(D_PLATFORM_WINDOWS)
 | |
| 		download_project(
 | |
| 			PROJ obsdeps
 | |
| 			URL "https://github.com/Xaymar/obs-studio/releases/download/${_DOWNLOAD_OBSDEPS_VERSION}/dependencies.7z"
 | |
| 			URL_HASH "${_DOWNLOAD_OBSDEPS_HASH}"
 | |
| 			DOWNLOAD_NAME "obsdeps.7z"
 | |
| 			DOWNLOAD_NO_PROGRESS OFF
 | |
| 			UPDATE_DISCONNECTED OFF
 | |
| 		)
 | |
| 	else() # Unix systems use system packages instead.
 | |
| 		message(STATUS "StreamFX: Builds on non-Windows platforms require that you install the necessary packages.")
 | |
| 	endif()
 | |
| 
 | |
| 	# Include config file.
 | |
| 	include("${libobs_SOURCE_DIR}/cmake/LibObs/LibObsConfig.cmake")
 | |
| endif()
 | |
| 
 | |
| # CURL
 | |
| if(REQUIRE_CURL)
 | |
| 	if(WIN32) # CURL built by OBS Project is not compatible with find modules.
 | |
| 		if(${PREFIX}OBS_NATIVE) # Already defined by OBS
 | |
| 			set(CURL_LIBRARIES "${CURL_LIB}")
 | |
| 			set(CURL_INCLUDE_DIRS "${CURL_INCLUDE_DIR}")
 | |
| 		else()
 | |
| 			set(CURL_LIBRARIES "${obsdeps_SOURCE_DIR}/win${BITS}/bin/libcurl.lib")
 | |
| 			set(CURL_INCLUDE_DIRS "${obsdeps_SOURCE_DIR}/win${BITS}/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)
 | |
| 	endif()
 | |
| 
 | |
| 	set(HAVE_CURL ${CURL_FOUND})
 | |
| else()
 | |
| 	set(HAVE_CURL FALSE)
 | |
| endif()
 | |
| if(NOT HAVE_CURL AND REQUIRE_CURL)
 | |
| 	message(WARNING "CURL could not be found.")
 | |
| endif()
 | |
| 
 | |
| # FFmpeg
 | |
| if(REQUIRE_FFMPEG)
 | |
| 	if(WIN32 AND NOT ${PREFIX}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 COMPONENTS avutil avcodec swscale)
 | |
| 	
 | |
| 	set(HAVE_FFMPEG ${FFmpeg_FOUND})
 | |
| else()
 | |
| 	set(HAVE_FFMPEG FALSE)
 | |
| endif()
 | |
| if(NOT HAVE_FFMPEG AND REQUIRE_FFMPEG)
 | |
| 	message(WARNING "FFmpeg could not be found.")
 | |
| endif()
 | |
| 
 | |
| # JSON
 | |
| if(REQUIRE_JSON AND EXISTS "${PROJECT_SOURCE_DIR}/third-party/nlohmann-json/single_include")
 | |
| 	set(JSON_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/third-party/nlohmann-json/single_include")
 | |
| 	set(HAVE_JSON TRUE)
 | |
| else()
 | |
| 	set(HAVE_JSON FALSE)
 | |
| endif()
 | |
| if(NOT HAVE_JSON AND REQUIRE_JSON)
 | |
| 	message(WARNING "nlohmann/json was not found.")
 | |
| endif()
 | |
| 
 | |
| # Qt
 | |
| if(REQUIRE_QT)
 | |
| 	if(WIN32 AND NOT ${PREFIX}OBS_NATIVE)
 | |
| 		download_project(
 | |
| 			PROJ qt
 | |
| 			URL "https://github.com/Xaymar/obs-studio/releases/download/${_DOWNLOAD_OBSDEPS_VERSION}/qt_${_DOWNLOAD_QT_VERSION}.7z"
 | |
| 			URL_HASH "${_DOWNLOAD_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()
 | |
| 
 | |
| 	find_package(Qt5 COMPONENTS Core Widgets)
 | |
| 
 | |
| 	set(HAVE_QT ${Qt5_FOUND})
 | |
| else()
 | |
| 	set(HAVE_QT FALSE)
 | |
| endif()
 | |
| if(NOT HAVE_QT AND REQUIRE_QT)
 | |
| 	message(WARNING "Qt5 was not found.")
 | |
| endif()
 | |
| 
 | |
| # OBS Frontend API
 | |
| if(REQUIRE_OBSFE)
 | |
| 	if(NOT ${PREFIX}OBS_NATIVE)
 | |
| 		if (EXISTS "${libobs_SOURCE_DIR}/cmake/obs-frontend-api/obs-frontend-apiConfig.cmake")
 | |
| 			include("${libobs_SOURCE_DIR}/cmake/obs-frontend-api/obs-frontend-apiConfig.cmake")
 | |
| 			set(HAVE_OBSFE TRUE)
 | |
| 		else()
 | |
| 			set(HAVE_OBSFE FALSE)
 | |
| 		endif()
 | |
| 	else()
 | |
| 		if(TARGET obs-frontend-api)
 | |
| 			set(HAVE_OBSFE TRUE)
 | |
| 		else()
 | |
| 			set(HAVE_OBSFE FALSE)
 | |
| 		endif()
 | |
| 	endif()
 | |
| endif()
 | |
| if(NOT HAVE_OBSFE AND REQUIRE_OBSFE)
 | |
| 	message(WARNING "obs-frontend-api was as not found.")
 | |
| endif()
 | |
| 
 | |
| # NVIDIA CUDA
 | |
| if(REQUIRE_NVCUDA)
 | |
| 	# CUDA is provided by the NVIDIA Driver, we just load it dynamically.
 | |
| 	set(HAVE_NVCUDA TRUE)
 | |
| else()
 | |
| 	set(HAVE_NVCUDA FALSE)
 | |
| endif()
 | |
| if(NOT HAVE_NVCUDA AND REQUIRE_NVCUDA)
 | |
| 	message(WARNING "NVIDIA CUDA was as not found.")
 | |
| endif()
 | |
| 
 | |
| # NVIDIA Broadcast / Augmented Reality
 | |
| if(REQUIRE_NVAR AND EXISTS "${PROJECT_SOURCE_DIR}/third-party/nvidia-arsdk/version.h")
 | |
| 	set(NVAR_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/third-party/nvidia-arsdk")
 | |
| 	find_package(NVAR)
 | |
| 
 | |
| 	set(HAVE_NVAR ${NVAR_FOUND})
 | |
| else()
 | |
| 	set(HAVE_NVAR FALSE)
 | |
| endif()
 | |
| if(NOT HAVE_NVAR AND REQUIRE_NVAR)
 | |
| 	message(WARNING "NVIDIA AR was as not found.")
 | |
| endif()
 | |
| 
 | |
| # Update selected Components
 | |
| resolve_components()
 | |
| refresh_components()
 | |
| 
 | |
| ################################################################################
 | |
| # 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_PRIVATE_GENERATED )
 | |
| set(PROJECT_PRIVATE_SOURCE )
 | |
| set(PROJECT_UI )
 | |
| set(PROJECT_UI_SOURCE )
 | |
| set(PROJECT_DEFINITIONS )
 | |
| 
 | |
| # Dependencies
 | |
| list(APPEND PROJECT_LIBRARIES libobs)
 | |
| if(REQUIRE_QT AND HAVE_QT)
 | |
| 	list(APPEND PROJECT_LIBRARIES Qt5::Core Qt5::Widgets)
 | |
| endif()
 | |
| if(REQUIRE_OBSFE AND HAVE_OBSFE)
 | |
| 	list(APPEND PROJECT_LIBRARIES obs-frontend-api)
 | |
| endif()
 | |
| if(REQUIRE_JSON AND HAVE_JSON)
 | |
| 	list(APPEND PROJECT_INCLUDE_DIRS ${JSON_INCLUDE_DIR})
 | |
| endif()
 | |
| if(REQUIRE_CURL AND HAVE_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()
 | |
| if(REQUIRE_FFMPEG AND HAVE_FFMPEG)
 | |
| 	list(APPEND PROJECT_LIBRARIES
 | |
| 		${FFMPEG_LIBRARIES}
 | |
| 	)
 | |
| 	list(APPEND PROJECT_INCLUDE_DIRS
 | |
| 		${FFMPEG_INCLUDE_DIRS}
 | |
| 	)	
 | |
| endif()
 | |
| if(REQUIRE_NVCUDA AND HAVE_NVCUDA)
 | |
| 	list(APPEND PROJECT_PRIVATE_SOURCE
 | |
| 		"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"
 | |
| 	)
 | |
| endif()
 | |
| if(REQUIRE_NVAR AND HAVE_NVAR)
 | |
| 	list(APPEND PROJECT_PRIVATE_SOURCE
 | |
| 		"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"
 | |
| 	)
 | |
| 	list(APPEND PROJECT_LIBRARIES
 | |
| 		nvARProxy
 | |
| 	)
 | |
| endif()
 | |
| 
 | |
| # Core
 | |
| list(APPEND PROJECT_PRIVATE_SOURCE
 | |
| 	"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-bitmask.hpp"
 | |
| 	"source/util/util-event.hpp"
 | |
| 	"source/util/util-library.cpp"
 | |
| 	"source/util/util-library.hpp"
 | |
| 	"source/util/util-threadpool.cpp"
 | |
| 	"source/util/util-threadpool.hpp"
 | |
| 	"source/gfx/gfx-source-texture.hpp"
 | |
| 	"source/gfx/gfx-source-texture.cpp"
 | |
| 	"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"
 | |
| )
 | |
| list(APPEND PROJECT_TEMPLATES
 | |
| 	"templates/version.hpp.in"
 | |
| 	"templates/module.cpp.in"
 | |
| 	"templates/config.hpp.in"
 | |
| )
 | |
| list(APPEND PROJECT_DATA
 | |
| 	"data/locale/en-US.ini"
 | |
| 	"data/effects/color-conversion.effect"
 | |
| 	"data/effects/mipgen.effect"
 | |
| 	"data/effects/pack-unpack.effect"
 | |
| )
 | |
| if(WIN32)
 | |
| 	list(APPEND PROJECT_TEMPLATES
 | |
| 		"templates/version.rc.in"
 | |
| 	)
 | |
| 	list(APPEND PROJECT_PRIVATE_SOURCE
 | |
| 		"source/windll.cpp"
 | |
| 	)
 | |
| 	list(APPEND PROJECT_PRIVATE_GENERATED
 | |
| 		"${PROJECT_BINARY_DIR}/generated/version.rc"
 | |
| 	)
 | |
| 	if(NOT ${PREFIX}OBS_NATIVE)
 | |
| 		list(APPEND PROJECT_TEMPLATES
 | |
| 			"templates/installer.iss.in"
 | |
| 		)
 | |
| 	endif()
 | |
| endif()
 | |
| 
 | |
| # Old Compiler Support
 | |
| 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()
 | |
| 
 | |
| ################################################################################
 | |
| # Components
 | |
| ################################################################################
 | |
| 
 | |
| # Component: Profiling
 | |
| if(NOT ${PREFIX}DISABLE_PROFILING)
 | |
| 	list(APPEND PROJECT_PRIVATE_SOURCE
 | |
| 		"source/util/util-profiler.cpp"
 | |
| 		"source/util/util-profiler.hpp"
 | |
| 	)
 | |
| 	list(APPEND PROJECT_DEFINITIONS
 | |
| 		ENABLE_PROFILING
 | |
| 	)
 | |
| endif()
 | |
| 
 | |
| # Component: Updater
 | |
| if(NOT ${PREFIX}DISABLE_UPDATER)
 | |
| 	list(APPEND PROJECT_PRIVATE_SOURCE
 | |
| 		"source/updater.hpp"
 | |
| 		"source/updater.cpp"
 | |
| 	)
 | |
| 	list(APPEND PROJECT_DEFINITIONS
 | |
| 		ENABLE_UPDATER
 | |
| 	)
 | |
| endif()
 | |
| 
 | |
| # Component: Encoder/FFmpeg
 | |
| if(NOT ${PREFIX}DISABLE_ENCODER_FFMPEG)
 | |
| 	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_DEFINITIONS
 | |
| 		ENABLE_ENCODER_FFMPEG
 | |
| 	)
 | |
| endif()
 | |
| 
 | |
| # Component: Filter/Blur
 | |
| if(NOT ${PREFIX}DISABLE_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()
 | |
| 
 | |
| # Component: Filter/Color Grade
 | |
| if(NOT ${PREFIX}DISABLE_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()
 | |
| 
 | |
| # Component: Filter/Displacement
 | |
| if(NOT ${PREFIX}DISABLE_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()
 | |
| 
 | |
| # Component: Filter/Dynamic Mask
 | |
| if(NOT ${PREFIX}DISABLE_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()
 | |
| 
 | |
| # Component: Filter/NVIDIA Face Tracking
 | |
| if(NOT ${PREFIX}DISABLE_FILTER_NVIDIA_FACE_TRACKING)
 | |
| 	list(APPEND PROJECT_PRIVATE_SOURCE
 | |
| 		"source/filters/filter-nv-face-tracking.hpp"
 | |
| 		"source/filters/filter-nv-face-tracking.cpp"
 | |
| 	)
 | |
| 	list(APPEND PROJECT_DEFINITIONS
 | |
| 		ENABLE_FILTER_NVIDIA_FACE_TRACKING
 | |
| 	)
 | |
| endif()
 | |
| 
 | |
| # Component: Filter/SDF Effects
 | |
| if(NOT ${PREFIX}DISABLE_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()
 | |
| 
 | |
| # Component: Filter/Shader
 | |
| if(NOT ${PREFIX}DISABLE_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()
 | |
| 
 | |
| # Component: Filter/Transform
 | |
| if(NOT ${PREFIX}DISABLE_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()
 | |
| 
 | |
| # Component: Source/Mirror
 | |
| if(NOT ${PREFIX}DISABLE_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()
 | |
| 
 | |
| # Component: Source/Shader
 | |
| if(NOT ${PREFIX}DISABLE_SOURCE_SHADER)
 | |
| 	list(APPEND PROJECT_PRIVATE_SOURCE
 | |
| 		"source/sources/source-shader.hpp"
 | |
| 		"source/sources/source-shader.cpp"
 | |
| 	)
 | |
| 	list(APPEND PROJECT_DEFINITIONS
 | |
| 		ENABLE_SOURCE_SHADER
 | |
| 	)
 | |
| endif()
 | |
| 
 | |
| # Component: Transition/Shader
 | |
| if(NOT ${PREFIX}DISABLE_TRANSITION_SHADER)
 | |
| 	list(APPEND PROJECT_PRIVATE_SOURCE
 | |
| 		"source/transitions/transition-shader.hpp"
 | |
| 		"source/transitions/transition-shader.cpp"
 | |
| 	)
 | |
| 	list(APPEND PROJECT_DEFINITIONS
 | |
| 		ENABLE_TRANSITION_SHADER
 | |
| 	)
 | |
| endif()
 | |
| 
 | |
| # Component: Frontend
 | |
| if(NOT ${PREFIX}DISABLE_FRONTEND)
 | |
| 	list(APPEND PROJECT_UI
 | |
| 		"ui/streamfx.qrc"
 | |
| 		"ui/about.ui"
 | |
| 		"ui/about-entry.ui"
 | |
| 	)
 | |
| 	list(APPEND PROJECT_UI_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_INCLUDE_DIRS
 | |
| 		"source/ui"
 | |
| 	)
 | |
| 	list(APPEND PROJECT_DEFINITIONS
 | |
| 		ENABLE_FRONTEND
 | |
| 	)
 | |
| 	
 | |
| 	if(NOT ${PREFIX}DISABLE_UPDATER)
 | |
| 		list(APPEND PROJECT_UI_SOURCE
 | |
| 			"source/ui/ui-updater.hpp"
 | |
| 			"source/ui/ui-updater.cpp"
 | |
| 		)
 | |
| 		list(APPEND PROJECT_UI
 | |
| 			"ui/updater.ui"
 | |
| 		)
 | |
| 	endif()
 | |
| endif()
 | |
| 
 | |
| # Extra Parts
 | |
| if(NOT ${PREFIX}DISABLE_FILTER_SHADER OR NOT ${PREFIX}DISABLE_SOURCE_SHADER OR NOT ${PREFIX}DISABLE_TRANSITION_SHADER)
 | |
| 	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_FILES
 | |
| 	# Always exists
 | |
| 	${PROJECT_TEMPLATES}
 | |
| 	${PROJECT_PRIVATE_GENERATED}
 | |
| 	${PROJECT_PRIVATE_SOURCE}
 | |
| 	${PROJECT_DATA}
 | |
| 	# UI-only (empty if not enabled)
 | |
| 	${PROJECT_UI}
 | |
| 	${PROJECT_UI_SOURCE}
 | |
| )
 | |
| 
 | |
| source_group(TREE "${PROJECT_SOURCE_DIR}/data" PREFIX "Data" FILES ${PROJECT_DATA})
 | |
| source_group(TREE "${PROJECT_SOURCE_DIR}/source" PREFIX "Source" FILES ${PROJECT_PRIVATE_SOURCE} ${PROJECT_UI_SOURCE})
 | |
| source_group(TREE "${PROJECT_BINARY_DIR}/generated" PREFIX "Source" FILES ${PROJECT_PRIVATE_GENERATED})
 | |
| source_group(TREE "${PROJECT_SOURCE_DIR}/templates" PREFIX "Templates" FILES ${PROJECT_TEMPLATES})
 | |
| source_group(TREE "${PROJECT_SOURCE_DIR}/ui" PREFIX "User Interface" FILES ${PROJECT_UI})
 | |
| 
 | |
| if(NOT ${PREFIX}DISABLE_FRONTEND)
 | |
| 	set_source_files_properties(${PROJECT_DATA} ${PROJECT_TEMPLATES} ${PROJECT_PRIVATE_GENERATED} ${PROJECT_PRIVATE_SOURCE} PROPERTIES
 | |
| 		SKIP_AUTOUIC TRUE
 | |
| 		SKIP_AUTOGEN TRUE
 | |
| 	)
 | |
| endif()
 | |
| set_source_files_properties(${PROJECT_DATA} ${PROJECT_TEMPLATES} PROPERTIES
 | |
| 	HEADER_FILE_ONLY TRUE
 | |
| )
 | |
| 
 | |
| ################################################################################
 | |
| # Target
 | |
| ################################################################################
 | |
| 
 | |
| # Set up
 | |
| add_library(${PROJECT_NAME} MODULE
 | |
| 	${PROJECT_FILES}
 | |
| )
 | |
| target_include_directories(${PROJECT_NAME} PRIVATE
 | |
| 	"${PROJECT_BINARY_DIR}/generated"
 | |
| 	"${PROJECT_SOURCE_DIR}/source"
 | |
| 	${PROJECT_INCLUDE_DIRS}
 | |
| )
 | |
| target_link_libraries(${PROJECT_NAME} ${PROJECT_LIBRARIES} )
 | |
| target_compile_definitions(${PROJECT_NAME} PRIVATE ${PROJECT_DEFINITIONS})
 | |
| 
 | |
| # Extra Changes
 | |
| set_target_properties(${PROJECT_NAME}
 | |
| 	PROPERTIES
 | |
| 		PREFIX ""
 | |
| 		IMPORT_PREFIX ""
 | |
| )
 | |
| if(WIN32)
 | |
| 	# /DELAYLOAD MSVC
 | |
| 	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}")
 | |
| 		add_link_options("/DELAYLOAD:${DELAYLOAD}")
 | |
| 	endforeach()
 | |
| 
 | |
| 	# Windows.h shrinking
 | |
| 	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(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(NOT ${PREFIX}DISABLE_FRONTEND)
 | |
| 	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/GEN"
 | |
| 		AUTOMOC_SOURCE_GROUP "Qt/MOC"
 | |
| 		AUTORCC_SOURCE_GROUP "Qt/RCC"
 | |
| 	)
 | |
| endif()
 | |
| 
 | |
| # Clang Tools
 | |
| if(${PREFIX}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(${PREFIX}SIGN_ENABLED)
 | |
| 	# Investigate: https://github.com/Monetra/mstdlib/blob/master/CMakeModules/CodeSign.cmake
 | |
| 	if(MSVC) 
 | |
| 		find_program(${PREFIX}SIGN_TOOL
 | |
| 			NAMES "signtool"
 | |
| 			DOC "Path to the signing tool."
 | |
| 			REQUIRED
 | |
| 		)
 | |
| 		
 | |
| 		if(${PREFIX}SIGN_TOOL)
 | |
| 			message(STATUS "${PROJECT_NAME}: Signing enabled")
 | |
| 			add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
 | |
| 				COMMAND ${${PREFIX}SIGN_TOOL}
 | |
| 				ARGS sign /p "${${PREFIX}SIGN_PASSWORD}" /f "${${PREFIX}SIGN_KEY}" $<TARGET_FILE:${PROJECT_NAME}>
 | |
| 			)
 | |
| 		endif()
 | |
| 	endif()
 | |
| endif()
 | |
| 
 | |
| ################################################################################
 | |
| # Installation
 | |
| ################################################################################
 | |
| 
 | |
| if(${PREFIX}OBS_NATIVE)
 | |
| 	install_obs_plugin_with_data(${PROJECT_NAME} data)
 | |
| else()
 | |
| 	# 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}")
 | |
| 
 | |
| 	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}"
 | |
| 		)
 | |
| 		
 | |
| 		# 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"
 | |
| 			)
 | |
| 		endif()
 | |
| 	endif()	
 | |
| endif()
 |