if(HAVE_ARMPL)
  set(ARMPL_HAL_VERSION 0.0.1 CACHE INTERNAL "")
  set(ARMPL_HAL_LIBRARIES "armpl_hal" CACHE INTERNAL "")
  set(ARMPL_HAL_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include" CACHE INTERNAL "")
  set(ARMPL_HAL_HEADERS
    "${CMAKE_CURRENT_SOURCE_DIR}/include/armpl_hal_core.hpp"
    CACHE INTERNAL "")
  file(GLOB ARMPL_HAL_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
  add_library(armpl_hal STATIC ${OPENCV_3RDPARTY_EXCLUDE_FROM_ALL} ${ARMPL_HAL_FILES})
  target_include_directories(armpl_hal PRIVATE
    ${CMAKE_SOURCE_DIR}/modules/core/include
    ${CMAKE_BINARY_DIR}
    ${ARMPL_HAL_INCLUDE_DIRS}
    ${ARMPL_INCLUDE_PATH})
  if(TARGET armpl)
    get_target_property(ARMPL_HAL_RUNTIME armpl IMPORTED_LOCATION)
  endif()
  if(HAVE_LAPACK AND LAPACK_IMPL STREQUAL "Built-In" AND ARMPL_HAL_RUNTIME MATCHES "${CMAKE_SHARED_LIBRARY_SUFFIX}$")
    get_filename_component(ARMPL_HAL_RUNTIME_NAME "${ARMPL_HAL_RUNTIME}" NAME)
    target_link_libraries(armpl_hal PUBLIC ${LAPACK_LIBRARIES})
    target_compile_definitions(armpl_hal PRIVATE ARMPL_HAL_CBLAS_LIB="${ARMPL_HAL_RUNTIME_NAME}")
    get_filename_component(ARMPL_HAL_RUNTIME_DIR "${ARMPL_HAL_RUNTIME}" DIRECTORY)
    find_file(ARMPL_OMP_RUNTIME NAMES "libomp${CMAKE_SHARED_LIBRARY_SUFFIX}" PATHS "${ARMPL_HAL_RUNTIME_DIR}" NO_DEFAULT_PATH)
    if(ARMPL_LIB_NAME MATCHES "_mp$" AND ARMPL_OMP_RUNTIME)
      get_filename_component(ARMPL_OMP_RUNTIME_NAME "${ARMPL_OMP_RUNTIME}" NAME)
      target_compile_definitions(armpl_hal PRIVATE ARMPL_HAL_OMP_LIB="${ARMPL_OMP_RUNTIME_NAME}")
    endif()
  endif()
  target_link_libraries(armpl_hal PUBLIC ${ARMPL_LIBRARY})
  if(WITH_OPENMP AND OpenMP_CXX_FOUND)
    target_link_libraries(armpl_hal PUBLIC OpenMP::OpenMP_CXX)
  endif()
  set_target_properties(armpl_hal PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH})
  if(NOT BUILD_SHARED_LIBS)
    ocv_install_target(armpl_hal EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
  endif()
  if(ENABLE_SOLUTION_FOLDERS)
    set_target_properties(armpl_hal PROPERTIES FOLDER "3rdparty")
  endif()
else()
  message(STATUS "ArmPL is not available, disabling related HAL")
endif(HAVE_ARMPL)
