#***********************************************************************
#
# Licensed Materials - Property of IBM
#
# (C) Copyright IBM Corp. 2010
# All Rights Reserved
#
# US Government Users Restricted Rights - Use, duplication or
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
#
#***********************************************************************

CC		= gcc
BITS		= -m64
CFLAGS		= -Wall -I. -I../src -I ../../clu -I../../common -O3 $(BITS) $(EXTRA_FLAGS)
LDFLAGS		= -lOpenCL $(BITS) -lm -lstdc++

vpath	%.c	../src ../../clu ../../common

PROGS           = julia julia_gl julia_remote
KERNELS		= julia_kernel.cl
OBJS		= julia.o clock.o clu.o
GL_OBJS 	= julia_gl.o gl_viewer.o 
REMOTE_OBJS	= julia_remote.o remote_viewer.o network_utils.o
LINKED_SRC	= julia_gl.c julia_remote.c

GLUT_H		= /usr/include/GL/glut.h

DEPS    	= $(OBJS:.o=.d) $(GL_OBJS:.o=.d) $(REMOTE_OBJS:.o=.d)

$(GL_OBJS)     $(GL_OBJS:.o=.d):     EXTRA_FLAGS := -DGL_VIEWER
$(REMOTE_OBJS) $(REMOTE_OBJS:.o=.d): EXTRA_FLAGS := -DREMOTE_VIEWER

%.d: %.c
	@$(CC) -M $(CFLAGS) $< | sed 's/$*.o/& $@/g' > $@


.PHONY: all 
all:	$(PROGS) $(KERNELS)

julia: $(OBJS) 
	$(CC) -o $@ $^ $(LDFLAGS)

ifeq ($(wildcard $(GLUT_H)), $(GLUT_H))
julia_gl:  $(GL_OBJS) clock.o clu.o
	$(CC) -o $@ $^ $(LDFLAGS) -lglut

julia_remote: $(REMOTE_OBJS) clock.o clu.o
	$(CC) -o $@ $^ $(LDFLAGS)
else
julia_gl:
	@echo "FYI: Not building julia_gl because glut is not installed."

julia_remote: 
	@echo "FYI: Not building julia_remote because glut is not installed."
endif

# Linked source code
julia_gl.c:
	@ln -s -f ../src/julia.c $@

julia_remote.c:
	@ln -s -f ../src/julia.c $@

julia_kernel.cl:
	ln -s -f ../src/$@

.PHONY: clean
clean:
	@rm -f $(PROGS) *.ocl_bin $(OBJS) $(GL_OBJS) $(REMOTE_OBJS) $(KERNELS) $(LINKED_SRC) $(DEPS)


-include $(DEPS)
