NDSDEVDIR=C:/devkitPro
#NDSDEVDIR=/usr/local/devkitpro/
NDSLIBPATH=$(NDSDEVDIR)/libnds
CROSS = $(NDSDEVDIR)/devkitARM/bin/arm-elf-

GCC = $(CROSS)gcc
G++ = $(CROSS)g++
AS = $(CROSS)as
OBJCOPY = $(CROSS)objcopy
LD = $(CROSS)gcc
BIN2S = $(NDSDEVDIR)/devkitARM/bin/bin2s
NDSTOOL=$(NDSDEVDIR)/devkitARM/bin/ndstool
DSBUILD=$(NDSDEVDIR)/devkitARM/bin/dsbuild


INCLUDES=-I$(NDSLIBPATH)/include -I$(NDSLIBPATH)/include/nds

CFLAGS_COMMON=-fomit-frame-pointer -ffast-math -mthumb-interwork -Wall \
	-O2 $(INCLUDES) -Werror
CFLAGS_ARM7=-mcpu=arm7tdmi -mtune=arm7tdmi -DARM7 -fomit-frame-pointer
CFLAGS_ARM9=-mcpu=arm9tdmi -mtune=arm9tdmi -DARM9 -fomit-frame-pointer

LIBS_ARM7=-L$(NDSLIBPATH)/lib -lnds7
LIBS_ARM9=-L$(NDSLIBPATH)/lib -lnds9

LD_FLAGS_COMMON=-mthumb-interwork -mno-fpu
LD_FLAGS_ARM7=-specs=ds_arm7.specs
LD_FLAGS_ARM9=-specs=ds_arm9.specs

ICON= -o data/images/wifime_logo.bmp -b data/images/logo_16.bmp "Qbx"

ARM9_CFILES = global.c mathematics.c metacube.c camera.c \
	homebrew_cube.c gfx_engine.c mainloop.c \
	gfx_load.c info_game_gfx.c info_game_fonts_gfx.c printing.c \
	intro_top_gfx.c intro_bottom_gfx.c intro.c persistent.c pause.c \
	pause_bottom_gfx.c game_over_top_gfx.c gameover.c arm9_main.c \
	time.c options_bottom_gfx.c options_bottom_marker_gfx.c \
	options_bottom_blank_marker_gfx.c options.c sprites_gfx.c \
	endless_bottom_gfx.c highscores_endless_digits_gfx.c highscores.c \
	highscores_five_minutes_digits_gfx.c five_minutes_bottom_gfx.c \
	highscores_ten_minutes_digits_gfx.c ten_minutes_bottom_gfx.c \
	highscores_fifteen_minutes_digits_gfx.c fifteen_minutes_bottom_gfx.c \
	highscores_endless_fonts_gfx.c highscores_five_minutes_fonts_gfx.c \
	highscores_ten_minutes_fonts_gfx.c \
	highscores_fifteen_minutes_fonts_gfx.c \
	smile_splash_gfx.c neo_tiles_gfx.c splash.c hibernation_gfx.c \
	sleep_anim_gfx.c deep_space.c stupid.c cup.c gesture.c \
	wav_bubble_pop.c wav_splash_ding.c wav_drop.c wav_game_over_ding.c \
	wav_rotate.c wav_slide.c wav_dont_fit.c wav_disapear.c wav_scoring.c \
	letter_a.c letter_b.c letter_c.c letter_d.c letter_e.c letter_f.c \
	letter_g.c letter_h.c letter_i.c letter_j.c letter_k.c letter_l.c \
	letter_m.c letter_n.c letter_o.c letter_p.c letter_q.c letter_r.c \
	letter_s.c letter_t.c letter_u.c letter_v.c letter_w.c letter_x.c \
	letter_y.c letter_z.c letter_0.c letter_1.c letter_2.c letter_3.c \
	letter_4.c letter_5.c letter_6.c letter_7.c letter_8.c letter_9.c \
	letter_backspace.c  \
	input_fonts_gfx.c input_bottom_gfx.c stupid_bottom_gfx.c \
	char_table.c wav_unknown_letter.c \
	wav_a.c wav_b.c wav_c.c wav_d.c wav_e.c wav_f.c wav_g.c wav_h.c \
	wav_i.c wav_j.c wav_k.c wav_l.c wav_m.c wav_n.c wav_o.c wav_p.c \
	wav_q.c wav_r.c wav_s.c wav_t.c wav_u.c wav_v.c wav_w.c wav_x.c \
	wav_y.c wav_z.c wav_0.c wav_1.c wav_2.c wav_3.c wav_4.c wav_5.c \
	wav_6.c wav_7.c wav_8.c wav_9.c wav_backspace.c

TEXTURES_OBJFILES = \
	data/flipped_cube_texture.o \
	data/metacube_cube_texture.o \
	data/metacube_cube_texture_shaded.o \
	data/flipped_cube_texture_shaded.o \
	data/deep_space_texture.o \
	data/stupid_generic_texture.o

ARM9_OBJFILES = \
	$(TEXTURES_OBJFILES) \
	$(ARM9_CFILES:.c=.o)


define mybin2o
	$(BIN2S) $< | $(AS) $(ARCH) -o $(@)
	echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[]" __attribute__ "(("section "("\".rodata\"")))" ";" > `(echo $(<F) | tr . _)`.h
	echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[]" __attribute__ "(("section "("\".rodata\"")))" ";" >> `(echo $(<F) | tr . _)`.h
	echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size __attribute__ "(("section "("\".rodata\"")))" ";" >> `(echo $(<F) | tr . _)`.h
	echo Done
endef



.SUFFIXES:
.SUFFIXES: .c .o
.SUFFIXES: .bin .o


world: textures qbx.nds.gba

textures: $(TEXTURES_OBJFILES)

# -------------------------------- ARM 9 section.
.c.o:
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c $<


.bin.o:
	@$(mybin2o) $<


arm9.elf: $(ARM9_OBJFILES)
	$(LD) $(LD_FLAGS_COMMON) $(LD_FLAGS_ARM9) \
		$(ARM9_OBJFILES) $(LIBS_ARM9) -lm -o arm9.elf

arm9.bin: arm9.elf
	$(OBJCOPY) -O binary arm9.elf arm9.bin

# -------------------------------- WIFI ROM section.
qbx.nds: arm9.bin
	$(NDSTOOL) -c qbx.nds -9 arm9.bin $(ICON)

# -------------------------------- GBA CARTRIDGE ROM section.
qbx.nds.gba: qbx.nds
	$(DSBUILD) qbx.nds -o qbx.nds.gba



clean:
	rm -f *.nds *.nds.gba
	rm -f arm9.bin arm9.elf
	rm -f $(ARM9_OBJFILES) texture_bin.h
	rm -f *~

