project(mask)

cmake_minimum_required(VERSION 3.1)

include_directories(include)

set(ALX_LIBRARY_DIR "/usr/local/lib/ALX")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set (CMAKE_CXX_STANDARD 11)

find_library(ALXToolBox NAMES "ALXToolBox" REQUIRED PATHS ${ALX_LIBRARY_DIR} NO_DEFAULT_PATH)
find_library(ALXCommon NAMES "ALXCommon" REQUIRED PATHS ${ALX_LIBRARY_DIR} NO_DEFAULT_PATH)
find_library(ALXData NAMES "ALXData" REQUIRED PATHS ${ALX_LIBRARY_DIR} NO_DEFAULT_PATH)
find_library(ALXModule NAMES "ALXModule" REQUIRED PATHS ${ALX_LIBRARY_DIR} NO_DEFAULT_PATH)
find_library(ALXOpenCV NAMES "ALXOpenCV" REQUIRED PATHS ${ALX_LIBRARY_DIR} NO_DEFAULT_PATH)

find_package(OpenCV REQUIRED)

add_library(utils src/utils.cpp src/utils.h)

add_library(detector_common src/detector_common.cpp src/detector_common.h)
target_link_libraries(detector_common ${OpenCV_LIBS})
target_link_libraries(detector_common utils)

add_library(detector_color src/detector_color.cpp src/detector_color.h)
target_link_libraries(detector_color detector_common)
target_link_libraries(detector_color ${OpenCV_LIBS})
target_link_libraries(detector_color utils)
target_link_libraries(detector_color pthread)

add_executable(color src/color.cpp)
target_link_libraries(color detector_color)

add_library(detector_aruco src/detector_aruco.cpp src/detector_aruco.h)
target_link_libraries(detector_aruco detector_common)
target_link_libraries(detector_aruco ${OpenCV_LIBS})

add_executable(aruco src/aruco.cpp)
target_link_libraries(aruco detector_aruco)
target_link_libraries(aruco detector_color)
target_link_libraries(aruco utils)

add_executable(timing src/timing.cpp)
target_link_libraries(timing detector_aruco)
target_link_libraries(timing detector_color)
target_link_libraries(timing detector_common)
target_link_libraries(timing utils)
target_link_libraries(timing ${OpenCV_LIBS})

IF(${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")
add_executable(drovisio src/Drovisio.cpp)
target_link_libraries(drovisio detector_color)
target_include_directories(drovisio PRIVATE ./include/ALX/)
target_link_libraries(drovisio ${ALXOpenCV} ${ALXModule} ${ALXData} ${ALXCommon} ${ALXToolBox})
target_link_libraries(drovisio detector_aruco)
target_link_libraries(drovisio utils)
target_link_libraries(drovisio detector_common)
ENDIF(${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")

add_executable(frame src/frame.cpp)
target_link_libraries(frame ${OpenCV_LIBS})
target_link_libraries(frame detector_color)
target_link_libraries(frame cppunit)

add_executable(main src/main.cpp)
target_link_libraries(main detector_color)
target_link_libraries(main detector_aruco)

add_executable(landing src/landing.cpp)
target_link_libraries(landing detector_color)

add_executable(outputMeasures src/output_measures.cpp)
target_link_libraries(outputMeasures detector_color)
target_link_libraries(outputMeasures detector_aruco)
target_link_libraries(outputMeasures detector_common)


option(BUILD_DOC "Build documentation" ON)

# Timing measurements commands
add_custom_target(timing_measurement
        COMMAND ./build/timing 0 videos/timing/0.avi > ./timing-0.csv
        COMMAND ./build/timing 1 videos/timing/1.avi > ./timing-1.csv
        COMMAND ./build/timing 2 videos/timing/2.avi > ./timing-2.csv
        COMMAND ./build/timing 3 videos/timing/3.avi > ./timing-3.csv
        DEPENDS timing
        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)

find_package(Doxygen)
if (DOXYGEN_FOUND)
    # set input and output files
    set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile.in)
    set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)

    # request to configure the file
    configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)
    message("Doxygen build started")

    # note the option ALL which allows to build the docs together with the application
    add_custom_target( doc_doxygen ALL
            COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
            COMMENT "Generating API documentation with Doxygen"
            VERBATIM )
else (DOXYGEN_FOUND)
    message("Doxygen need to be installed to generate the doxygen documentation")
endif (DOXYGEN_FOUND)
