cmake_minimum_required(VERSION 3.12) project(obs-face-tracker VERSION 0.8.0) set(PLUGIN_AUTHOR "Norihiro Kamae") set(MACOS_BUNDLEID "net.nagater.obs-face-tracker") set(MACOS_PACKAGE_UUID "A2EB2F73-9828-40C4-A307-F47282BB8D3F") set(MACOS_INSTALLER_UUID "652CF739-5A6F-4DAC-9611-B068FAC15BF3") set(PLUGIN_URL "https://obsproject.com/forum/resources/face-tracker.1294/") set(LINUX_MAINTAINER_EMAIL "norihiro@nagater.net") option(WITH_PTZ_TCP "Enable to connect PTZ camera through TCP socket" ON) option(WITH_DLIB_SUBMODULE "Link dlib from submodule" ON) option(ENABLE_MONITOR_USER "Enable monitor source for user" OFF) option(ENABLE_DEBUG_DATA "Enable property to save error and control data" OFF) option(WITH_DOCK "Enable dock" ON) option(ENABLE_DATAGEN "Enable generating data" OFF) set(CMAKE_PREFIX_PATH "${QTDIR}") set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(plugin_additional_libs) set(plugin_additional_incs) if (WITH_PTZ_TCP) set(CMAKE_POSITION_INDEPENDENT_CODE true) set(WITH_VISCA_SERIAL OFF) add_definitions("-DVISCA_API= ") add_subdirectory(libvisca/visca) set(plugin_additional_libs ${plugin_additional_libs} visca) set(plugin_additional_incs ${plugin_additional_incs} libvisca/visca) endif() find_package(libobs REQUIRED) find_package(obs-frontend-api REQUIRED) include(cmake/ObsPluginHelpers.cmake) find_qt(VERSION ${QT_VERSION} COMPONENTS Widgets Core Gui) if (WITH_DLIB_SUBMODULE) set(CMAKE_POSITION_INDEPENDENT_CODE True) set(DLIB_NO_GUI_SUPPORT ON) set(DLIB_PNG_SUPPORT OFF) set(DLIB_GIF_SUPPORT OFF) set(DLIB_USE_FFMPEG OFF) set(DLIB_JPEG_SUPPORT OFF) set(DLIB_LINK_WITH_SQLITE3 OFF) set(DLIB_WEBP_SUPPORT OFF) set(DLIB_JXL_SUPPORT OFF) set(DLIB_TEST_COMPILE_ALL_SOURCE_CPP OFF) add_subdirectory(dlib) else() find_package(dlib REQUIRED) add_library(dlib ALIAS dlib::dlib) endif() set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) configure_file( src/plugin-macros.h.in plugin-macros.generated.h ) configure_file( installer/installer-Windows.iss.in installer-Windows.generated.iss ) configure_file( ci/ci_includes.sh.in ci/ci_includes.generated.sh ) configure_file( ci/ci_includes.cmd.in ci/ci_includes.generated.cmd ) set(PLUGIN_SOURCES src/module-main.c src/face-tracker.cpp src/source_list.cc src/face-tracker-preset.cpp src/face-tracker-manager.cpp src/face-tracker-ptz.cpp src/face-tracker-monitor.cpp src/face-detector-base.cpp src/face-detector-dlib-hog.cpp src/face-detector-dlib-cnn.cpp src/face-tracker-base.cpp src/face-tracker-dlib.cpp src/texture-object.cpp src/helper.cpp src/ptz-backend.cpp src/obsptz-backend.cpp src/dummy-backend.cpp ) if (WITH_PTZ_TCP) set(PLUGIN_SOURCES ${PLUGIN_SOURCES} src/libvisca-thread.cpp) endif() if (WITH_DOCK) set(PLUGIN_SOURCES ${PLUGIN_SOURCES} ui/face-tracker-dock.cpp ui/face-tracker-widget.cpp ) endif() add_library(${CMAKE_PROJECT_NAME} MODULE ${PLUGIN_SOURCES}) if (WITH_DOCK) set(plugin_additional_incs ${plugin_additional_incs} src) set(plugin_additional_libs ${plugin_additional_libs} Qt::Gui Qt::Widgets Qt::GuiPrivate) endif() include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/dlib ${plugin_additional_incs} ) target_link_libraries(${CMAKE_PROJECT_NAME} OBS::libobs OBS::obs-frontend-api dlib ${plugin_additional_libs} ) target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ) if(OS_WINDOWS) # Enable Multicore Builds and disable FH4 (to not depend on VCRUNTIME140_1.DLL when building with VS2019) if (MSVC) add_definitions(/MP /d2FH4-) add_definitions("-D_USE_MATH_DEFINES") add_definitions("-D_CRT_SECURE_NO_WARNINGS") # to avoid a warning for `fopen` add_definitions("-D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR") # TODO: Remove once requiring OBS 30.2 or later. endif() target_link_libraries(${CMAKE_PROJECT_NAME} OBS::w32-pthreads) endif() if(OS_LINUX) target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE -Wall -Wextra -Wunused-function -Werror -Wno-error=deprecated-declarations # TODO: Replace obs_frontend_add_dock with the new API. ) target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,defs") endif() if(APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -fvisibility=default") set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES PREFIX "") set(MACOSX_PLUGIN_GUI_IDENTIFIER "${MACOS_BUNDLEID}") set(MACOSX_PLUGIN_BUNDLE_VERSION "${CMAKE_PROJECT_VERSION}") set(MACOSX_PLUGIN_SHORT_VERSION_STRING "1") endif() setup_plugin_target(${CMAKE_PROJECT_NAME}) configure_file(installer/installer-macOS.pkgproj.in installer-macOS.generated.pkgproj) if(ENABLE_DATAGEN) add_executable(face-detector-dlib-hog-datagen src/face-detector-dlib-hog-datagen.cpp ) target_include_directories(face-detector-dlib-hog-datagen PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ) target_link_libraries(face-detector-dlib-hog-datagen dlib ) endif()