cmake_minimum_required(VERSION 3.10)

project(rv1126b_jp_lpr_v2 C CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(NOT DEFINED LPR_SYSROOT)
    set(LPR_SYSROOT "/mnt")
endif()

message(STATUS "LPR_SYSROOT=${LPR_SYSROOT}")

find_package(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs)

find_path(RKNN_API_INCLUDE_DIR
    NAMES rknn_api.h
    PATHS
        ${LPR_SYSROOT}/usr/include
        ${LPR_SYSROOT}/usr/include/rknn
        ${LPR_SYSROOT}/usr/local/include
    NO_DEFAULT_PATH
)

find_library(RKNNRT_LIB
    NAMES rknnrt
    PATHS
        ${LPR_SYSROOT}/usr/lib
        ${LPR_SYSROOT}/usr/lib/aarch64-linux-gnu
        ${LPR_SYSROOT}/usr/local/lib
        ${LPR_SYSROOT}/userdata
        ${LPR_SYSROOT}/userdata/lib
    NO_DEFAULT_PATH
)

if(NOT RKNN_API_INCLUDE_DIR)
    message(FATAL_ERROR "rknn_api.h not found under ${LPR_SYSROOT}")
endif()

if(NOT RKNNRT_LIB)
    message(FATAL_ERROR "librknnrt.so not found under ${LPR_SYSROOT}")
endif()

message(STATUS "OpenCV_INCLUDE_DIRS=${OpenCV_INCLUDE_DIRS}")
message(STATUS "OpenCV_LIBS=${OpenCV_LIBS}")
message(STATUS "RKNN_API_INCLUDE_DIR=${RKNN_API_INCLUDE_DIR}")
message(STATUS "RKNNRT_LIB=${RKNNRT_LIB}")

include_directories(
    ${OpenCV_INCLUDE_DIRS}
    ${RKNN_API_INCLUDE_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}/include
    ${CMAKE_CURRENT_SOURCE_DIR}/src
)

# Existing geometry / plate_corner test
add_executable(test-lpr-pipeline
    src/common.cpp
    src/rknn_model.cpp
    src/plate_corner_rknn.cpp
    src/lpr_pipeline.cpp
)

target_link_libraries(test-lpr-pipeline
    ${OpenCV_LIBS}
    ${RKNNRT_LIB}
    dl
    pthread
)

# New V2.1 full image RKNN demo
add_executable(test-lpr-v21-rknn
    src/test_lpr_v21_rknn.cpp
)

target_link_libraries(test-lpr-v21-rknn
    ${OpenCV_LIBS}
    ${RKNNRT_LIB}
    dl
    pthread
)
