set(DBCSR_OPENCL_PARAMS_WITHGPU
    ${CMAKE_CURRENT_SOURCE_DIR}/params/tune_multiply_${WITH_GPU}.csv)
set(DBCSR_OPENCL_PARAMS_CUSTOM ${CMAKE_CURRENT_SOURCE_DIR}/tune_multiply.csv)

if (EXISTS ${DBCSR_OPENCL_PARAMS_WITHGPU})
  set(DBCSR_OPENCL_SCRIPT_MSG
      "ACC/LIBSMM OpenCL: using parameters for ${WITH_GPU}")
  set(DBCSR_OPENCL_PARAMS ${DBCSR_OPENCL_PARAMS_WITHGPU})
elseif (WITH_GPU MATCHES "none")
  set(DBCSR_OPENCL_SCRIPT_MSG "ACC/LIBSMM OpenCL: no tuned parameters used")
  set(DBCSR_OPENCL_SCRIPT_ARGS -p \"\")
elseif (EXISTS ${DBCSR_OPENCL_PARAMS_CUSTOM})
  set(DBCSR_OPENCL_SCRIPT_MSG "ACC/LIBSMM OpenCL: using custom parameters")
  set(DBCSR_OPENCL_PARAMS ${DBCSR_OPENCL_PARAMS_CUSTOM})
else ()
  set(DBCSR_OPENCL_SCRIPT_MSG "ACC/LIBSMM OpenCL: using all tuned parameters")
endif ()
message(STATUS ${DBCSR_OPENCL_SCRIPT_MSG})

set(DBCSR_OPENCL_KERNELS kernels/multiply.cl kernels/transpose.cl)
list(TRANSFORM DBCSR_OPENCL_KERNELS PREPEND ${CMAKE_CURRENT_SOURCE_DIR}/)

list(APPEND DBCSR_OPENCL_DEPENDS ${DBCSR_ACC_HEADER} ${DBCSR_OPENCL_COMMON})
list(TRANSFORM DBCSR_OPENCL_DEPENDS PREPEND ${DBCSR_SOURCE_DIR}/)

set(DBCSR_OPENCL_KHEADER opencl_kernels.h)

add_custom_command(
  COMMAND
    ${DBCSR_OPENCL_SCRIPT} ${DBCSR_OPENCL_SCRIPT_ARGS} ${DBCSR_OPENCL_KERNELS}
    ${DBCSR_OPENCL_PARAMS} ${CMAKE_CURRENT_SOURCE_DIR}/${DBCSR_OPENCL_KHEADER}
  DEPENDS ${DBCSR_OPENCL_DEPENDS} ${DBCSR_OPENCL_KERNELS} ${DBCSR_OPENCL_SCRIPT}
          ${DBCSR_OPENCL_PARAMS}
  OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${DBCSR_OPENCL_KHEADER}
  COMMENT ${DBCSR_OPENCL_SCRIPT_MSG})

add_custom_target(${DBCSR_OPENCL_KHEADER}
                  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${DBCSR_OPENCL_KHEADER})
add_dependencies(dbcsr ${DBCSR_OPENCL_KHEADER})

target_include_directories(dbcsr PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
                                         ${CMAKE_CURRENT_SOURCE_DIR})
