#Makefile MUPEN64 for Linux

CC		=gcc
CXX		=g++

#CFLAGS		=-DX86 -O3 -mpentium -Wall -DEMU64_DEBUG
CFLAGS		=-DX86 -O3 -fomit-frame-pointer -funroll-loops -ffast-math -mcpu=athlon -Wall -pipe
#CFLAGS		=-DX86 -O3 -mcpu=pentium -Wall -g -pg
#CFLAGS		=-DX86 -Wall -pipe -g3 -DEMU64_DEBUG
#CFLAGS		=-DX86 -Wall -pipe -g -DEMU64_DEBUG -DCOMPARE_CORE
#CFLAGS		=-DX86 -Wall -pipe -g

CXXFLAGS	=$(CFLAGS)

GL_PATH		=-I/usr/X11R6/include

OBJ		=main/rom.o \
		r4300/r4300.o \
		r4300/cop0.o \
		r4300/special.o \
		r4300/regimm.o \
		r4300/exception.o \
		memory/tlb.o \
		memory/memory.o \
		memory/dma.o \
		r4300/interupt.o \
		r4300/cop1.o \
		r4300/tlb.o \
		r4300/cop1_w.o \
		r4300/cop1_s.o \
		r4300/cop1_d.o \
		r4300/recomp.o \
		memory/pif.o \
		r4300/bc.o \
		r4300/cop1_l.o \
		r4300/pure_interp.o \
		r4300/compare_core.o \
		main/plugin.o \
		main/unzip.o \
		main/ioapi.o \
		memory/flashram.o \
		main/md5.o \
		main/mupenIniApi.o \
		main/savestates.o

OBJ_X86         =r4300/x86/gr4300.o \
		r4300/x86/gcop0.o \
		r4300/x86/assemble.o \
		r4300/x86/gcop1.o \
		r4300/x86/gcop1_s.o \
		r4300/x86/gcop1_d.o \
		r4300/x86/gtlb.o \
		r4300/x86/gregimm.o \
		r4300/x86/gspecial.o \
		r4300/x86/gcop1_w.o \
		r4300/x86/debug.o \
		r4300/x86/rjump.o \
		r4300/x86/gbc.o \
		r4300/x86/gcop1_l.o \
		r4300/x86/regcache.o

OBJ_VCR		=main/vcr.o \
		main/vcr_compress.o \
		main/vcr_resample.o \
		main/gui_gtk/vcrcomp_dialog.o

OBJ_GTK_GUI	=main/gui_gtk/main_gtk.o \
		main/gui_gtk/translate.o \
		main/gui_gtk/messagebox.o \
		main/gui_gtk/aboutdialog.o \
		main/gui_gtk/configdialog.o \
		main/gui_gtk/support.o \
		main/gui_gtk/rombrowser.o \
		main/gui_gtk/romproperties.o \
		main/gui_gtk/config.o \
		main/gui_gtk/dirbrowser.o

HEADER		=main/rom.h \
		r4300/r4300.h \
		r4300/ops.h \
		r4300/macros.h \
		r4300/exception.h \
		memory/memory.h \
		memory/tlb.h \
		memory/dma.h \
		r4300/interupt.h \
		r4300/recomp.h \
		memory/pif.h

LIB		=-lz -lm

PREFIX		=$(shell grep WITH_HOME config.h | cut -d '"' -f 2)
SHARE		="$(PREFIX)share/mupen64/"

all:	mupen64

main/main.o:	main/main.c
		$(CC) $(CFLAGS) -c -o $@ $<

main/main_gtk.o:	main/main_gtk.c
			$(CC) $(CFLAGS) -c -o $@ $< `gtk-config --cflags`

main/gui_gtk/main_gtk.o:	main/gui_gtk/main_gtk.c
				$(CC) $(CFLAGS) -c -o $@ $< `gtk-config --cflags`

main/gui_gtk/translate.o:	main/gui_gtk/translate.c
				$(CC) $(CFLAGS) -c -o $@ $< `gtk-config --cflags`

main/gui_gtk/messagebox.o:	main/gui_gtk/messagebox.c
				$(CC) $(CFLAGS) -c -o $@ $< `gtk-config --cflags`

main/gui_gtk/aboutdialog.o:	main/gui_gtk/aboutdialog.c
				$(CC) $(CFLAGS) -c -o $@ $< `gtk-config --cflags`

main/gui_gtk/configdialog.o:	main/gui_gtk/configdialog.c
				$(CC) $(CFLAGS) -c -o $@ $< `gtk-config --cflags`

main/gui_gtk/support.o:		main/gui_gtk/support.c
				$(CC) $(CFLAGS) -c -o $@ $< `gtk-config --cflags`

main/gui_gtk/rombrowser.o:	main/gui_gtk/rombrowser.c
				$(CC) $(CFLAGS) -c -o $@ $< `gtk-config --cflags`

main/gui_gtk/romproperties.o:	main/gui_gtk/romproperties.c
				$(CC) $(CFLAGS) -c -o $@ $< `gtk-config --cflags`

main/gui_gtk/config.o:		main/gui_gtk/config.c
				$(CC) $(CFLAGS) -c -o $@ $< `gtk-config --cflags`

main/gui_gtk/dirbrowser.o:	main/gui_gtk/dirbrowser.c
				$(CC) $(CFLAGS) -c -o $@ $< `gtk-config --cflags`

main/gui_gtk/vcrcomp_dialog.o:	main/gui_gtk/vcrcomp_dialog.c
				$(CC) $(CFLAGS) -c -o $@ $< `gtk-config --cflags`

main/vcr_compress.o:		main/vcr_compress.cpp
				$(CXX) $(CXXFLAGS) -c -o $@ $< `avifile-config --cflags`

mupen64_nogui:	$(OBJ) $(OBJ_X86) main/main.o
		$(CC) $^ $(LIB) -Wl,-export-dynamic -L/usr/X11R6/lib -lSDL -lGL -lpthread -ldl -o $@
		strip --strip-all $@

ifneq ("$(shell grep VCR config.h)","\#define VCR_SUPPORT 1")

mupen64:	$(OBJ) $(OBJ_X86) $(OBJ_GTK_GUI)
		$(CC) $^ $(CFLAGS) $(LIB) -Wl,-export-dynamic `gtk-config --libs` -L/usr/X11R6/lib -lSDL -lGL -lpthread -ldl -o $@
		strip --strip-all $@

else

mupen64:	$(OBJ) $(OBJ_X86) $(OBJ_GTK_GUI) $(OBJ_VCR)
		$(CXX) $^ $(CFLAGS) $(LIB) -Wl,-export-dynamic `gtk-config --libs` `avifile-config --libs` -L/usr/X11R6/lib -lSDL -lGL -lpthread -ldl -o $@
		strip --strip-all $@
endif

mupen64_oldgui:	$(OBJ) $(OBJ_X86) main/main_gtk.o
		$(CC) $^ $(LIB) -Wl,-export-dynamic `gtk-config --libs --cflags` -L/usr/X11R6/lib -lSDL -lGL -lpthread -ldl -o $@
		strip --strip-all $@

install:
	cp mupen64 "$(PREFIX)bin"
	mkdir "$(SHARE)" | echo
	cp -rv mupen64.ini "$(SHARE)"
	cp -rv lang "$(SHARE)"
	cp -rv plugins "$(SHARE)"
	cp -rv doc "$(SHARE)"
	
clean:
	find . -name '*.o' -print0 | xargs -0r rm -f
	rm mupen64 mupen64_nogui mupen64_dbg



clean_jed:
	find . -name '*~' -print0 | xargs -0r rm -f

gprof:
	gprof mupen64_nogui > stat.txt
