#  *** Blabla GBA ***
# Franois PESSAUX Dcember 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 = \
	proba_data.c \
	messages.c \
	bg_data.c \
	letters_data.c \
	sprites_data.c \
	sfonts_data.c \
	progress_data.c \
	popup_data.c \
	intro_data.c \
	fame_data.c \
	intro_pointer_data.c \
	game_over_data.c \
	popup_char_table.c \
	wlist_char_table.c \
	wav_bad_key.c \
	wav_inexist.c \
	wav_next_level.c \
	wav_timer.c \
	time.c \
	key_input.c \
	printing.c \
	interrupts.c \
	automaton.c \
	persistent.c \
	intro.c \
	game.c \
	init.c \
	fame.c \
	gfx_effects.c \
	game_over.c \
	ihm.c \
	main.c
OBJS = $(CFILES:.c=.o)

.SUFFIXES:
.SUFFIXES: .c .o

all: blabla.bin


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


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

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


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


# Rgles normales en -O3
main.o: main.c \
  ../gba.h ../interrupt.h basic_types_defs.h init.h game.h automaton.h \
  printing.h intro.h ihm.h messages.h interrupts.h persistent.h \
  gfx_effects.h

bg_data.o: bg_data.c bg_data.h ../gba.h
letters_data.o: letters_data.c letters_data.h bg_data.h ../gba.h
sprites_data.o: sprites_data.c sprites_data.h ../gba.h

init.o: init.c \
  ../gba.h ../screen_mode.h basic_types_defs.h game.h bg_data.h \
  letters_data.h popup_data.h sfonts_data.h progress_data.h \
  sprites_data.h

interrupts.o: interrupts.c interrupts.h ../gba.h ../interrupt.h

game.o: game.c \
  ../gba.h basic_types_defs.h game.h automaton.h printing.h proba_data.h \
  intro.h time.h persistent.h

automaton.o: automaton.c \
  ../gba.h basic_types_defs.h game.h automaton.h printing.h \
  data/raw_french_dic_data data/raw_english_dic_data

sfonts_data.o: sfonts_data.c sfonts_data.h ../gba.h
printing.o: printing.c printing.h sfonts_data.h ../gba.h
popup_char_table.o: popup_char_table.c popup_char_table.h ../gba.h
wlist_char_table.o: wlist_char_table.c wlist_char_table.h ../gba.h
key_input.o: key_input.c key_input.h ../gba.h

ihm.o: ihm.c \
  ../gba.h ../screen_mode.h ../interrupt.h basic_types_defs.h game.h \
  automaton.h ihm.h bg_data.h letters_data.h popup_data.h sfonts_data.h \
  init.h printing.h interrupts.h key_input.h gfx_effects.h \
  wlist_char_table.h progress_data.h intro.h time.h messages.h \
  game_over.h fame.h fame_data.h wav_bad_key.h wav_next_level.h \
  wav_inexist.h

gfx_effects.o: gfx_effects.c gfx_effects.h ../gba.h
popup_data.o: popup_data.c popup_data.h ../gba.h

gfx_effects.o: gfx_effects.c \
  ../gba.h ../screen_mode.h ../interrupt.h basic_types_defs.h init.h \
  key_input.h gfx_effects.h interrupts.h

progress_data.o: progress_data.c progress_data.h ../gba.h
intro_data.o :intro_data.c intro_data.h ../gba.h

intro.o: intro.c \
  ../screen_mode.h basic_types_defs.h game.h init.h key_input.h intro.h \
  intro_data.h intro_pointer_data.h

intro_pointer_data.o: intro_pointer_data.c intro_pointer_data.h ../gba.h
proba_data.o: proba_data.c proba_data.h
messages.o: messages.c messages.h
time.o: time.c time.h ../gba.h
game_over_data.o: game_over_data.c game_over_data.h ../gba.h

game_over.o: game_over.c ../gba.h ../screen_mode.h basic_types_defs.h \
  game_over_data.h gfx_effects.h messages.h printing.h intro.h

fame_data.o: fame_data.c fame_data.h

fame.o: fame.c ../gba.h ../screen_mode.h basic_types_defs.h game.h ihm.h \
  fame_data.h fame.h gfx_effects.h

persistent.o: persistent.c \
  ../gba.h basic_types_defs.h game.h persistent.h

wav_bad_key.o: wav_bad_key.c wav_bad_key.h
wav_inexist.o: wav_inexist.c wav_inexist.h
wav_next_level.o: wav_next_level.c wav_next_level.h
wav_timer.o: wav_timer.c wav_timer.h


data/raw_french_dic_data: data/French3-7.bin
	hexdump -v -e '"0x%x, \n"' data/French3-7.bin > data/raw_french_dic_data

data/raw_english_dic_data: data/English3-7.bin
	hexdump -v -e '"0x%x, \n"' data/English3-7.bin > data/raw_english_dic_data
clean:
	rm -f *.elf *.bin $(OBJS) crt0.o map.out *~
