# CUDA makefile

CUDAHOME    = /usr/local/cuda
#CUDAHOME    = /usr/local/encap/cuda-3.0
CUDACC      = $(CUDAHOME)/bin/nvcc
CUDAINCS    = -I. -DUNIX
#CUDACCFLAGS = -Xptxas=-v -O3 -arch=sm_20 --machine 32 $(CUDAINCS)
#CUDACCFLAGS = --maxrregcount 20 -Xptxas=-v -O3 -gencode arch=compute_10,code=sm_10 -gencode arch=compute_13,code=sm_13 -gencode arch=compute_20,code=sm_20 --machine 32 $(CUDAINCS)
#CUDACCFLAGS = -Xptxas=-v -O3 -gencode arch=compute_10,code=sm_10 -gencode arch=compute_13,code=sm_13 -gencode arch=compute_20,code=sm_20 --machine 32 $(CUDAINCS)
CUDACCFLAGS = -Xptxas=-v -O3 -gencode arch=compute_10,code=sm_10 -gencode arch=compute_13,code=sm_13 -gencode arch=compute_20,code=sm_20 --machine 64 $(CUDAINCS)

CXX         = g++
#CXXFLAGS    = -m32 -O3
#CXXLFLAGS   = -L$(CUDAHOME)/lib -lcudart -Wl,-rpath,$(CUDAHOME)/lib
CXXFLAGS    = -m64 -O3
CXXLFLAGS   = -L$(CUDAHOME)/lib64 -lcudart -Wl,-rpath,$(CUDAHOME)/lib64

CUDAOBJS = cuenergy.o
OBJS     = util.o
BINS     = cuenergy

all: $(BINS)

.c.o:
	$(CXX) $(CXXFLAGS) -c $<

ptx: cuenergy.cu
	$(CUDACC) $(CUDACCFLAGS) -ptx cuenergy.cu

cubin: cuenergy.cu
	$(CUDACC) $(CUDACCFLAGS) -cubin cuenergy.cu

cuenergy.o : cuenergy.cu
	$(CUDACC) $(CUDACCFLAGS) -c $<

cuenergy: $(CUDAOBJS) $(OBJS)
	$(CXX) $(CXXFLAGS) $(CUDAOBJS) $(OBJS) -o $@ $(CXXLFLAGS)

clean:	
	rm -f $(CUDAOBJS) $(OBJS) $(BINS) *.cubin *.ptx

