CC=/usr/bin/gcc
AR=/usr/bin/ar
RANLIB=/usr/bin/ranlib
LD=/usr/bin/ld

IPATHS=-I/share/apps/cuda/include -I/share/apps/open-mx/include
#LPATHS=-L/share/apps/clOpenCL -L/share/apps/open-mx/lib -L.
LPATHS=-L/share/apps/clOpenCL/src -L/share/apps/open-mx/lib

LIBS=-lm -lpthread -lopen-mx -lOpenCL

#FLAGS=-Wall -Werror -pthread -D_STATIC_MAX_PLATFORMS_AND_DEVICES -O0
FLAGS=-Wall -Werror -pthread -O0

XLINKER=\
 -Xlinker --wrap=main \
 -Xlinker --wrap=clGetPlatformIDs \
 -Xlinker --wrap=clGetPlatformInfo \
 -Xlinker --wrap=clGetDeviceIDs \
 -Xlinker --wrap=clGetDeviceInfo \
 -Xlinker --wrap=clCreateContext \
 -Xlinker --wrap=clCreateCommandQueue \
 -Xlinker --wrap=clCreateBuffer \
 -Xlinker --wrap=clCreateProgramWithSource \
 -Xlinker --wrap=clBuildProgram \
 -Xlinker --wrap=clCreateKernel \
 -Xlinker --wrap=clSetKernelArg \
 -Xlinker --wrap=clEnqueueNDRangeKernel \
 -Xlinker --wrap=clEnqueueWriteBuffer \
 -Xlinker --wrap=clEnqueueReadBuffer \
 -Xlinker --wrap=clGetEventProfilingInfo

BIN_INSTALL=../bin
LIB_INSTALL=../lib

all:: ccl_daemon libOpenCCL.a cl_test ccl_test
	rm -f *.o *~

ccl_daemon:: ccl_daemon.c ccl_common.h
	$(CC) $(FLAGS) -o ccl_daemon ccl_daemon.c $(IPATHS) $(LPATHS) $(LIBS)

libOpenCCL.a:: libOpenCCL.c ccl_common.h ccl_wrap.h
	$(CC) $(FLAGS) -c libOpenCCL.c $(IPATHS)
	$(AR) cr libOpenCCL.a libOpenCCL.o
	$(RANLIB) libOpenCCL.a

ccl_test:: cl_test.c libOpenCCL.a
	$(CC) $(FLAGS) -o ccl_test cl_test.c $(IPATHS) $(LPATHS) -lOpenCCL $(LIBS) $(XLINKER)

cl_test:: cl_test.c
	$(CC) $(FLAGS) -o cl_test cl_test.c $(IPATHS) $(LPATHS) $(LIBS)

clean::
	rm -f ccl_daemon libOpenCCL.a cl_test ccl_test
	rm -f *.o *~

install:: ccl_daemon ccl_daemon_list.py libOpenCCL.a cl_test ccl_test
	cp ccl_daemon ccl_daemon_list.py cl_test ccl_test $(BIN_INSTALL)
	cp libOpenCCL.a $(LIB_INSTALL)
