cmake_minimum_required(VERSION 3.5) project(obs-websocket VERSION 5.0.0) set(CMAKE_PREFIX_PATH "${QTDIR}") set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_definitions(-DASIO_STANDALONE) if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") set(CMAKE_CXX_FLAGS "-mfpu=neon") endif() if (WIN32 OR APPLE) include(external/FindLibObs.cmake) endif() find_package(LibObs REQUIRED) find_package(Qt5 REQUIRED COMPONENTS Core Widgets) set(obs-websocket_SOURCES src/obs-websocket.cpp src/rpc/RpcRequestData.cpp src/rpc/RpcRequestResponse.cpp src/rpc/RpcEvent.cpp src/forms/settings-dialog.cpp) set(obs-websocket_HEADERS src/obs-websocket.h src/rpc/RpcRequest.h src/rpc/RpcEvent.h src/forms/settings-dialog.h) # --- Platform-independent build settings --- add_library(obs-websocket MODULE ${obs-websocket_SOURCES} ${obs-websocket_HEADERS}) include_directories( "${LIBOBS_INCLUDE_DIR}/../UI/obs-frontend-api" ${Qt5Core_INCLUDES} ${Qt5Widgets_INCLUDES} "${CMAKE_SOURCE_DIR}/deps/asio/asio/include" "${CMAKE_SOURCE_DIR}/deps/websocketpp") target_link_libraries(obs-websocket libobs Qt5::Core Qt5::Widgets) # --- End of section --- # --- Windows-specific build settings and tasks --- if(WIN32) if(NOT DEFINED OBS_FRONTEND_LIB) set(OBS_FRONTEND_LIB "OBS_FRONTEND_LIB-NOTFOUND" CACHE FILEPATH "OBS frontend library") message(FATAL_ERROR "Could not find OBS Frontend API's library !") endif() if(MSVC) # Enable Multicore Builds and disable FH4 (to not depend on VCRUNTIME140_1.DLL) add_definitions(/MP /d2FH4-) endif() add_definitions(-D_WEBSOCKETPP_CPP11_STL_) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(ARCH_NAME "64bit") set(OBS_BUILDDIR_ARCH "build64") else() set(ARCH_NAME "32bit") set(OBS_BUILDDIR_ARCH "build32") endif() include_directories( "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/UI" ) target_link_libraries(obs-websocket "${OBS_FRONTEND_LIB}") # --- Release package helper --- # The "release" folder has a structure similar OBS' one on Windows set(RELEASE_DIR "${PROJECT_SOURCE_DIR}/release") add_custom_command(TARGET obs-websocket POST_BUILD # If config is Release, package release files COMMAND if $==1 ( "${CMAKE_COMMAND}" -E make_directory "${RELEASE_DIR}/data/obs-plugins/obs-websocket" "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}") COMMAND if $==1 ("${CMAKE_COMMAND}" -E copy_directory "${PROJECT_SOURCE_DIR}/data" "${RELEASE_DIR}/data/obs-plugins/obs-websocket") COMMAND if $==1 ("${CMAKE_COMMAND}" -E copy "$" "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}") # In Release mode, copy Qt image format plugins COMMAND if $==1 ( "${CMAKE_COMMAND}" -E copy "${QTDIR}/plugins/imageformats/qjpeg.dll" "${RELEASE_DIR}/bin/${ARCH_NAME}/imageformats/qjpeg.dll") COMMAND if $==1 ( "${CMAKE_COMMAND}" -E copy "${QTDIR}/plugins/imageformats/qjpeg.dll" "${RELEASE_DIR}/bin/${ARCH_NAME}/imageformats/qjpeg.dll") # If config is RelWithDebInfo, package release files COMMAND if $==1 ( "${CMAKE_COMMAND}" -E make_directory "${RELEASE_DIR}/data/obs-plugins/obs-websocket" "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}") COMMAND if $==1 ("${CMAKE_COMMAND}" -E copy_directory "${PROJECT_SOURCE_DIR}/data" "${RELEASE_DIR}/data/obs-plugins/obs-websocket") COMMAND if $==1 ("${CMAKE_COMMAND}" -E copy "$" "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}") COMMAND if $==1 ("${CMAKE_COMMAND}" -E copy "$" "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}") # Copy to obs-studio dev environment for immediate testing COMMAND if $==1 ( "${CMAKE_COMMAND}" -E copy "$" "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$/obs-plugins/${ARCH_NAME}") COMMAND if $==1 ( "${CMAKE_COMMAND}" -E copy "$" "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$/obs-plugins/${ARCH_NAME}") COMMAND if $==1 ( "${CMAKE_COMMAND}" -E make_directory "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$/data/obs-plugins/obs-websocket") COMMAND if $==1 ( "${CMAKE_COMMAND}" -E copy_directory "${PROJECT_SOURCE_DIR}/data" "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$/data/obs-plugins/obs-websocket") ) # --- End of sub-section --- endif() # --- End of section --- # --- Linux-specific build settings and tasks --- if(UNIX AND NOT APPLE) include(GNUInstallDirs) set_target_properties(obs-websocket PROPERTIES PREFIX "") target_link_libraries(obs-websocket obs-frontend-api) file(GLOB locale_files data/locale/*.ini) set(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) if(${USE_UBUNTU_FIX}) install(TARGETS obs-websocket LIBRARY DESTINATION "/usr/lib/obs-plugins" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) endif() install(TARGETS obs-websocket LIBRARY DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/obs-plugins" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) install(FILES ${locale_files} DESTINATION "${CMAKE_INSTALL_FULL_DATAROOTDIR}/obs/obs-plugins/obs-websocket/locale") endif() # --- End of section --- # -- OS X specific build settings and tasks -- if(APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -fvisibility=default") set(CMAKE_SKIP_RPATH TRUE) set_target_properties(obs-websocket PROPERTIES PREFIX "") target_link_libraries(obs-websocket "${OBS_FRONTEND_LIB}") endif() # -- End of section --