#Makefile MUPEN64 for Linux

#CC  		=gcc -DX86 -O3 -mpentium -Wall -DEMU64_DEBUG
CC		=gcc -DX86 -O3 -fomit-frame-pointer -funroll-loops -ffast-math -mcpu=pentium -Wall -pipe
#CC		=gcc -DX86 -O3 -mpentium -Wall -g -pg
#CC 		=gcc -DX86 -Wall -pipe -g3 -DEMU64_DEBUG
#CC		=gcc -DX86 -Wall -pipe -g -DEMU64_DEBUG -DCOMPARE_CORE
#CC		=icc -DX86 -O3 -unroll -axM -vec_report3 -Dinline=
#CC		=gcc -DX86 -Wall -pipe -g

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

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

all:	mupen64_nogui mupen64

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

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

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

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

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

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

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

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

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

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

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

main/gui_gtk/dirbrowser.o:	main/gui_gtk/dirbrowser.c
				$(CC) -c -o $@ $< `gtk-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 $@

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

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 $@

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
