# ANSFR — Face Recognition DLL (ONNX + TensorRT + FAISS + SQLite)
# Explicit source list from original vcxproj
set(ANSFR_SOURCES
    ANSFR.cpp
    ANSFRCommon.cpp
    ANSFaceRecognizer.cpp
    ANSGpuFrameRegistry.cpp
    GpuNV12SlotPool.cpp
    FaceDatabase.cpp
    FaceNet.cpp
    dllmain.cpp
    pch.cpp
    sqlite3.c
    # Engine sources compiled into ANSFR
    ${CMAKE_SOURCE_DIR}/engines/ONNXEngine/ONNXEngine.cpp
    ${CMAKE_SOURCE_DIR}/engines/OpenVINOEngine/src/faceapp/cnn.cpp
    ${CMAKE_SOURCE_DIR}/engines/OpenVINOEngine/src/utils/args_helper.cpp
    ${CMAKE_SOURCE_DIR}/engines/OpenVINOEngine/src/utils/common.cpp
)
file(GLOB ANSFR_HEADERS "*.h")

add_library(ANSFR SHARED ${ANSFR_SOURCES} ${ANSFR_HEADERS})

target_include_directories(ANSFR PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}
)

target_include_directories(ANSFR PRIVATE
    ${CMAKE_SOURCE_DIR}/engines/ONNXEngine
    ${CMAKE_SOURCE_DIR}/engines/OpenVINOEngine/include
    ${CMAKE_SOURCE_DIR}/engines/TensorRTAPI/include
    ${CMAKE_SOURCE_DIR}/modules/ANSODEngine
    ${SHARED_INCLUDE_DIR}
)

target_include_directories(ANSFR PRIVATE
    ${CMAKE_SOURCE_DIR}/modules/ANSMOT
    ${CMAKE_SOURCE_DIR}/engines/OpenVINOEngine/include/faceapp
    ${ANSLIBS_DIR}/faiss
    ${ANSLIBS_DIR}          # for hnswlib/hnswlib.h
    ${ANSLIBS_DIR}/nlohmann
)

target_link_libraries(ANSFR
    PUBLIC  ANSLibsLoader
    PRIVATE ANSODEngine
    PUBLIC  ANSLicensingSystem   # PUBLIC: SPDLogger/FileExist symbols must be re-exported
    PRIVATE labview
    PRIVATE spdlog_dep
    PRIVATE opencv
    PRIVATE onnxruntime
    PRIVATE tensorrt
    PRIVATE openvino
    PRIVATE faiss
    PRIVATE mkl
    PRIVATE boost
    PRIVATE ANSMOT
    PRIVATE CUDA::cudart_static
    PRIVATE CUDA::cublas
    PRIVATE CUDA::cublasLt
    PRIVATE nvinfer_10.lib
    PRIVATE nvonnxparser_10.lib
    PRIVATE bcrypt.lib
)

# Boost asio/beast/uuid headers (already in boost/include/boost/)
# No extra include needed — covered by the boost interface target

target_compile_definitions(ANSFR PRIVATE UNICODE _UNICODE
    ANSFR_EXPORTS
    ENGINE_EXPORTS
    ORT_API_MANUAL_INIT
    _USRDLL
)

target_precompile_headers(ANSFR PRIVATE pch.h)

# sqlite3.c is pure C — skip precompiled headers and force C language
set_source_files_properties(sqlite3.c PROPERTIES
    SKIP_PRECOMPILE_HEADERS ON
    LANGUAGE C
)
