cmake_minimum_required(VERSION 2.6)

# make burst backprojection kernels
set(COMMON_TEMPLATE templates/common.in)
set(DEFINITIONS templates/definitions.in)
set(Z_TEMPLATE templates/z_template.in)
set(LAMINO_TEMPLATE templates/lamino_template.in)
set(CENTER_TEMPLATE templates/center_template.in)
set(ROLL_TEMPLATE templates/roll_template.in)
set(GENERATOR tools/make_burst_kernels.py)
set(Z_KERNEL z_kernel.cl)
set(LAMINO_KERNEL lamino_kernel.cl)
set(CENTER_KERNEL center_kernel.cl)
set(ROLL_KERNEL roll_kernel.cl)

add_custom_command(
    OUTPUT ${Z_KERNEL} ${CENTER_KERNEL} ${LAMINO_KERNEL} ${ROLL_KERNEL}
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${GENERATOR} ${GENERATOR}
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${COMMON_TEMPLATE} ${COMMON_TEMPLATE}
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${DEFINITIONS} ${DEFINITIONS}
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${Z_TEMPLATE} ${Z_TEMPLATE}
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${CENTER_TEMPLATE} ${CENTER_TEMPLATE}
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${LAMINO_TEMPLATE} ${LAMINO_TEMPLATE}
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${ROLL_TEMPLATE} ${ROLL_TEMPLATE}
    COMMAND python ${GENERATOR} ${Z_TEMPLATE} 1 2 4 8 16 > ${Z_KERNEL}
    COMMAND python ${GENERATOR} ${CENTER_TEMPLATE} 1 2 4 8 16 > ${CENTER_KERNEL}
    COMMAND python ${GENERATOR} ${LAMINO_TEMPLATE} 1 2 4 8 16 > ${LAMINO_KERNEL}
    COMMAND python ${GENERATOR} ${ROLL_TEMPLATE} 1 2 4 8 16 > ${ROLL_KERNEL}
    DEPENDS ${GENERATOR} ${COMMON_TEMPLATE} ${DEFINITIONS} ${Z_TEMPLATE} ${CENTER_TEMPLATE} ${LAMINO_TEMPLATE} ${ROLL_TEMPLATE}
    COMMENT "Generating burst backprojection kernels")

add_custom_target(burst ALL
    DEPENDS ${Z_KERNEL} ${CENTER_KERNEL} ${LAMINO_KERNEL} ${ROLL_KERNEL})

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${Z_KERNEL} DESTINATION ${UFO_KERNELDIR})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CENTER_KERNEL} DESTINATION ${UFO_KERNELDIR})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LAMINO_KERNEL} DESTINATION ${UFO_KERNELDIR})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${ROLL_KERNEL} DESTINATION ${UFO_KERNELDIR})

# copy kernels
file(GLOB ufofilter_KERNELS "*.cl")

foreach(_kernel ${ufofilter_KERNELS})
    install(FILES ${_kernel} DESTINATION ${UFO_KERNELDIR})
endforeach()
