CXX = g++
NVCC = /usr/local/cuda-12.0/bin/nvcc

CXXFLAGS2 := -O3 -Wall -std=c++17 -fPIC -fopenmp
CXXFLAGS2 += -DACCRQA_VER_MAJOR=0 \
            -DACCRQA_VER_MINOR=6 \
            -DACCRQA_VER_PATCH=5

PKG_CPPFLAGS := -I/usr/local/cuda-12.0/include "-I/usr/share/R/include" -DACCRQA_R_FOUND -DCUDA_FOUND
PKG_LIBS := -L/usr/local/cuda-12.0/lib64 -lcudart -lcuda -lcublas -lcurand -Wl,--export-dynamic -fopenmp -Wl,-Bsymbolic-functions -Wl,-z,relro -L/usr/lib/R/lib -lR -lpcre2-8 -llzma -lbz2 -lz -lrt -ldl -lm -licuuc -licui18n
NVCC_FLAGS := -arch=sm_70

CPP_FILES := $(wildcard *.cpp)
CU_FILES := $(wildcard *.cu)

CPP_OBJECTS := $(CPP_FILES:.cpp=.o)
CU_OBJECTS := $(CU_FILES:.cu=.o)
OBJECTS = $(CPP_OBJECTS) $(CU_OBJECTS)

# Debug info
$(info C++ Files: $(CPP_FILES))
$(info CUDA Files: $(CU_FILES))
$(info R Includes: -I/usr/share/R/include)
$(info C++ Flags: $(PKG_CPPFLAGS))

%.o: %.cpp
	$(CXX) $(CXXFLAGS2) $(PKG_CPPFLAGS) -c $< -o $@

%.o: %.cu
	$(NVCC) -O3 -std=c++17 $(NVCC_FLAGS) -c $< -o $@ -Xcompiler "-fPIC"

AccRQA.so: $(OBJECTS)
	$(CXX) -shared -o $@ $(OBJECTS) $(PKG_LIBS)

clean:
	rm -f *.o AccRQA.so


