#CROSS  = arm-linux-
#SDL_BASE = C:/devkitGP2X/bin/arm-linux-
#CROSS  = /opt/open2x/gcc-4.1.1-glibc-2.3.6/bin/arm-open2x-linux-
#SDL_BASE = /opt/open2x/gcc-4.1.1-glibc-2.3.6/bin/
#MORE_CFLAGS += -I/opt/open2x/gcc-4.1.1-glibc-2.3.6/include/

NAME   = uae4all
O      = o
RM     = rm -f
CC     = $(CROSS)gcc
CXX    = $(CROSS)g++
STRIP  = $(CROSS)strip
AS     = $(CROSS)as

PROG   = $(NAME)

all: $(PROG)

CYCLONE_CORE=1
ifndef CYCLONE_CORE
FAME_CORE=1
FAME_CORE_C=1
endif

#DEFAULT_CFLAGS = `$(SDL_BASE)sdl-config --cflags`
DEFAULT_CFLAGS = -I/usr/include/SDL -D_REENTRANT 
#LDFLAGS        = `$(SDL_BASE)sdl-config --libs` -lSDL_mixer -lsmpeg -lstdc++ -lSDL -lmikmod -lm -lz -static
LDFLAGS        = -L/usr/lib -lSDL -lpthread -lz -lXsp
# -static


MORE_CFLAGS += -DGP2X -DN8x0
#-Wall -fprofile-use

MORE_CFLAGS += -Isrc -Isrc/gp2x -Isrc/menu -Isrc/include -Isrc/gp2x/menu -Isrc/vkbd \
 -fomit-frame-pointer -Wno-unused -Wno-format -DUSE_SDL -DGCCCONSTFUNC="__attribute__((const))" \
 -DUSE_UNDERSCORE -fno-exceptions \
 -DOPTIMIZED_FLAGS \
 -DVKBD_ALWAYS 

MORE_CFLAGS += -DNO_SOUND
# \
 -DSHM_SUPPORT_LINKS=0 \
 -DUNALIGNED_PROFITABLE \
 -DOS_WITHOUT_MEMORY_MANAGEMENT \
#-DMENU_MUSIC

MORE_CFLAGS += -DROM_PATH_PREFIX=\"./\" -DDATA_PREFIX=\"./data/\" -DSAVE_PREFIX=\"./saves/\"

#MORE_CFLAGS += -mcpu=arm920 -mtune=arm920t -msoft-float -ffast-math
MORE_CFLAGS += -Os -g -pipe -mcpu=arm1136jf-s -mfpu=vfp -ffast-math

ifndef DEBUG
#MORE_CFLAGS += -O3
#MORE_CFLAGS += -fstrict-aliasing -mstructure-size-boundary=32 -fexpensive-optimizations
MORE_CFLAGS += -fweb -frename-registers -fomit-frame-pointer
#MORE_CFLAGS += -falign-functions=32 -falign-loops -falign-labels -falign-jumps
MORE_CFLAGS += -finline -finline-functions -fno-builtin
else
MORE_CFLAGS += -ggdb
endif

#ASFLAGS += -mfloat-abi=soft -mcpu=arm920t
ASFLAGS += -mcpu=arm1136jf-s -mfpu=vfp

#MORE_CFLAGS+= -DUSE_AUTOCONFIG
#MORE_CFLAGS+= -DUAE_CONSOLE

MORE_CFLAGS+= -DUSE_ZFILE

#MORE_CFLAGS+= -DUAE4ALL_NO_USE_RESTRICT

#MORE_CFLAGS+= -DNO_SOUND
#MORE_CFLAGS+= -DNO_THREADS

#MORE_CFLAGS+= -DDEBUG_TIMESLICE

MORE_CFLAGS+= -DFAME_INTERRUPTS_PATCH
#MORE_CFLAGS+= -DFAME_INTERRUPTS_SECURE_PATCH

# Some games (like Turrican2,3) becomes unstable if this is not enabled
MORE_CFLAGS+= -DSAFE_MEMORY_ACCESS

#MORE_CFLAGS+= -DUAE_MEMORY_ACCESS
#MORE_CFLAGS+= -DERROR_WHEN_MEMORY_OVERRUN

#MORE_CFLAGS+= -DDEBUG_UAE4ALL
#MORE_CFLAGS+= -DDEBUG_UAE4ALL_FFLUSH
#MORE_CFLAGS+= -DDEBUG_M68K
#MORE_CFLAGS+= -DDEBUG_INTERRUPTS
#MORE_CFLAGS+= -DDEBUG_CIA
##MORE_CFLAGS+= -DDEBUG_SOUND
#MORE_CFLAGS+= -DDEBUG_MEMORY
##MORE_CFLAGS+= -DDEBUG_MAPPINGS
#MORE_CFLAGS+= -DDEBUG_DISK
#MORE_CFLAGS+= -DDEBUG_CUSTOM
##MORE_CFLAGS+= -DDEBUG_EVENTS
##MORE_CFLAGS+= -DDEBUG_GFX -DDEBUG_BLITTER
##MORE_CFLAGS+= -DDEBUG_FRAMERATE
##MORE_CFLAGS+= -DAUTO_FRAMERATE=1400
##MORE_CFLAGS+= -DMAX_AUTO_FRAMERATE=4400
##MORE_CFLAGS+= -DAUTO_FRAMERATE_SOUND
#MORE_CFLAGS+= -DSTART_DEBUG=11554
#MORE_CFLAGS+= -DMAX_AUTOEVENTS=11560
#MORE_CFLAGS+= -DAUTO_RUN


#MORE_CFLAGS+= -DPROFILER_UAE4ALL

CFLAGS  = $(DEFAULT_CFLAGS) $(MORE_CFLAGS)

OBJS =	\
	src/audio.o \
	src/autoconf.o \
	src/blitfunc.o \
	src/blittable.o \
	src/blitter.o \
	src/cia.o \
	src/savedisk.o \
	src/compiler.o \
	src/custom.o \
	src/disk.o \
	src/drawing.o \
	src/ersatz.o \
	src/gfxutil.o \
	src/keybuf.o \
	src/main.o \
	src/md-support.o \
	src/memory.o \
	src/missing.o \
	src/gui.o \
	src/od-joy.o \
	src/sound_gp2x.o \
	src/sdlgfx.o \
	src/writelog.o \
	src/zfile.o \
	src/menu/fade.o \
	src/vkbd/vkbd.o \
	src/gp2x/memcpy.o \
	src/gp2x/memset.o \
	src/gp2x/gp2x.o \
	src/gp2x/inputmode.o \
	src/gp2x/volumecontrol.o \
	src/gp2x/menu/menu.o \
	src/gp2x/menu/menu_fileinfo.o \
	src/gp2x/menu/menu_load.o \
	src/gp2x/menu/menu_main.o \
	src/gp2x/menu/menu_overclock.o \
	src/gp2x/cpuspeed/cpu_speed.o



ifdef FAME_CORE
ifdef FAME_CORE_C
CFLAGS+=-DUSE_FAME_CORE -DUSE_FAME_CORE_C
src/m68k/fame/famec.o: src/m68k/fame/famec.cpp
OBJS += src/m68k/fame/famec.o
else
CFLAGS+=-DUSE_FAME_CORE
src/m68k/fame/fame.o: src/m68k/fame/fame.asm
	nasm -f elf src/m68k/fame/fame.asm
OBJS += src/m68k/fame/fame.o
endif
OBJS += src/m68k/fame/m68k_intrf.o
OBJS += src/m68k/m68k_cmn_intrf.o
else # FAME_CORE
ifdef CYCLONE_CORE
# use all FAME hacks in uae code for Cyclone too
CFLAGS+=-DUSE_FAME_CORE
CFLAGS+=-DUSE_CYCLONE_CORE
OBJS += src/m68k/cyclone/cyclone.o
OBJS += src/m68k/m68k_cmn_intrf.o
OBJS += src/m68k/cyclone/m68k_intrf.o
# asm memhandlers
CFLAGS+=-DUSE_CYCLONE_MEMHANDLERS
OBJS += src/m68k/cyclone/memhandlers.o
else
OBJS += \
	src/m68k/uae/newcpu.o \
	src/m68k/uae/readcpu.o \
	src/m68k/uae/cpudefs.o \
	src/m68k/uae/fpp.o \
	src/m68k/uae/cpustbl.o \
	src/m68k/uae/cpuemu.o
endif
endif



CPPFLAGS  = $(CFLAGS)

$(PROG): $(OBJS)
	$(CC) $(CFLAGS) -o $(PROG) $(OBJS) $(LDFLAGS)
ifndef DEBUG
	#$(STRIP) $(PROG)
endif


run: $(PROG)
	./$(PROG)

clean:
	$(RM) $(PROG) $(OBJS)

up: $(PROG)
	cp -v $< /mnt/gp2x/mnt/sd/emus/uae4all/

