# *******************************************************************************
#
# Copyright (C) 2024 NETINT Technologies
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
# ******************************************************************************/

# ---- Project settings ----
TARGET = xcoderp2p_read_cuda
SRC    = ni_p2p_read_cuda.c

CC     = gcc
CFLAGS = -std=c11 -Wall -Wextra -Wpedantic -Wno-unused-result

# ---- CUDA Toolkit ----
CUDA_HOME ?= /usr/local/cuda
CUDA_INC  = $(CUDA_HOME)/include
CUDA_LIB  = $(CUDA_HOME)/lib64

# ---- XCODER ----
XCODER_LDLIBS = -lxcoder

# ---- CUDA driver library ----
CUDA_LDLIBS = -lcuda

# ---- CPATH export (matches CMake behavior) ----
ifeq ($(wildcard $(CUDA_INC)),)
  $(warning $(CUDA_INC) not found. CUDA headers may be missing.)
else
  export CPATH := $(CUDA_INC):$(CPATH)
  $(info CPATH set to: $(CPATH))
endif

# ---- NVIDIA driver check ----
NVIDIA_SMI := $(shell command -v nvidia-smi 2>/dev/null)
ifeq ($(NVIDIA_SMI),)
  $(error nvidia-smi not found. Install NVIDIA drivers first.)
endif

# ---- Final flags ----
INCLUDES = -I$(CUDA_INC)
LDFLAGS  = -L$(CUDA_LIB)
LDLIBS   = $(CUDA_LDLIBS) $(XCODER_LDLIBS) -lm

# ---- Build rules ----
all: $(TARGET)

$(TARGET): $(SRC)
	$(CC) $(CFLAGS) $(INCLUDES) $(XCODER_CFLAGS) $(LDFLAGS) $^ -o $@ $(LDLIBS)

clean:
	rm -f $(TARGET) *.o
