# NDSDEVDIR=C:/ndsdev
NDSDEVDIR=C:/devkitPro
# NDSLIBPATH=$(NDSDEVDIR)/ndslib
NDSLIBPATH=$(NDSDEVDIR)/libnds
# CROSS = $(NDSDEVDIR)/devkitarm/bin/arm-elf-
CROSS = $(NDSDEVDIR)/devkitARM/bin/arm-elf-

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


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

CFLAGS_COMMON=-fomit-frame-pointer -ffast-math -mthumb-interwork -Wall \
	-O2 $(INCLUDES)
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 "ReboNDS"


OBJS= over_bottom_gfx.o sprite_red_ball_gfx.o basics.o global.o gfx_load.o \
	init_game.o mainloop.o pause.o \
	walls_gfx.o game_top_gfx.o game_bottom_gfx.o filling.o time.o \
	large_fonts_gfx.o intro_top_gfx.o intro_bottom_gfx.o intro.o \
	printing.o sprite_laughing_ball_gfx.o laugh.o transition.o goodies.o \
	next_level_bottom_gfx.o retry_level_bottom_gfx.o \
	sprite_maelstrom_gfx.o sprite_slow_lines_gfx.o \
	sprite_swap_screen_gfx.o sprite_invert_pen_gfx.o \
	sprite_speed_balls_gfx.o sprite_dizzy_ball_gfx.o wav_bump.o \
	sprite_radioac_balls_gfx.o sprite_earth_quake_gfx.o persistent.o \
	scores_top_gfx.o scores_bottom_gfx.o scores.o \
	wav_evil_laugh.o wav_screen_touch.o wav_next_lev.o wav_earthquake.o \
	wav_invert_pen.o wav_swap_screens.o wav_slow_lines.o wav_saber.o \
	wav_bump_radioac.o wav_perfo_balls.o wav_speed_balls.o \
	pause_bottom_gfx.o wav_micro_active.o wav_retry_level.o arm9_main.o


world: rebonds.nds.gba


# -------------------------------- ARM 7 section.
arm7_main.o: arm7_main.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM7) -c arm7_main.c \
		-o arm7_main.o

arm7.elf: arm7_main.o
	$(LD) $(LD_FLAGS_COMMON) $(LD_FLAGS_ARM7) arm7_main.o \
		$(LIBS_ARM7) -o arm7.elf

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


# -------------------------------- ARM 9 section.

wav_retry_level.o: wav_retry_level.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_retry_level.c \
		-o wav_retry_level.o

wav_micro_active.o: wav_micro_active.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_micro_active.c \
		-o wav_micro_active.o

pause_bottom_gfx.o: pause_bottom_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c pause_bottom_gfx.c \
		-o pause_bottom_gfx.o

wav_saber.o: wav_saber.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_saber.c \
		-o wav_saber.o

wav_perfo_balls.o: wav_perfo_balls.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_perfo_balls.c \
		-o wav_perfo_balls.o

wav_speed_balls.o: wav_speed_balls.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_speed_balls.c \
		-o wav_speed_balls.o

wav_invert_pen.o: wav_invert_pen.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_invert_pen.c \
		-o wav_invert_pen.o

wav_swap_screens.o: wav_swap_screens.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_swap_screens.c \
		-o wav_swap_screens.o

wav_evil_laugh.o: wav_evil_laugh.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_evil_laugh.c \
		-o wav_evil_laugh.o

wav_slow_lines.o: wav_slow_lines.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_slow_lines.c \
		-o wav_slow_lines.o

wav_screen_touch.o: wav_screen_touch.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_screen_touch.c \
		-o wav_screen_touch.o

wav_earthquake.o: wav_earthquake.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_earthquake.c \
		-o wav_earthquake.o
wav_next_lev.o: wav_next_lev.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_next_lev.c \
		-o wav_next_lev.o

wav_bump_radioac.o: wav_bump_radioac.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_bump_radioac.c \
		-o wav_bump_radioac.o

scores.o: scores.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c scores.c -o scores.o

scores_bottom_gfx.o: scores_bottom_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c scores_bottom_gfx.c \
		-o scores_bottom_gfx.o

scores_top_gfx.o: scores_top_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c scores_top_gfx.c \
		-o scores_top_gfx.o

persistent.o: persistent.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c persistent.c \
		-o persistent.o

sprite_radioac_balls_gfx.o: sprite_radioac_balls_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c \
		sprite_radioac_balls_gfx.c -o sprite_radioac_balls_gfx.o

sprite_speed_balls_gfx.o: sprite_speed_balls_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c sprite_speed_balls_gfx.c \
		-o sprite_speed_balls_gfx.o

sprite_slow_lines_gfx.o: sprite_slow_lines_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c sprite_slow_lines_gfx.c \
		-o sprite_slow_lines_gfx.o

sprite_earth_quake_gfx.o: sprite_earth_quake_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c sprite_earth_quake_gfx.c \
		-o sprite_earth_quake_gfx.o

sprite_dizzy_ball_gfx.o: sprite_dizzy_ball_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c sprite_dizzy_ball_gfx.c \
		-o sprite_dizzy_ball_gfx.o

sprite_invert_pen_gfx.o: sprite_invert_pen_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c sprite_invert_pen_gfx.c \
		-o sprite_invert_pen_gfx.o

sprite_swap_screen_gfx.o: sprite_swap_screen_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c sprite_swap_screen_gfx.c \
		-o sprite_swap_screen_gfx.o

sprite_maelstrom_gfx.o: sprite_maelstrom_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c sprite_maelstrom_gfx.c \
		-o sprite_maelstrom_gfx.o

goodies.o: goodies.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c goodies.c \
		-o goodies.o

retry_level_bottom_gfx.o: retry_level_bottom_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c retry_level_bottom_gfx.c \
		-o retry_level_bottom_gfx.o

next_level_bottom_gfx.o: next_level_bottom_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c next_level_bottom_gfx.c \
		-o next_level_bottom_gfx.o

pause.o: pause.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c pause.c \
		-o pause.o

over_bottom_gfx.o: over_bottom_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c over_bottom_gfx.c \
		-o over_bottom_gfx.o

transition.o: transition.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c transition.c \
		-o transition.o

laugh.o: laugh.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c laugh.c \
		-o laugh.o

sprite_laughing_ball_gfx.o: sprite_laughing_ball_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c sprite_laughing_ball_gfx.c \
		-o sprite_laughing_ball_gfx.o

intro.o: intro.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c intro.c \
		-o intro.o

printing.o: printing.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c printing.c \
		-o printing.o

large_fonts_gfx.o: large_fonts_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c large_fonts_gfx.c \
		-o large_fonts_gfx.o

intro_bottom_gfx.o: intro_bottom_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c intro_bottom_gfx.c \
		-o intro_bottom_gfx.o

intro_top_gfx.o: intro_top_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c intro_top_gfx.c \
		-o intro_top_gfx.o

time.o: time.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c time.c \
		-o time.o

arm9_main.o: arm9_main.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c arm9_main.c \
		-o arm9_main.o

sprite_red_ball_gfx.o: sprite_red_ball_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c sprite_red_ball_gfx.c \
		-o sprite_red_ball_gfx.o

basics.o: basics.c basics.h
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c basics.c -o basics.o

game_bottom_gfx.o: game_bottom_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c game_bottom_gfx.c \
	-o game_bottom_gfx.o

game_top_gfx.o: game_top_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c game_top_gfx.c \
	-o game_top_gfx.o

gfx_load.o: gfx_load.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c gfx_load.c -o gfx_load.o

mainloop.o: mainloop.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c mainloop.c -o mainloop.o

global.o: global.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c global.c -o global.o

init_game.o: init_game.c init_game.h
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c init_game.c -o init_game.o

walls_gfx.o: walls_gfx.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c walls_gfx.c -o walls_gfx.o

filling.o: filling.c filling.h
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c filling.c -o filling.o

wav_bump.o: wav_bump.c
	$(GCC) $(CFLAGS_COMMON) $(CFLAGS_ARM9) -c wav_bump.c \
		-o wav_bump.o


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

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

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

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



clean:
	rm -f *.nds *.nds.gba
	rm -f *.bin
	rm -f *.elf
	rm -f *.o
	rm -f *~

