cmake_minimum_required(VERSION 3.16...3.25) legacy_check() set(obs-websocket_VERSION 5.3.4) set(OBS_WEBSOCKET_RPC_VERSION 1) option(ENABLE_WEBSOCKET "Enable building OBS with websocket plugin" ON) if(NOT ENABLE_WEBSOCKET) target_disable(obs-websocket) return() endif() # Find Qt find_qt(COMPONENTS Core Widgets Svg Network) # Find nlohmann JSON find_package(nlohmann_json 3 REQUIRED) # Find qrcodegencpp set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) find_package(qrcodegencpp REQUIRED) set(CMAKE_FIND_PACKAGE_PREFER_CONFIG OFF) # Find WebSocket++ find_package(Websocketpp 0.8 REQUIRED) # Find Asio find_package(Asio 1.12.1 REQUIRED) add_library(obs-websocket MODULE) add_library(OBS::websocket ALIAS obs-websocket) target_sources(obs-websocket PRIVATE) target_sources( obs-websocket PRIVATE src/obs-websocket.cpp src/obs-websocket.h src/Config.cpp src/Config.h lib/obs-websocket-api.h src/forms/ConnectInfo.cpp src/forms/ConnectInfo.h src/forms/resources.qrc src/forms/SettingsDialog.cpp src/forms/SettingsDialog.h src/WebSocketApi.cpp src/WebSocketApi.h) target_sources( obs-websocket PRIVATE src/websocketserver/WebSocketServer.cpp src/websocketserver/WebSocketServer_Protocol.cpp src/websocketserver/WebSocketServer.h src/websocketserver/rpc/WebSocketSession.h src/websocketserver/types/WebSocketCloseCode.h src/websocketserver/types/WebSocketOpCode.h) target_sources( obs-websocket PRIVATE src/eventhandler/EventHandler.cpp src/eventhandler/EventHandler.h src/eventhandler/EventHandler_Config.cpp src/eventhandler/EventHandler_General.cpp src/eventhandler/EventHandler_Filters.cpp src/eventhandler/EventHandler_Inputs.cpp src/eventhandler/EventHandler_MediaInputs.cpp src/eventhandler/EventHandler_Outputs.cpp src/eventhandler/EventHandler_Scenes.cpp src/eventhandler/EventHandler_SceneItems.cpp src/eventhandler/EventHandler_Transitions.cpp src/eventhandler/EventHandler_Ui.cpp src/eventhandler/types/EventSubscription.h) target_sources( obs-websocket PRIVATE src/requesthandler/RequestBatchHandler.cpp src/requesthandler/RequestBatchHandler.h src/requesthandler/RequestHandler.cpp src/requesthandler/RequestHandler.h src/requesthandler/RequestHandler_Config.cpp src/requesthandler/RequestHandler_Filters.cpp src/requesthandler/RequestHandler_General.cpp src/requesthandler/RequestHandler_Inputs.cpp src/requesthandler/RequestHandler_MediaInputs.cpp src/requesthandler/RequestHandler_Outputs.cpp src/requesthandler/RequestHandler_Sources.cpp src/requesthandler/RequestHandler_Record.cpp src/requesthandler/RequestHandler_Scenes.cpp src/requesthandler/RequestHandler_SceneItems.cpp src/requesthandler/RequestHandler_Stream.cpp src/requesthandler/RequestHandler_Transitions.cpp src/requesthandler/RequestHandler_Ui.cpp src/requesthandler/rpc/Request.cpp src/requesthandler/rpc/Request.h src/requesthandler/rpc/RequestBatchRequest.cpp src/requesthandler/rpc/RequestBatchRequest.h src/requesthandler/rpc/RequestResult.cpp src/requesthandler/rpc/RequestResult.h src/requesthandler/types/RequestStatus.h src/requesthandler/types/RequestBatchExecutionType.h) target_sources( obs-websocket PRIVATE src/utils/Compat.cpp src/utils/Compat.h src/utils/Crypto.cpp src/utils/Crypto.h src/utils/Json.cpp src/utils/Json.h src/utils/Obs.cpp src/utils/Obs.h src/utils/Obs_ActionHelper.cpp src/utils/Obs_ArrayHelper.cpp src/utils/Obs_NumberHelper.cpp src/utils/Obs_ObjectHelper.cpp src/utils/Obs_StringHelper.cpp src/utils/Obs_SearchHelper.cpp src/utils/Obs_VolumeMeter.cpp src/utils/Obs_VolumeMeter.h src/utils/Obs_VolumeMeter_Helpers.h src/utils/Platform.cpp src/utils/Platform.h src/utils/Utils.h) configure_file(src/plugin-macros.h.in plugin-macros.generated.h) target_sources(obs-websocket PRIVATE plugin-macros.generated.h) target_compile_definitions( obs-websocket PRIVATE ASIO_STANDALONE $<$:PLUGIN_TESTS> $<$:_WEBSOCKETPP_CPP11_STL_> $<$:_WIN32_WINNT=0x0603>) target_compile_options( obs-websocket PRIVATE $<$:/wd4267> $<$:/wd4996> $<$:-Wall> $<$:-Wno-error=float-conversion;-Wno-error=shadow> $<$:-Wno-error=format-overflow;-Wno-error=int-conversion;-Wno-error=comment> $<$:-Wno-error=null-pointer-subtraction;-Wno-error=deprecated-declarations;-Wno-error=implicit-int-conversion;-Wno-error=shorten-64-to-32;-Wno-comma;-Wno-quoted-include-in-framework-header> ) target_link_libraries( obs-websocket PRIVATE OBS::libobs OBS::frontend-api Qt::Core Qt::Widgets Qt::Svg Qt::Network nlohmann_json::nlohmann_json Websocketpp::Websocketpp Asio::Asio qrcodegencpp::qrcodegencpp) set_target_properties_obs( obs-websocket PROPERTIES FOLDER plugins PREFIX "" AUTOMOC ON AUTOUIC ON AUTORCC ON) if(OS_WINDOWS) set_property( TARGET obs-websocket APPEND PROPERTY AUTORCC_OPTIONS --format-version 1) target_link_options(obs-websocket PRIVATE /IGNORE:4099) endif()