diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a68423..3702c95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,12 +15,30 @@ add_library(obs-moq MODULE) if(${BUILD_PLUGIN}) find_package(libobs REQUIRED) - # FFmpeg dependency - include(FindPkgConfig) - pkg_check_modules(FFMPEG REQUIRED libavcodec libavutil libswscale libswresample) - target_include_directories(obs-moq PRIVATE ${FFMPEG_INCLUDE_DIRS}) - target_link_directories(obs-moq PRIVATE ${FFMPEG_LIBRARY_DIRS}) - target_link_libraries(obs-moq PRIVATE ${FFMPEG_LIBRARIES}) + + if (CMAKE_HOST_LINUX) + # Use pkg-config to find system libraries for Linux + include(FindPkgConfig) + pkg_check_modules(FFMPEG REQUIRED libavcodec libavutil libswscale libswresample) + target_include_directories(obs-moq PRIVATE ${FFMPEG_INCLUDE_DIRS}) + target_link_directories(obs-moq PRIVATE ${FFMPEG_LIBRARY_DIRS}) + target_link_libraries(obs-moq PRIVATE ${FFMPEG_LIBRARIES}) + else() + # FFmpeg dependency. Use provided pre-built dependancies + find_library(AVCODEC_LIB avcodec) + find_library(AVUTIL_LIB avutil) + find_library(SWSCALE_LIB swscale) + find_library(SWRESAMPLE_LIB swresample) + + if (AVCODEC_LIB) + target_link_libraries(obs-moq PRIVATE ${AVCODEC_LIB} ${AVUTIL_LIB} ${SWSCALE_LIB} ${SWRESAMPLE_LIB}) + endif() + endif() + + # Link required windows system libraries + if(OS_WINDOWS) + target_link_libraries(obs-moq PRIVATE Userenv ntdll) + endif() else() find_package(FFmpeg REQUIRED avcodec avutil swscale swresample) target_link_libraries(obs-moq PRIVATE FFmpeg::avcodec FFmpeg::avutil FFmpeg::swscale FFmpeg::swresample) diff --git a/README.md b/README.md index d5c3be3..384b284 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,12 @@ Prerequisites: * C++ Compiler (Clang/GCC/MSVC) * OBS Studio development libraries (libobs) * [Fork of OBS-Studio](https://github.com/brianmed/obs-studio) just to show MoQ in the UI. +* XCode 26.1 / macOS 15.6 1. Clone the repos: ```bash git clone https://github.com/moq-dev/obs.git moq-obs - git clone https://github.com/brianmed/obs-studio.git obs-studio + git clone --recurse-submodules https://github.com/brianmed/obs-studio.git obs-studio # optional: for local moq development git clone https://github.com/moq-dev/moq.git moq @@ -32,9 +33,21 @@ Prerequisites: ```bash cd obs-studio - # Replace with your platform + # Configure for Windows + cmake -G "Visual Studio 18 2026" -A x64 --preset windows-x64 + # Configure for macos cmake --preset macos - cmake --build --preset macos + + # Build for Windows + cmake --build --preset windows-x64 + + # Build for macOS + cd build_macos + xcodebuild \ + -configuration RelWithDebInfo \ + -scheme obs-studio \ + -parallelizeTargets \ + -destination "generic/platform=macOS,name=Any Mac" ``` 3. Configure the plugin: diff --git a/WINDOWS.md b/WINDOWS.md new file mode 100644 index 0000000..e7a39d8 --- /dev/null +++ b/WINDOWS.md @@ -0,0 +1,39 @@ +## Windows Build Instructions + +### Build Setup + +```powershell +Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) + choco install -y git + choco install -y cmake --installargs 'ADD_CMAKE_TO_PATH=System' + choco install visualstudio2026buildtools --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended" + choco install rustup +``` + +During the rustup installation choose the `nightly` variant. + +Locate "Visual Studio Installer". Click "Modify". Choose "Desktop Development with C++". Check C++ ATL For x64 + +### Build the OBS fork + +```powershell +cd obs-studio +cmake -G "Visual Studio 18 2026" -A x64 --preset windows-x64 +cmake --build --preset windows-x64 +``` + +### Build the obs-moq plugin and install + +```powershell +cd obs +cmake -G "Visual Studio 18 2026" -A x64 --preset windows-x64 -DMOQ_LOCAL="../moq" +cmake --build --preset windows-x64 --target install +``` + + + +## Debugging Moq Plugin + +```powershell + $env:RUST_LOG="debug"; $env:RUST_BACKTRACE=1; $env:OBS_LOG_LEVEL="debug"; Set-Location "build_x64\rundir\RelWithDebInfo\bin\64bit"; & .\obs64.exe --verbose +``` \ No newline at end of file diff --git a/buildspec.json b/buildspec.json index f4e18ba..f83bf8a 100644 --- a/buildspec.json +++ b/buildspec.json @@ -1,33 +1,33 @@ { "dependencies": { "obs-studio": { - "version": "31.1.1", + "version": "32.1.2", "baseUrl": "https://github.com/obsproject/obs-studio/archive/refs/tags", "label": "OBS sources", "hashes": { - "macos": "39751f067bacc13d44b116c5138491b5f1391f91516d3d590d874edd21292291", - "windows-x64": "2c8427c10b55ac6d68008df2e9a3e82f4647aaad18f105e30d4713c2de678ccf" + "macos": "b4a59410cddb46d0e31df1ee13b8ec66f30862d7e980c1a8c4e3b5d16fae6053", + "windows-x64": "21cba22292985cf0da967d5c618999b40eaa32b73d2ab8b06154b5ea1b3d3798" } }, "prebuilt": { - "version": "2025-07-11", + "version": "2025-08-23", "baseUrl": "https://github.com/obsproject/obs-deps/releases/download", "label": "Pre-Built obs-deps", "hashes": { - "macos": "495687e63383d1a287684b6e2e9bfe246bb8f156fe265926afb1a325af1edd2a", - "windows-x64": "c8c642c1070dc31ce9a0f1e4cef5bb992f4bff4882255788b5da12129e85caa7" + "macos": "9403bb43fb0a9bb215739a5659ca274fe884dbbbcd22bd9ca781c961fb041c42", + "windows-x64": "8de229cff6f1981508c0eb646b35e644633a5855787b9f5d3b90ae2aeb87ffc1" } }, "qt6": { - "version": "2025-07-11", + "version": "2025-08-23", "baseUrl": "https://github.com/obsproject/obs-deps/releases/download", "label": "Pre-Built Qt6", "hashes": { - "macos": "d3f5f04b6ea486e032530bdf0187cbda9a54e0a49621a4c8ba984c5023998867", - "windows-x64": "0e76bf0555dd5382838850b748d3dcfab44a1e1058441309ab54e1a65b156d0a" + "macos": "990f11638b80a4509e14e8c315f6e4caa0861e37fcd3113a256fbff835ffca29", + "windows-x64": "c62e82483bc7c0bf199e8ac3220c66a85a6e8a0cd69a05b6d44f873b830e415f" }, "debugSymbols": { - "windows-x64": "11b7be92cf66a273299b8f3515c07a5cfb61614b59a4e67f7fc5ecba5e2bdf21" + "windows-x64": "ef4954fa18c818103f63415776624fa1e403c3faaa7b0a7b259000cc35b2c9fc" } } }, diff --git a/cmake/common/buildspec_common.cmake b/cmake/common/buildspec_common.cmake index 59212c3..b84ac98 100644 --- a/cmake/common/buildspec_common.cmake +++ b/cmake/common/buildspec_common.cmake @@ -60,6 +60,20 @@ function(_setup_obs_studio) set(_cmake_generator "Xcode") set(_cmake_arch "-DCMAKE_OSX_ARCHITECTURES:STRING='arm64;x86_64'") set(_cmake_extra "-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}") + + #Patch libobs-metal if required + if (_obs_version VERSION_LESS_EQUAL "32.1.2") + + file(READ "${dependencies_dir}/${_obs_destination}/libobs-metal/CMakeLists.txt" CONTENTS) + + #check if Swift is not available + if(NOT "${CONTENTS}" MATCHES "enable_language\\(Swift\\)") + string(REGEX REPLACE "cmake_minimum_required\\(VERSION 3.28...3.30\\)" "cmake_minimum_required(VERSION 3.28...3.30)\nenable_language(Swift)" NEW_CONTENTS "${CONTENTS}") + message(STATUS "Patching libobs-metal") + file(WRITE "${dependencies_dir}/${_obs_destination}/libobs-metal/CMakeLists.txt" "${NEW_CONTENTS}") + endif() + + endif() endif() message(STATUS "Configure ${label} (${arch})") diff --git a/cmake/macos/compilerconfig.cmake b/cmake/macos/compilerconfig.cmake index 475e8ee..89657a8 100644 --- a/cmake/macos/compilerconfig.cmake +++ b/cmake/macos/compilerconfig.cmake @@ -16,8 +16,8 @@ add_compile_options("$<$>:-fopenmp-simd>") # Ensure recent enough Xcode and platform SDK function(check_sdk_requirements) - set(obs_macos_minimum_sdk 15.0) # Keep in sync with Xcode - set(obs_macos_minimum_xcode 16.0) # Keep in sync with SDK + set(obs_macos_minimum_sdk 26.1) # Keep in sync with Xcode + set(obs_macos_minimum_xcode 26.1) # Keep in sync with SDK execute_process( COMMAND xcrun --sdk macosx --show-sdk-platform-version OUTPUT_VARIABLE obs_macos_current_sdk diff --git a/cmake/windows/defaults.cmake b/cmake/windows/defaults.cmake index c6ec842..bea3ef3 100644 --- a/cmake/windows/defaults.cmake +++ b/cmake/windows/defaults.cmake @@ -8,9 +8,10 @@ set(CMAKE_FIND_PACKAGE_TARGETS_GLOBAL TRUE) include(buildspec) if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + cmake_path(SET ALLUSERSPROFILE_PATH $ENV{ALLUSERSPROFILE}) set( CMAKE_INSTALL_PREFIX - "$ENV{ALLUSERSPROFILE}/obs-studio/plugins" + "${ALLUSERSPROFILE_PATH}/obs-studio/plugins" CACHE STRING "Default plugin installation directory" FORCE diff --git a/justfile b/justfile index 4a95984..49220e7 100644 --- a/justfile +++ b/justfile @@ -30,7 +30,7 @@ build preset="": set -euo pipefail PRESET=$(just preset "{{preset}}") - cmake --build --preset "$PRESET" + cmake --build --preset "$PRESET" --target install # Run a local fork of OBS Studio with the plugin loaded # TODO support for other platforms