find_package(OpenCV)

set(AUTOCROP_SOURCES
    autoCrop.cpp
    autoCropConfig.cpp
    autoCropAlgorithm.cpp)

set(AUTOCROP_HEADERS
    autoCrop.hpp
    autoCropConfig.hpp
    autoCropAlgorithm.hpp)

set(VS_LIB_ROOT_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/..)


function(configure_target BACKEND_NAME)
  add_library(autocrop_${BACKEND_NAME} OBJECT ${AUTOCROP_SOURCES} ${AUTOCROP_HEADERS})
  add_cppcheck(autocrop_${BACKEND_NAME} VS)
  set_property(TARGET autocrop_${BACKEND_NAME} PROPERTY FOLDER "lib")

  target_include_directories(autocrop_${BACKEND_NAME}
                             SYSTEM
                             PRIVATE ${CMAKE_EXTERNAL_DEPS}/include
                             PRIVATE ${CMAKE_EXTERNAL_DEPS}/include/ceres
                             PRIVATE ${EIGEN3_INCLUDE_DIRS}
                             PRIVATE ${CMAKE_EXTERNAL_DEPS}/include/glog
                             PRIVATE ${OpenCV_INCLUDE_DIRS})

  if (WINDOWS)
    target_compile_definitions(autocrop_${BACKEND_NAME} PRIVATE VS_LIB_COMPILATION NOMINMAX _USE_MATH_DEFINES)
  endif(WINDOWS)

  include_discovery_vs_headers(autocrop_${BACKEND_NAME})
  include_lib_vs_headers(autocrop_${BACKEND_NAME})

  if (UNIX)
    set_property(TARGET autocrop_${BACKEND_NAME} PROPERTY POSITION_INDEPENDENT_CODE TRUE)
  endif (UNIX)

  target_include_directories(autocrop_${BACKEND_NAME} PRIVATE ${VS_LIB_ROOT_SRC_DIR})
  target_compile_definitions(autocrop_${BACKEND_NAME} PRIVATE VS_${BACKEND_NAME})

  foreach(vs_lib_sys_include ${VS_LIB_SYSTEM_INCLUDES})
    target_include_directories(autocrop_${BACKEND_NAME} SYSTEM PRIVATE ${vs_lib_sys_include})
  endforeach()

  set_property(TARGET autocrop_${BACKEND_NAME} PROPERTY CXX_STANDARD 14)
endfunction()

if(GPU_BACKEND_CUDA)
  configure_target("CUDA")
endif()
if(GPU_BACKEND_OPENCL)
  configure_target("OPENCL")
endif()