
set(HEADERS ContainerBox.h
            Cylinder.h
            Assembly.h
            Dense.h
            Geometry.h
            Transform.h
            StructuredData.h
            StructuredGrid.h
            VoxImage.h
            VoxRaytracer.h
            Utils.h
            VoxImageFilter.h
            VoxImageFilter.hpp
            VoxImageFilterLinear.hpp
            VoxImageFilterMedian.hpp
            VoxImageFilterABTrim.hpp
            VoxImageFilterBilateral.hpp
            VoxImageFilterThreshold.hpp
            VoxImageFilter2ndStat.hpp
            VoxImageFilterCustom.hpp
            Accumulator.h
            TriangleMesh.h
            QuadMesh.h
            BitCode.h
            Structured2DGrid.h
            Structured4DGrid.h
            Units.h
            CLHEP_defs.hh)

set(SOURCES VoxRaytracer.cpp
            StructuredData.cpp
            StructuredGrid.cpp
            VoxImage.cpp
            TriangleMesh.cpp
            QuadMesh.cpp
            Assembly.cpp
            Dense.cpp
            Structured2DGrid.cpp
            Structured4DGrid.cpp
            MathRegistrations.cpp)

set(LIBRARIES ${PACKAGE_LIBPREFIX}Core
              Eigen3::Eigen
              ${ROOT_LIBRARIES}
              ${VTK_LIBRARIES})

set(libname ${PACKAGE_LIBPREFIX}Math)
set(ULIB_SHARED_LIBRARIES ${ULIB_SHARED_LIBRARIES} ${libname} PARENT_SCOPE)
set(ULIB_SELECTED_MODULES ${ULIB_SELECTED_MODULES} Math PARENT_SCOPE)

add_library(${libname} SHARED ${SOURCES})
set_target_properties(${libname} PROPERTIES
                      VERSION ${PROJECT_VERSION}
                      SOVERSION ${PROJECT_SOVERSION}
                      CXX_STANDARD 17
                      CUDA_STANDARD 17)
target_link_libraries(${libname} ${LIBRARIES})

if(USE_CUDA)
    set_source_files_properties(VoxRaytracer.cpp VoxImage.cpp PROPERTIES LANGUAGE CUDA)
endif()


install(TARGETS ${libname}
        EXPORT "uLibTargets"
        RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin
        LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib)

install(FILES ${HEADERS} DESTINATION ${INSTALL_INC_DIR}/Math)

if(BUILD_TESTING)
  include(uLibTargetMacros)
  add_subdirectory(testing)
endif()
