PROJECT(OTB-HPC)

cmake_minimum_required(VERSION 2.6)

FIND_PACKAGE(OTB)
IF(OTB_FOUND)
  INCLUDE(${OTB_USE_FILE})
ELSE(OTB_FOUND)
  MESSAGE(FATAL_ERROR
          "OTB not found. Please set OTB_DIR")
ENDIF(OTB_FOUND)

ADD_EXECUTABLE(densityCPU densityCPU.cxx)
TARGET_LINK_LIBRARIES(densityCPU OTBCommon OTBIO)

ADD_EXECUTABLE(FineCorrelation FineCorrelation.cxx)
TARGET_LINK_LIBRARIES(FineCorrelation OTBCommon OTBIO)

ADD_EXECUTABLE(NDVICPU NDVICPU.cxx)
TARGET_LINK_LIBRARIES(NDVICPU OTBCommon OTBIO OTBRadiometry)

ADD_EXECUTABLE(SAMCPU SAMCPU.cxx)
TARGET_LINK_LIBRARIES(SAMCPU OTBCommon OTBIO OTBRadiometry)

ADD_EXECUTABLE(svmCPU svmCPU.cxx)
TARGET_LINK_LIBRARIES(svmCPU OTBCommon OTBIO OTBLearning)


#Searching CUDA
FIND_PACKAGE(CUDA)

IF(CUDA_FOUND)
  IF(NOT CUDA_SDK_ROOT_DIR)
    FIND_PATH(CUDA_SDK_ROOT_DIR C/common/inc/cutil.h
       $ENV{HOME}/NVIDIA_GPU_Computing_SDK)
  ENDIF(NOT CUDA_SDK_ROOT_DIR)

  FIND_LIBRARY(CUTIL_LIBRARY NAMES cutil_i386 cutil_x86_64 PATHS ${CUDA_SDK_ROOT_DIR}/C/lib)
  FIND_LIBRARY(SHRUTIL_LIBRARY NAMES shrutil_i386 shrutil_x86_64 PATHS ${CUDA_SDK_ROOT_DIR}/shared/lib)
  
  #Include the FindCUDA script
  INCLUDE(FindCUDA)

  INCLUDE_DIRECTORIES(
    ${Matrix_Multiplication_CUDA_SOURCE_DIR}
    ${CUDA_SDK_ROOT_DIR}/shared/inc/
    ${CUDA_SDK_ROOT_DIR}/C/common/inc)
  
  CUDA_ADD_EXECUTABLE(densityGPU densityGPU.cxx otbGPUPointSetToDensityImageFilter.cu)
  TARGET_LINK_LIBRARIES(densityGPU  OTBCommon OTBIO ${CUTIL_LIBRARY} ${SHRUTIL_LIBRARY})

  CUDA_ADD_EXECUTABLE(FineCorrelationGPU FineCorrelationGPU.cxx otbGPUFineCorrelationImageFilter.cu)
  TARGET_LINK_LIBRARIES(FineCorrelationGPU OTBCommon OTBIO)

  CUDA_ADD_EXECUTABLE(NDVIGPU NDVIGPU.cxx otbGPUNDVIFilter.cu)
  TARGET_LINK_LIBRARIES(NDVIGPU OTBCommon OTBIO)
  
  CUDA_ADD_EXECUTABLE(SAMGPU SAMGPU.cxx otbGPUSAMFilter.cu)
  TARGET_LINK_LIBRARIES(SAMGPU OTBCommon OTBIO)
  
  CUDA_ADD_EXECUTABLE(SIFTDensity  SIFTDensity.cxx otbGPUPointSetToDensityImageFilter.cu)
  TARGET_LINK_LIBRARIES(SIFTDensity OTBCommon OTBIO OTBFeatureExtraction)

  CUDA_ADD_EXECUTABLE(svmGPU svmGPU.cxx cuSVMSolver.cu)

  TARGET_LINK_LIBRARIES(svmGPU OTBIO OTBCommon ${CUTIL_LIBRARY} ${SHRUTIL_LIBRARY} ${CUDA_cublas_LIBRARY})

ENDIF(CUDA_FOUND)


FIND_PATH( OPENCL_SDK_DIR OpenCL/common/inc/CL/opencl.h ${CUDA_SDK_ROOT_DIR})
if(NOT OPENCL_SDK_DIR )
 MESSAGE(FATAL_ERROR
          "Cannot build Project without OpenCl Directory.  Please set OPENCL_SDK_DIR.")
ENDIF(NOT OPENCL_SDK_DIR )

IF(OPENCL_SDK_DIR)
  INCLUDE_DIRECTORIES(
  ${OPENCL_SDK_DIR}/OpenCL/common/inc
  )

  FIND_LIBRARY( OPENCL_LIB OpenCL )
  if(NOT OPENCL_LIB )
   MESSAGE(FATAL_ERROR
          "Cannot build Project without OpenCl Library (pay attention to 32 or 64 bits).  Please set OPENCL_LIB.")
  ENDIF(NOT OPENCL_LIB )

  ADD_EXECUTABLE(densityOCL densityOCL.cxx ${OPENCL_SDK_DIR}/OpenCL/common/src/oclUtils.cpp)
  TARGET_LINK_LIBRARIES(densityOCL OTBIO OTBCommon ${OPENCL_LIB} ${SHRUTIL_LIBRARY})

ENDIF(OPENCL_SDK_DIR)


