cmake_minimum_required(VERSION 3.15)
project(sherpa_server LANGUAGES CXX)

# 64-bit helper. Must match sherpa-onnx DLL bitness (shipped x64). Runs as a
# separate process from the 32-bit FNV plugin, so mismatched bitness is fine.
if(MSVC AND NOT DEFINED CMAKE_GENERATOR_PLATFORM)
    message(FATAL_ERROR
        "Configure with -A x64 — sherpa_server must be 64-bit "
        "to match the shipped sherpa-onnx DLLs.")
endif()

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

get_filename_component(_default_sherpa_dir
    "${CMAKE_CURRENT_LIST_DIR}/../../third-party/sherpa-onnx" ABSOLUTE)
set(SHERPA_DIR
    "${_default_sherpa_dir}"
    CACHE PATH "Path to the sherpa-onnx SDK (must have include/ and lib/)")

if(NOT EXISTS "${SHERPA_DIR}/include/sherpa-onnx/c-api/c-api.h")
    message(FATAL_ERROR
        "sherpa-onnx headers not found under ${SHERPA_DIR}. "
        "Run 'bash mod/install-sherpa-onnx.sh' to stage the SDK, or "
        "point -DSHERPA_DIR at the folder containing include/ and lib/.")
endif()

add_executable(sherpa_server main.cpp tray_icon_win32.cpp)

target_include_directories(sherpa_server PRIVATE "${SHERPA_DIR}/include")
target_link_directories(sherpa_server PRIVATE    "${SHERPA_DIR}/lib")
target_link_libraries(sherpa_server PRIVATE      sherpa-onnx-c-api)

if(MSVC)
    target_compile_options(sherpa_server PRIVATE /O2 /W3 /D_CRT_SECURE_NO_WARNINGS)
    set_property(TARGET sherpa_server PROPERTY
                 MSVC_RUNTIME_LIBRARY "MultiThreaded")
    set_target_properties(sherpa_server PROPERTIES
        LINK_FLAGS "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
endif()

set_target_properties(sherpa_server PROPERTIES
    OUTPUT_NAME "sherpa_server"
    SUFFIX ".exe"
)
