project(MemoryProcessing)
cmake_minimum_required(VERSION 3.19)

option(INCLUDE_CUDA "GPU build in mode" OFF)

enable_language(CXX)
set(CMAKE_CXX_STANDARD 11)

message(STATUS "memory processing: GPU build in mode is ${INCLUDE_CUDA}")

if(INCLUDE_CUDA)
    enable_language(CUDA)
    include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})

    # -DCMAKE_CUDA_ARCHITECTURES=native -- Compile for the architecture(s) of the host's GPU(s)
endif(INCLUDE_CUDA)

set(SOURCES_CXX 
    src/MemoryProcessing.cpp
    )
set(HEADERS_CXX 
    include/MemoryProcessing.h
    include/TemplateParameters.h
    )
if(INCLUDE_CUDA)
    set(SOURCES_CU 
    src/MemoryProcessing.cu
    )
    set(HEADERS_CU
    include/MemoryProcessing.cuh
    )
endif(INCLUDE_CUDA)

set(SOURCES ${SOURCES_CU} ${SOURCES_CXX})
set(HEADERS ${HEADERS_CU} ${HEADERS_CXX})

add_library(memproc STATIC ${HEADERS} ${SOURCES})