default:
	@echo "Choose a build target:"
	@echo "------------------------------------------------"
	@echo "linux-amd-32     x86 CPUs and AMD/ATI GPUs      "   
	@echo "linux-amd-64     x86 CPUs and AMD/ATI GPUs      "
	@echo "linux-ibm-32     Power CPUs and Cell processors "
	@echo "linux-nvidia-32  NVIDIA GPUs                    "
	@echo "linux-nvidia-64  NVIDIA GPUs                    "
	@echo "macosx-32        x86 CPUs, various GPUs         "
	@echo "macosx-64        x86 CPUs, various GPUs         "

ATIOPENCLHOME32 = /Projects/vmd/opencl/amd/ati-stream-sdk-v2.0-beta4-lnx32
ATIOPENCLHOME64 = /Projects/vmd/opencl/amd/ati-stream-sdk-v2.0-beta4-lnx64

linux-amd-32:
	$(MAKE) all \
	"OPENCLINC  = -I$(ATIOPENCLHOME32)/include" \
	"OPENCLLIBS = -L$(ATIOPENCLHOME32)/lib/x86 -lOpenCL" \
	"CC = gcc" \
	"CFLAGS = -m32 -O -g" \
	"CXX = g++" \
	"CXXFLAGS = -m32 -O -g" \
	"CXXLFLAGS = -lm"

linux-amd-64:
	$(MAKE) all \
	"OPENCLINC  = -I$(ATIOPENCLHOME64)/include" \
	"OPENCLLIBS = -L$(ATIOPENCLHOME64)/lib/x86_64 -lOpenCL" \
	"CC = gcc" \
	"CFLAGS = -m64 -O -g" \
	"CXX = g++" \
	"CXXFLAGS = -m64 -O -g" \
	"CXXLFLAGS = -lm"

linux-ibm-32:
	$(MAKE) all \
	"OPENCLINC  = -I/usr/include/CL/inc" \
	"OPENCLLIBS = -lCL" \
	"CC = gcc" \
	"CFLAGS = -m32 -O -g" \
	"CXX = g++" \
	"CXXFLAGS = -m32 -O -g" \
	"CXXLFLAGS = -lm"

#
# No 64-bit IBM OpenCL libs yet?
#
# linux-ibm-64:
#	$(MAKE) all \
#	"OPENCLINC  = -I/usr/include/CL/inc" \
#	"OPENCLLIBS = -lCL" \
#	"CC = gcc" \
#	"CFLAGS = -m64 -O -g" \
#	"CXX = g++" \
#	"CXXFLAGS = -m64 -O -g" \
#	"CXXLFLAGS = -lm"

linux-nvidia-32:
	$(MAKE) all \
	"CUDAOBJS = cuenergy.o" \
	"OPENCLINC  = -I/usr/include/CL/inc" \
	"OPENCLLIBS = -lOpenCL" \
	"CC = gcc" \
	"CFLAGS = -m32 -O -g" \
	"CXX = g++" \
	"CXXFLAGS = -m32 -O -g" \
	"CXXLFLAGS = -lm"

linux-nvidia-64:
	$(MAKE) all \
	"CUDAOBJS = cuenergy.o" \
	"OPENCLINC  = -I/usr/include/CL/inc" \
	"OPENCLLIBS = -lOpenCL" \
	"CC = gcc" \
	"CFLAGS = -m64 -O -g" \
	"CXX = g++" \
	"CXXFLAGS = -m64 -O -g" \
	"CXXLFLAGS = -lm"

macosx-32:
	$(MAKE) all \
	"OPENCLINC  = " \
	"OPENCLLIBS = -framework OpenCL" \
	"CC = gcc" \
	"CFLAGS = -m32 -O -g" \
	"CXX = g++" \
	"CXXFLAGS = -m32 -O -g" \
	"CXXLFLAGS = -lm"

macosx-64:
	$(MAKE) all \
	"OPENCLINC  = " \
	"OPENCLLIBS = -framework OpenCL" \
	"CC = gcc" \
	"CFLAGS = -m64 -O -g" \
	"CXX = g++" \
	"CXXFLAGS = -m64 -O -g" \
	"CXXLFLAGS = -lm"


#CUDAHOME     = /usr/local/cuda
CUDAHOME    = /usr/local/encap/cuda-2.3
CUDACC      = $(CUDAHOME)/bin/nvcc
CUDAINCS    = -I. -I$(CUDAHOME)/common/inc -DUNIX
CUDACCFLAGS = --machine 64 --ptxas-options=-v -O3 $(CUDAINCS)
CUDALIBS    = -L$(CUDAHOME)/lib64 -lcudart

CUDAOBJS = cuenergy.o
OPENCLOBJS = clenergy.o
OBJS     = WKFUtils.o
BINS     = cuenergy clenergy

all: $(BINS)

.SUFFIXES: .C .c .cu ..c .i .o

.cu.o:
	$(CUDACC) $(CUDACCFLAGS) -c $<
.c.o:
	$(CC) $(CFLAGS) $(OPENCLINC) -c $<
.C.o:
	$(CXX) $(CXXFLAGS) $(OPENCLINC) -c $<

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

clenergy: $(OPENCLOBJS) $(OBJS)
	$(CXX) $(CXXFLAGS) $(OPENCLOBJS) $(OBJS) -o $@ $(CXXLFLAGS) $(OPENCLLIBS) 

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




