cmake_minimum_required(VERSION 2.8)
project( Superpixels )
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
set(CUDA_SEPARABLE_COMPILATION ON)
find_package(CUDA QUIET REQUIRED )
set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)
set(CMAKE_CXX_STANDARD 14)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -pthread")
find_package(CUDA REQUIRED)

#set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --Xptxas -O3 --expt-extended-lambda")
#set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -O3 -x cu --extended-lambda")
# set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} --expt-extended-lambda -arch=sm_86")
# set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} --extended-lambda -arch=sm_86")
# set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}" "--extended-lambda" "-arch=sm_75")
#set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}" "--extended-lambda" "-arch=compute_75 -code=compute_75,sm_75,sm_86")
# set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -arch=sm_86")
# set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++14 -O3")

# set(CUDA_ARCHITECTURES 75 86)
# set(CUDA_known_archs "75" "86")
# set(CUDA_TARGET_ARCHS "75" "86")
# Enable PTX generation
# set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xptxas=-v")
# set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}" "--extended-lambda" "-Xptxas=-v")
#  "--diag-suppress 611,177,2912"
# "--diag-suppress 611,177,2912"


# set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}" "-lineinfo" "-g" "-G" "--extended-lambda" "-gencode=arch=compute_75,code=compute_75" "-gencode=arch=compute_86,code=sm_86" "-gencode=arch=compute_86,code=compute_86")
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS}" "-O3" "--extended-lambda" "-gencode=arch=compute_75,code=compute_75" "-gencode=arch=compute_86,code=sm_86" "-gencode=arch=compute_86,code=compute_86")



SET(OpenCV_DIR "/home/gauenk/Documents/packages/opencv-py10.0/build/")
INCLUDE_DIRECTORIES(${OpenCV_DIR} include)
find_package( OpenCV REQUIRED )
include_directories(${OpenCV_INCLUDE_DIRS})

set(SHARED_SOURCES
  demo_utils.cu
  file_io.cpp
  bass.cu
  prop.cu
  init_utils.cu
  init_seg.cu
  init_sparams.cu
  rgb2lab.cu
  compact_spix.cu
  seg_utils.cu
  update_params.cu
  update_seg.cu
  split_merge.cu
  split_merge_orig.cu
  split_merge_prop.cu
  sparams_io.cu
  shift_and_fill.cu
  shift_labels.cu
  fill_missing.cu
  sp_pooling.cu
  split_disconnected.cu
  atomic_helpers.cu
  relabel.cu
  lots_of_merge.cu
)

cuda_add_executable(demo demo.cu ${SHARED_SOURCES})
# cuda_add_executable(controlled_demo controlled_demo.cu ${SHARED_SOURCES})

target_link_libraries(demo ${OpenCV_LIBS} cuda cublas cudadevrt)
# target_link_libraries(controlled_demo ${OpenCV_LIBS} cuda cublas cudadevrt)


# cuda_add_executable(
#   demo
#   demo.cu
#   demo_utils.cu
#   file_io.cpp
#   bass.cu
#   prop.cu
#   init_utils.cu
#   init_seg.cu
#   init_sparams.cu
#   rgb2lab.cu
#   compact_spix.cu
#   seg_utils.cu
#   update_params.cu
#   update_seg.cu
#   split_merge.cu
#   split_merge_orig.cu
#   split_merge_prop.cu
#   # split_merge_prop_v2.cu
#   sparams_io.cu
#   shift_and_fill.cu
#   shift_labels.cu
#   fill_missing.cu
#   sp_pooling.cu
#   split_disconnected.cu
#   atomic_helpers.cu
#   relabel.cu
#   lots_of_merge.cu
# )

# TARGET_LINK_LIBRARIES(demo ${OpenCV_LIBS} cuda cublas cudadevrt)






# target_compile_options(demo PRIVATE
#     $<$<COMPILE_LANGUAGE:CUDA>:--extended-lambda>
#     $<$<COMPILE_LANGUAGE:CUDA>:-arch=sm_86>)


# find_package(Threads)

