cmake_minimum_required(VERSION 3.20)
project(pmnw_obs_release VERSION 2026.9.10 LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(OBS_SOURCE_DIR "" CACHE PATH "Pinned OBS 32.2.1 source")
set(SIMDE_SOURCE_DIR "" CACHE PATH "Pinned SIMDe 0.8.2 source")
set(OBS_LINK_LIBRARY "" CACHE FILEPATH "Target OBS library or import library")
if(NOT EXISTS "${OBS_SOURCE_DIR}/libobs/obs-module.h" OR NOT EXISTS "${SIMDE_SOURCE_DIR}/simde/x86/sse2.h")
  message(FATAL_ERROR "Provide pinned OBS and SIMDe source directories")
endif()
configure_file(source/convstar-obs-plugin/obsconfig.h.in obsconfig.h @ONLY)
set(BFFT_BUILD_SHARED OFF CACHE BOOL "" FORCE)
set(BFFT_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(BFFT_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(BFFT_BUILD_PROBES OFF CACHE BOOL "" FORCE)
# Portable baseline. Never let the build host silently raise the x86 ISA floor.
set(BFFT_ENABLE_AUTO_SIMD OFF CACHE BOOL "" FORCE)
add_subdirectory(source bfft-core EXCLUDE_FROM_ALL)
add_library(realtime-vector-fx MODULE source/realtime_vector_fx/src/engine.cpp source/realtime_vector_fx/src/entropy_stretch.cpp source/realtime_vector_fx/obs/plugin-main.cpp source/realtime_vector_fx/obs/gpu-filter.cpp source/realtime_vector_fx/obs/entropy-filter.cpp)
target_include_directories(realtime-vector-fx PRIVATE source/realtime_vector_fx/include)
add_library(convstar-support MODULE source/convstar-obs-plugin/convstar-support-filter.cpp)
add_library(bfft-cartoon MODULE source/obs-plugin/bfft-cartoon-filter.cpp source/high_vision/obs/high-vision-obs-filter.cpp)
target_link_libraries(bfft-cartoon PRIVATE bfft::static high_vision::high_vision)
foreach(module realtime-vector-fx convstar-support bfft-cartoon)
  target_include_directories(${module} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}" "${OBS_SOURCE_DIR}/libobs" "${OBS_SOURCE_DIR}/libobs/util" "${SIMDE_SOURCE_DIR}")
  set_target_properties(${module} PROPERTIES PREFIX "")
  if(OBS_LINK_LIBRARY)
    target_link_libraries(${module} PRIVATE "${OBS_LINK_LIBRARY}")
  endif()
  if(APPLE)
    set_target_properties(${module} PROPERTIES SUFFIX "" BUILD_WITH_INSTALL_RPATH TRUE INSTALL_RPATH "@executable_path/../Frameworks")
  elseif(MINGW)
    target_compile_definitions(${module} PRIVATE _WIN32_WINNT=0x0A00)
    target_link_options(${module} PRIVATE -static -static-libgcc -static-libstdc++)
  elseif(UNIX)
    set_target_properties(${module} PROPERTIES SKIP_BUILD_RPATH TRUE)
    target_link_options(${module} PRIVATE -Wl,--allow-shlib-undefined)
  endif()
endforeach()
