ADD_LIBRARY(JFJochIndexing STATIC
        Indexer.h
        Indexer.cpp
        IndexerFactory.h
        IndexerFactory.cpp
        IndexerThreadPool.cpp
        IndexerThreadPool.h
        AnalyzeIndexing.cpp
        AnalyzeIndexing.h
        FitProfileRadius.cpp
        FitProfileRadius.h
        PostIndexingRefinement.h
        FFTResult.h
        FFTIndexer.cpp
        FFTIndexer.h
        PostIndexingRefinement.cpp)
TARGET_LINK_LIBRARIES(JFJochIndexing JFJochCommon)

IF (JFJOCH_CUDA_AVAILABLE)
    SET(CMAKE_CUDA_ARCHITECTURES 75 80 86 89)

    FetchContent_Declare(
            fast-indexer
            GIT_REPOSITORY https://github.com/paulscherrerinstitute/fast-feedback-indexer/
            GIT_TAG ca9e17486a1eb96319a738acef33cc24c9cd8845
    )

    FetchContent_MakeAvailable(fast-indexer)
    TARGET_SOURCES(JFJochIndexing PRIVATE
            CUDAMemHelpers.h
            FFTIndexerGPU.cu FFTIndexerGPU.h
            FFBIDXIndexer.cpp FFBIDXIndexer.h)
    TARGET_LINK_LIBRARIES(JFJochIndexing fast_indexer_static
            CUDA::cufft
    )
ELSE()
    MESSAGE(WARNING "CUDA is strongly recommended for image analysis." )

    TARGET_LINK_LIBRARIES(JFJochIndexing Eigen3::Eigen)
ENDIF()

IF(HAS_FFTW3_H AND FFTWF_LIBRARY)
    TARGET_SOURCES(JFJochIndexing PRIVATE FFTIndexerCPU.cpp FFTIndexerCPU.h)
    TARGET_LINK_LIBRARIES(JFJochIndexing ${FFTWF_LIBRARY})
    MESSAGE(STATUS "FFT single-precision library found: ${FFTWF_LIBRARY}")
ELSE()
    MESSAGE(WARNING "FFTW disabled")
ENDIF()
