tomopy/tomopy

View on GitHub
source/libtomo/accel/CMakeLists.txt

Summary

Maintainability
Test Coverage
set(HEADERS "${tomopy_SOURCE_DIR}/include/libtomo/accel.h"
            "${tomopy_SOURCE_DIR}/include/libtomo/macros.h")

tomopy_add_library(
  tomo-accel
  SHARED
  cxx/common.cc
  cxx/mlem.cc
  cxx/sirt.cc
  common.hh
  constants.hh
  cuda.h
  data.hh
  macros.hh
  profiler.hh
  typedefs.hh
  utils.hh
  ${HEADERS})

target_include_directories(
  tomo-accel
  PUBLIC $<BUILD_INTERFACE:${tomopy_SOURCE_DIR}/include>
         $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
  PRIVATE ${CMAKE_CURRENT_LIST_DIR})

if(TOMOPY_USE_CUDA)

  target_sources(tomo-accel PRIVATE gpu/common.cu gpu/mlem.cu gpu/sirt.cu
                                    gpu/utils.cu)

  target_include_directories(tomo-accel
                             PRIVATE ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})

  target_link_libraries(tomo-accel PRIVATE tomopy::cuda-npp)

  set(CUDA_PROPERTIES
      CUDA_STANDARD
      ${CMAKE_CXX_STANDARD}
      CUDA_STANDARD_REQUIRED
      ON
      CUDA_SEPARABLE_COMPILATION
      ON
      CUDA_RESOLVE_DEVICE_SYMBOLS
      ON)

  set_target_properties(tomo-accel PROPERTIES ${CUDA_PROPERTIES})

endif(TOMOPY_USE_CUDA)

target_link_libraries(tomo-accel PRIVATE ${TOMOPY_EXTERNAL_LIBRARIES}
                                         ${TOMOPY_EXTERNAL_PRIVATE_LIBRARIES} ptl-static)

target_compile_definitions(tomo-accel PRIVATE ${${PROJECT_NAME}_DEFINITIONS})

target_compile_options(
  tomo-accel
  PRIVATE $<$<COMPILE_LANGUAGE:C>:${${PROJECT_NAME}_C_FLAGS}>
          $<$<COMPILE_LANGUAGE:CXX>:${${PROJECT_NAME}_CXX_FLAGS}>
          $<$<COMPILE_LANGUAGE:CUDA>:${${PROJECT_NAME}_CUDA_FLAGS}>)

install(TARGETS tomo-accel EXPORT libtomoTargets)

install(
  FILES ${HEADERS}
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libtomo
  COMPONENT Headers)