#  *** Blocktrap GBA ***
# Franois PESSAUX September 2004
# This program is freeware.
# Use its sources as you whant provided that you leave this copyright unchanged
# and that you drop a small word telling that I'm the author of these sources.
# Thank's a lot.
#   --Francois



# Makefile pour utiliser avec devKitARM.
CROSS = /usr/local/devkitARM_r6/bin/arm-elf-
ARCH = -mthumb -mthumb-interwork
# gba_mb.specs pour le multiboot
SPECS = -specs=gba.specs
CFLAGS	= -I.. \
	-Wall -fno-common \
	-mcpu=arm7tdmi -mtune=arm7tdmi \
	-fomit-frame-pointer\
	-ffast-math \
	$(ARCH) $(SPECS)


GCC = $(CROSS)gcc
AS = $(CROSS)as
OBJCOPY = $(CROSS)objcopy
LD = $(CROSS)ld

# Uncomment to compile under Windows with devkit installed with Cygwin.
#LIBPREFIX = "C:\Cygwin"

MAP = map.out
LIBS = $(LIBPREFIX)/usr/local/devkitARM_r6/arm-elf/lib/interwork/libc.a \
	$(LIBPREFIX)/usr/local/devkitARM_r6/lib/gcc/arm-elf/3.4.0/interwork/libgcc.a
LDFLAGS = -marmelf -Map $(MAP) -nostartfiles -Tlnkscript

CFILES = win.c ko.c starter_gfx.c trigtbl.c persistent.c control.c \
	intro_gfx.c intro.c \
	requesters_gfx.c fame_gfx.c pause_gfx.c blocks.c init.c \
	background.c digits.c game.c fonts.c char_table.c print.c fame.c\
	pause.c cursor_gfx.c starter.c main.c ints.c wav_falling.c \
	wav_ok.c wav_laser.c wav_turn.c wav_color_elim.c wav_eliminator.c \
	wav_perforator.c wav_color_mixer.c wav_screen_cleaner.c wav_end.c \
	wav_random_dir.c wav_random_col.c wav_timer_reset.c \
	wav_bonus_gained.o wav_eraser.o wav_malus_gained.o

OBJS = $(CFILES:.c=.o)

.SUFFIXES:
.SUFFIXES: .c .o

all : blocktrap.bin

crt0.o: crt0.S
	$(AS) -o $@ $<

# ELF to GBA conversion.
blocktrap.bin : blocktrap.elf
	$(OBJCOPY) -O binary blocktrap.elf $@

# Final link.
blocktrap.elf : crt0.o $(OBJS)
	$(LD) $(LDFLAGS) -o $@ crt0.o $(OBJS) $(LIBS)


.c.o:
	$(GCC) $(CFLAGS) -O3 -c $<


# Rgles particulires sinon GCC optimise trop en -O3
game.o: game.c ../gba.h ../timer.h ../screen_mode.h ../interrupt.h game.h \
	blocks.h background.h requesters_gfx.h fonts.h init.h print.h \
	control.h ints.h wav_laser.h wav_turn.h wav_color_elim.h \
	wav_eliminator.h wav_perforator.h wav_screen_cleaner.h \
	wav_color_mixer.h wav_random_col.h wav_random_dir.h wav_timer_reset.h \
	wav_bonus_gained.h wav_malus_gained.h wav_eraser.h
	$(GCC) $(CFLAGS) -O0 -c $<
intro.o: intro.c intro.h ../gba.h ../screen_mode.h control.h intro_gfx.h
	$(GCC) $(CFLAGS) -O0 -c $<
fame.o: fame.c ../gba.h ../screen_mode.h ../interrupt.h game.h control.h \
	fame_gfx.h fame.h persistent.h print.h blocks.h background.h \
	requesters_gfx.h fonts.h trigtbl.h init.h ints.h ko.h win.h wav_end.h
	$(GCC) $(CFLAGS) -O0 -c $<
print.o: print.c ../gba.h ../screen_mode.h game.h print.h digits.h \
	blocks.h background.h requesters_gfx.h fonts.h char_table.h init.h \
	control.h
	$(GCC) $(CFLAGS) -O0 -c $<


# Rgles normales en -O3
pause.o: pause.c ../gba.h ../screen_mode.h ../timer.h game.h \
	control.h pause_gfx.h fame.h persistent.h blocks.h background.h \
	requesters_gfx.h fonts.h pause.h init.h print.h
starter.o: starter.c starter_gfx.h ../gba.h
main.o: main.c ../gba.h game.h init.h control.h print.h intro.h fame.h \
	persistent.h
background.o: background.c ../gba.h
blocks.o: blocks.c ../gba.h
init.o: ../gba.h ../screen_mode.h game.h background.h digits.h blocks.h \
	requesters_gfx.h fonts.h print.h cursor_gfx.h init.h
requesters_gfx.o: requesters_gfx.c ../gba.h
fonts.o: fonts.c ../gba.h
char_table.o: char_table.c char_table.h ../gba.h
digits.o: digits.c digits.h ../gba.h
persistent.o: persistent.c ../gba.h game.h print.h fame.h
intro_gfx.o: intro_gfx.c intro_gfx.h  ../gba.h
fame_gfx.o: fame_gfx.c fame_gfx.h ../gba.h
pause_gfx.o: pause_gfx.c pause_gfx.h ../gba.h ../screen_mode.h game.h \
	control.h pause_gfx.h fame.h persistent.h blocks.h background.h \
	requesters_gfx.h fonts.h pause.h init.h print.h
cursor_gfx.o: cursor_gfx.c cursor_gfx.h ../gba.h
trigtbl.o: trigtbl.c trigtbl.h
ko.o: ko.c ko.h ../gba.h
win.o: win.c win.h ../gba.h
starter_gfx.o: starter_gfx.c starter_gfx.h blocks.h ../gba.h
ints.o: ints.c ints.h ../gba.h ../interrupt.h
wav_falling.o: wav_falling.c wav_falling.h ../gba.h
wav_ok.o: wav_ok.c wav_ok.h ../gba.h
wav_laser.o: wav_laser.c wav_laser.h ../gba.h
wav_turn.o: wav_turn.c wav_turn.h ../gba.h
wav_color_elim.o: wav_color_elim.c wav_color_elim.h ../gba.h
wav_eliminator.o: wav_eliminator.c wav_eliminator.h ../gba.h
wav_perforator.o: wav_perforator.c wav_perforator.h ../gba.h
wav_color_mixer.o: wav_color_mixer.c wav_color_mixer.h ../gba.h
wav_screen_cleaner.o: wav_screen_cleaner.c wav_screen_cleaner.h ../gba.h
wav_end.o: wav_end.c wav_end.h ../gba.h
wav_random_dir.o: wav_random_dir.c wav_random_dir.h ../gba.h
wav_random_col.o: wav_random_col.c wav_random_col.h ../gba.h
wav_timer_reset.o: wav_timer_reset.c wav_timer_reset.h ../gba.h
wav_bonus_gained.o: wav_bonus_gained.c wav_bonus_gained.h ../gba.h
wav_eraser.o: wav_eraser.c wav_eraser.h ../gba.h
wav_malus_gained.o: wav_malus_gained.c wav_malus_gained.h  ../gba.h
control.o: control.c ../gba.h ../screen_mode.h ../interrupt.h ../timer.h \
	game.h ints.h pause.h control.h print.h

clean:
	rm -f *.elf *.bin $(OBJS) crt0.o map.out *~
