# Two stages Makefile ## Common vars DEFAULT = wiz NFAST = fast NCOMP = compatible ALL_TARGETS = wiz caanoo gp2x ODIR_SUFFIX = objs PNAME = pocketsnes ## First stage ifneq ($(STAGE),2) FILE_DATE = $(shell date +%Y-%m-%d) export MNAME export VNAME export COPT export OBJS export ARCH export SDK export STAGE export FILE_DATE all: make wiz make caanoo make gp2x # default to fast version default: $(DEFAULT)f # clean clean: ALL_TARGETS_DIRS = $(addsuffix _$(NFAST)_$(ODIR_SUFFIX)/,$(ALL_TARGETS)) $(addsuffix _$(NCOMP)_$(ODIR_SUFFIX)/,$(ALL_TARGETS)) clean: rm -f $(addsuffix *.o,$(ALL_TARGETS_DIRS)) rm -f *.gpe # when release is targeted compile both fast and compatible versions release: make $(DEFAULT)f make $(DEFAULT)c rm -f rel/*.gpe cp $(PNAME)_$(DEFAULT)_*.gpe rel/. zip $(PNAME)-$(FILE_DATE).zip rel/* # invoke stage 2 do: STAGE = 2 do: make # --------------------- # Wiz # --------------------- # -- Wiz common wiz_common: MNAME = wiz wiz_common: COPT += -mcpu=arm926ej-s -mtune=arm926ej-s -g -D__WIZ__ #wiz_common: COPT += -D__FAST_OBJS__ #wiz_common: COPT += -O3 wiz_common: COPT += -Os wiz_common: COPT += -ffast-math -msoft-float wiz_common: COPT += -finline -finline-functions -fexpensive-optimizations wiz_common: COPT += -falign-functions=32 -falign-loops -falign-labels -falign-jumps wiz_common: COPT += -fomit-frame-pointer wiz_common: COPT += -fno-common -fno-builtin -fstrict-aliasing -mstructure-size-boundary=32 # -fweb -frename-registers # -fsplit-ivs-in-unroller #wiz_common: COPT += -Wall -Wno-sign-compare -Wunused -Wpointer-arith -Wcast-align -Waggregate-return wiz_common: OBJS = wiz_sdk.o warm.o squidgehack.o pollux_set.o wiz_common: OBJS += os9x_65c816_global.o os9x_65c816_spcasm.o os9x_65c816_spcc.o os9x_asm_cpu.o wiz_common: ARCH = arm-open2x-linux wiz_common: SDK = /opt/open2x/gcc-4.1.1-glibc-2.3.6 #/$(ARCH) #wiz_common: ARCH = arm-openwiz-linux-gnu #wiz_common: SDK = /opt/openwiz/toolchain/$(ARCH) wiz_common: do # -- Fast version wizf: VNAME = $(NFAST) #wizf: COPT = -DASMCPU -D__DEBUG__ wizf: COPT = -DASMCPU wizf: wiz_common # -- Normal version wizc: VNAME = $(NCOMP) wizc: COPT = -DUSE_SA1 wizc: wiz_common wiz: make $@f make $@c # --------------------- # Caanoo # --------------------- # -- Caanoo common caanoo_common: MNAME = caanoo caanoo_common: COPT += -mcpu=arm926ej-s -mtune=arm926ej-s -g -D__WIZ__ -D__CAANOO__ caanoo_common: COPT += -Os caanoo_common: COPT += -finline -finline-functions -fexpensive-optimizations caanoo_common: COPT += -falign-functions=32 -falign-loops -falign-labels -falign-jumps caanoo_common: COPT += -fomit-frame-pointer caanoo_common: COPT += -fno-common -fno-builtin -fstrict-aliasing -mstructure-size-boundary=32 caanoo_common: OBJS = caanoo_sdk.o warm.o squidgehack.o pollux_set.o caanoo_common: OBJS += os9x_65c816_global.o os9x_65c816_spcasm.o os9x_65c816_spcc.o os9x_asm_cpu.o # EABI #caanoo_common: ARCH = arm-gph-linux-gnueabi #caanoo_common: SDK = /opt/caanoo_sdk/tools/gcc-4.2.4-glibc-2.7-eabi # OABI caanoo_common: COPT += -static -ffast-math -msoft-float caanoo_common: ARCH = arm-open2x-linux caanoo_common: SDK = /opt/open2x/gcc-4.1.1-glibc-2.3.6 caanoo_common: do # -- Fast version caanoof: VNAME = $(NFAST) #caanoof: COPT = -DASMCPU -D__DEBUG__ caanoof: COPT = -DASMCPU caanoof: caanoo_common # -- Normal version caanooc: VNAME = $(NCOMP) caanooc: COPT = -DUSE_SA1 caanooc: caanoo_common caanoo: make $@f make $@c # --------------------- # GP2X # --------------------- # -- GP2X common gp2x_common: MNAME = gp2x gp2x_common: COPT += -mcpu=arm920t -mtune=arm920t -static -g -D__GP2X__ gp2x_common: COPT += -Os gp2x_common: COPT += -ffast-math -msoft-float gp2x_common: COPT += -finline -finline-functions -fexpensive-optimizations gp2x_common: COPT += -falign-functions=32 -falign-loops -falign-labels -falign-jumps gp2x_common: COPT += -fomit-frame-pointer gp2x_common: COPT += -fno-common -fstrict-aliasing -mstructure-size-boundary=32 gp2x_common: OBJS = gp2x_sdk.o warm.o squidgehack.o mmuhack.o gp2x_common: OBJS += os9x_65c816_global_armv4.o os9x_65c816_spcasm.o os9x_65c816_spcc.o os9x_asm_cpu.o gp2x_common: ARCH = arm-open2x-linux gp2x_common: SDK = /opt/open2x/gcc-4.1.1-glibc-2.3.6 gp2x_common: do # -- Fast version gp2xf: VNAME = $(NFAST) gp2xf: COPT = -DASMCPU gp2xf: gp2x_common # -- Normal version gp2xc: VNAME = $(NCOMP) gp2xc: COPT = -DUSE_SA1 gp2xc: gp2x_common gp2x: make $@f make $@c ## Second stage else TOOLS = $(SDK)/bin GCC = $(TOOLS)/$(ARCH)-gcc STRIP = $(TOOLS)/$(ARCH)-strip ADSASM = $(TOOLS)/$(ARCH)-as LIBS = -I$(SDK)/include INCS = -L$(SDK)/lib ODIR = $(MNAME)_$(VNAME)_$(ODIR_SUFFIX) # Inopia's menu system, hacked for the GP2X under rlyeh's sdk PRELIBS = -lpthread -lz $(LIBS) # # SNES stuff (c-based) # #OBJS += touchscreen.o OBJS += apu.o apuaux.o c4.o c4emu.o cheats.o cheats2.o clip.o data.o screenshot.o OBJS += dsp1.o fxemu.o fxinst.o globals.o loadzip.o ppu.o OBJS += dma.o memmap.o OBJS += cpu.o cpuexec.o OBJS += cpuops.o OBJS += sa1.o sa1cpu.o OBJS += sdd1.o sdd1emu.o snapshot.o soundux.o spc700.o spc700a.o srtc.o #OBJS += spc_decode.o OBJS += tile16.o tile16add.o tile16add1_2.o tile16fadd1_2.o tile16sub.o tile16sub1_2.o tile16fsub1_2.o OBJS += mode7new.o mode7.o mode7add.o mode7add1_2.o mode7sub.o mode7sub1_2.o OBJS += mode7prio.o mode7addprio.o mode7add1_2prio.o mode7subprio.o mode7sub1_2prio.o OBJS += gfx16.o rops.o OBJS += usbjoy.o # # and some asm from LJP... # #OBJS += m3d_func.o # # Dave's minimal SDK # OBJS += menu.o config.o input.o gp2x_menutile.o gp2x_highlightbar.o \ gp2x_menu_header.o unzip.o ioapi.o zip.o asm_util.o png.o graphics.o lodepng.o theme.o minIni.o OBJS += disk_img.o OBJS += memset.o memcmp.o memcpy.o strlen.o strcmp.o strncmp.o # # and the glue code that sticks it all together :) # OBJS += main.o FOBJS = $(addprefix $(ODIR)/,$(OBJS)) COPT += $(INCS) $(LIBS) executable: $(FOBJS) $(GCC) $(COPT) $(FOBJS) $(PRELIBS) -o $(PNAME)d_$(MNAME)_$(VNAME).gpe -lstdc++ -lm $(STRIP) $(PNAME)d_$(MNAME)_$(VNAME).gpe -o $(PNAME)_$(MNAME)_$(VNAME).gpe $(FOBJS): | $(ODIR) $(ODIR): mkdir -p $(ODIR) tidy: rm $(ODIR)/*.o # -- Compilation rules $(ODIR)/%.o: %.cpp $(GCC) $(COPT) -c $< -o $@ $(ODIR)/%.o: %.c $(GCC) $(COPT) -c $< -o $@ $(ODIR)/%.o: %.s $(GCC) $(COPT) -c $< -o $@ $(ODIR)/%.o: %.S $(GCC) $(COPT) -c $< -o $@ endif