#Find the VTK-m package
cmake_minimum_required(VERSION 3.3 FATAL_ERROR)
project(PointMerge CXX)

#Find the VTK-m package
find_package(VTKm REQUIRED QUIET)

OPTION(HIGH_ACCURACY "Enable high accuracy for merging points" ON)

IF(HIGH_ACCURACY)
    ADD_DEFINITIONS(-DACCURATE)
ENDIF(HIGH_ACCURACY)

add_executable(virtual PointMergeVirtualGrid.cxx)
target_link_libraries(virtual PRIVATE vtkm_cont vtkm_worklet)

add_executable(cluster VertexClustering.cxx)
target_link_libraries(cluster PRIVATE vtkm_cont vtkm_worklet)

add_executable(locator PointMergePointLocator.cxx)
target_link_libraries(locator PRIVATE vtkm_cont vtkm_worklet)

if(TARGET vtkm::tbb)
  add_executable(virtual_tbb PointMergeVirtualGridTBB.cxx)
  target_link_libraries(virtual_tbb PRIVATE vtkm_cont vtkm_worklet)

  add_executable(cluster VertexClusteringTBB.cxx)
  target_link_libraries(cluster_tbb PRIVATE vtkm_cont vtkm_worklet)

  add_executable(locator_tbb PointMergePointLocatorTBB.cxx)
  target_link_libraries(locator_tbb PRIVATE vtkm_cont vtkm_worklet)
endif()

if(TARGET vtkm::cuda)
  add_executable(virtual_cuda PointMergeVirtualGrid.cu)
  target_link_libraries(virtual_cuda PRIVATE vtkm_cont vtkm_worklet)

  add_executable(cluster VertexClustering.cu)
  target_link_libraries(cluster_cuda PRIVATE vtkm_cont vtkm_worklet)

  add_executable(locator_cuda PointMergePointLocator.cu)
  target_link_libraries(locator_cuda PRIVATE vtkm_cont vtkm_worklet)
endif()
