cmake_minimum_required(VERSION 3.25)
project(edgarstudio_obs_usermode VERSION 0.12.3 LANGUAGES CXX)
if(NOT WIN32)
    message(FATAL_ERROR "Windows only")
endif()
set(OBS_HEADERS_DIR "" CACHE PATH "Path to OBS libobs source headers")
set(OBS_IMPORT_LIB "" CACHE FILEPATH "Generated obs.lib import library")
set(SIMDE_DIR "" CACHE PATH "Path containing simde/ directory")
if(NOT EXISTS "${OBS_HEADERS_DIR}/obs-module.h")
    message(FATAL_ERROR "OBS_HEADERS_DIR must point to obs-studio/libobs")
endif()
if(NOT EXISTS "${OBS_IMPORT_LIB}")
    message(FATAL_ERROR "OBS_IMPORT_LIB not found")
endif()
if(NOT EXISTS "${SIMDE_DIR}/simde/x86/sse2.h")
    message(FATAL_ERROR "SIMDE_DIR must contain simde/x86/sse2.h")
endif()
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/generated")
set(EDGAR_OBSCONFIG_CONTENT
"#pragma once
#define OBS_DATA_PATH \"data\"
#define OBS_PLUGIN_PATH \"obs-plugins\"
#define OBS_PLUGIN_DESTINATION \"obs-plugins/64bit\"
#define OBS_RELEASE_CANDIDATE 0
#define OBS_BETA 0
")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/generated/obsconfig.h" "${EDGAR_OBSCONFIG_CONTENT}")
add_library(edgarstudio-obs MODULE
    ../src/obs_plugin/obs_edgarstudio_module.cpp
    ../src/common/protocol.h
)
target_include_directories(edgarstudio-obs PRIVATE
    "${CMAKE_CURRENT_BINARY_DIR}/generated"
    "${OBS_HEADERS_DIR}"
    "${SIMDE_DIR}"
    "${CMAKE_CURRENT_SOURCE_DIR}/../src"
)
target_compile_features(edgarstudio-obs PRIVATE cxx_std_20)
target_compile_definitions(edgarstudio-obs PRIVATE WIN32_LEAN_AND_MEAN NOMINMAX _WIN32_WINNT=0x0A00 WINVER=0x0A00 HAVE_OBSCONFIG_H)
target_compile_options(edgarstudio-obs PRIVATE /permissive- /W4 /EHsc /utf-8)
target_link_libraries(edgarstudio-obs PRIVATE "${OBS_IMPORT_LIB}")
set_target_properties(edgarstudio-obs PROPERTIES PREFIX "" OUTPUT_NAME "edgarstudio-obs")
set_property(TARGET edgarstudio-obs PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")


# EdgarStudio OBS module data layer.
set(EDGAR_OBS_DATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/data")
if(NOT EXISTS "${EDGAR_OBS_DATA_DIR}/locale/en-US.ini")
    message(FATAL_ERROR "Missing OBS locale data: ${EDGAR_OBS_DATA_DIR}/locale/en-US.ini")
endif()

add_custom_command(TARGET edgarstudio-obs POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E make_directory
            "$<TARGET_FILE_DIR:edgarstudio-obs>/data/locale"
    COMMAND ${CMAKE_COMMAND} -E copy_directory
            "${EDGAR_OBS_DATA_DIR}/locale"
            "$<TARGET_FILE_DIR:edgarstudio-obs>/data/locale"
    VERBATIM
)
