#Makefile for SSGPlayer
SYS:= $(shell gcc -dumpmachine)
OS=Linux

DISTDIR=dist
SRCDIR=../Source
DBGOBJDIR = $(DISTDIR)/Debug/.obj
RELOBJDIR = $(DISTDIR)/Release/.obj

OBJECTFILES = \
							$(DBGOBJDIR)/Application.o \
							$(DBGOBJDIR)/Main.o \
							$(DBGOBJDIR)/Settings.o \
							$(DBGOBJDIR)/Timer.o \
							$(DBGOBJDIR)/OGLApplication.o \
							$(DBGOBJDIR)/OCLApplication.o

REL_OBJECTFILES = \
							$(RELOBJDIR)/Application.o \
							$(RELOBJDIR)/Main.o \
							$(RELOBJDIR)/Settings.o \
							$(RELOBJDIR)/Timer.o \
							$(RELOBJDIR)/OGLApplication.o \
							$(RELOBJDIR)/OCLApplication.o


#Compile options
DBG_CCOPTS = -g -c -std=c++11 -o
REL_CCOPTS = -O3 -c -std=c++11 -o

OCLLIBLOC = -I /opt/rocm/opencl/include/


#Link Libraries and options
ifneq (, $(findstring redhat-linux, $(SYS)))
	LDLIBOPTS=-lblkid -lGL -lglut -lGLEW -lXmu -lXi -lSM -lICE -lX11 -lXext -lrt -lpthread -L/opt/amdgpu-pro/lib64/ -lOpenCL -pthread
else
	LDLIBOPTS=-lblkid -lGL -lglut -lGLEW -lXmu -lXi -lSM -lICE -lX11 -lXext -lrt -lpthread -L/opt/amdgpu-pro/lib/x86_64-linux-gnu/ -lOpenCL -pthread
endif


#Build Targets
debug: debug.pre $(DISTDIR)/Debug/RadeonProSsgPlayer
debug.pre:
	$(eval CCOPTS:=$(DBG_CCOPTS))

release: release.pre $(DISTDIR)/Release/RadeonProSsgPlayer
release.pre:
	$(eval CCOPTS:=$(REL_CCOPTS))

clean:
	rm -rf $(DISTDIR)

$(DISTDIR)/Release/RadeonProSsgPlayer: player.pre $(REL_OBJECTFILES)
	g++ -o dist/Release/RadeonProSsgPlayer $(REL_OBJECTFILES) $(LDLIBOPTS)

$(DISTDIR)/Debug/RadeonProSsgPlayer: player.pre $(OBJECTFILES)
	g++ -o dist/Debug/RadeonProSsgPlayer $(OBJECTFILES) $(LDLIBOPTS)
player.pre:
	mkdir -p $(DBGOBJDIR)
	mkdir -p $(RELOBJDIR)

$(DBGOBJDIR)/Application.o: $(SRCDIR)/Application.cpp
	g++ $(DBG_CCOPTS) $@ $<

$(DBGOBJDIR)/Main.o: $(SRCDIR)/Main.cpp
	g++ $(DBG_CCOPTS) $@ $(OCLLIBLOC) $<

$(DBGOBJDIR)/Settings.o: $(SRCDIR)/Settings.cpp
	g++ $(DBG_CCOPTS) $@ $<

$(DBGOBJDIR)/Timer.o: $(SRCDIR)/Timer.cpp
	g++ $(DBG_CCOPTS) $@ $<

$(DBGOBJDIR)/OGLApplication.o: $(SRCDIR)/OGLApplication.cpp
	g++ $(DBG_CCOPTS) $@ $<

$(DBGOBJDIR)/OCLApplication.o: $(SRCDIR)/OCLApplication.cpp
	g++ $(DBG_CCOPTS) $@ -I /opt/rocm/opencl/include/ $<

$(RELOBJDIR)/Application.o: $(SRCDIR)/Application.cpp
	g++ $(REL_CCOPTS) $@ $<

$(RELOBJDIR)/Main.o: $(SRCDIR)/Main.cpp
	g++ $(REL_CCOPTS) $@ $(OCLLIBLOC) $<

$(RELOBJDIR)/Settings.o: $(SRCDIR)/Settings.cpp
	g++ $(REL_CCOPTS) $@ $<

$(RELOBJDIR)/Timer.o: $(SRCDIR)/Timer.cpp
	g++ $(REL_CCOPTS) $@ $<

$(RELOBJDIR)/OGLApplication.o: $(SRCDIR)/OGLApplication.cpp
	g++ $(REL_CCOPTS) $@ $<

$(RELOBJDIR)/OCLApplication.o: $(SRCDIR)/OCLApplication.cpp
	g++ $(REL_CCOPTS) $@ $(OCLLIBLOC) $<
