# *** MorphoGraphX add-on CMake file
Set(ADDON CNN)  # set to addon name
Set(${ADDON}_DIR ${MorphoGraphX_SOURCE_DIR}/AddOns/${ADDON})

Set(BUILD_${ADDON} FALSE CACHE BOOL "Check to build add-on ${ADDON}")
If(BUILD_${ADDON})
  Set(MGX_ADDONS ${MGX_ADDONS}-${ADDON} PARENT_SCOPE)

  # *** Required packages
  Find_Package(Torch REQUIRED)
  Include_Directories(
    ${HDF5_INCLUDE_DIR}
    ${MGX_SOURCE_PATH} ${MGX_BINARY_PATH}
    ${TORCH_INCLUDE_DIRS}
  )
  Include_Directories(
    SYSTEM ${MGXViewer_SOURCE_PATH}
  )

  # Header files
  Set(${ADDON}_HDRS
    CNNProcess.hpp
  )

  # Source files
  Set(${ADDON}_SRCS
    CNNProcess.cpp
  )

  # External libs required 
  Set(MGX_TORCH_LIBS
    ${TORCH_INSTALL_PREFIX}/lib/libc10.so
    ${TORCH_INSTALL_PREFIX}/lib/libc10_cuda.so
    ${TORCH_INSTALL_PREFIX}/lib/libtorch_cpu.so
    ${TORCH_INSTALL_PREFIX}/lib/libtorch_cuda.so
    ${TORCH_INSTALL_PREFIX}/lib/libtorch.so
    #Libs/libmkl_core.so.1
    #Libs/libmkl_gnu_thread.so.1
    #Libs/libmkl_intel_lp64.so.1
  )

  Add_Library(mgxU${ADDON} SHARED ${${ADDON}_SRCS} ${${ADDON}_DIR}/${ADDON}Icons.qrc)

  Target_Link_Libraries(mgxU${ADDON} Qt5::Widgets Qt5::OpenGL Qt5::Xml ${TORCH_LIBRARIES})
  Set_Target_Properties(mgxU${ADDON} PROPERTIES PUBLIC_HEADER "${${ADDON}_HDRS}" PREFIX "")
  Install(TARGETS mgxU${ADDON}
          DESTINATION ${MGX_PROCESS_DIR} COMPONENT MGXU${ADDON}
          PUBLIC_HEADER DESTINATION ${MGX_PROCESS_INCLUDE_DIR} COMPONENT MGXU${ADDON})
  Install(FILES mgxCNN.sh DESTINATION ${MGX_RESOURCES_DIR}/${ADDON} COMPONENT MGXU${ADDON}
    PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
  Install(FILES ${MGX_TORCH_LIBS} DESTINATION ${MGX_LIB_DIR} COMPONENT MGXU${ADDON}
    PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)

  Install(FILES mgxPredictApply.py DESTINATION ${MGX_RESOURCES_DIR}/${ADDON}
          COMPONENT MGXU${ADDON})
  Install(FILES BasselCombinedUNet.pt WillisUNet.pt VijayanUNet.pt
	  DESTINATION ${MGX_RESOURCES_DIR}/${ADDON}
          COMPONENT MGXU${ADDON})
  Target_Link_Libraries(mgxU${ADDON} ${HDF5_LIBRARIES} ${HDF5_C_SHARED_LIBRARY})

  # Make resource dir accessible from C++
  Add_Definitions(-DCNN_RES_PATH="${MGXRESPATH}/${AddOn}")

EndIf(BUILD_${ADDON})
