# (c) Peter Horsman, 2002
# Pete (dooby@bits.bris.ac.uk / http://bits.bris.ac.uk/dooby/)

# gba project makefile.

# Tools and flags.
CROSS = arm-agb-elf-
CC = $(CROSS)gcc
CFLAGS = -Wall -mthumb-interwork -O2 -Wall -mapcs-32 -mcpu=arm7tdmi
THUMB = -mthumb
ARM = -marm
DEFAULT = $(THUMB)

AS = $(CROSS)as
ASFLAGS = -mthumb-interwork

LD = $(CROSS)gcc
MAP = map.out
LDFLAGS = -mthumb-interwork -Xlinker -Map $(MAP) -nostartfiles -Tlnkscript

# Libraru and include paths.
LIBS = -lm
INCLUDES = 

# Name of output targets.
NAME = raycast
TARGET = $(NAME).gba

# Files you want to go in IWRAM.
IWRAM =	interrupt.text.iwram.o asmraster.text.iwram.o 

# C source files.
SRC =	main.o bank.o bank_data.o trig.o object.o

# Graphics related raw input files (e.g. sprites, palettes).
GFX =  

# Sound related o input files.
SOUND =

# This rule builds a .h file of all your raw input file exports.
# So this creates a file (say) 'symbol.h' which has lines like (say):
# extern const u8 _binary_bob_raw_start[];
SYMBOLS = symbols.h
SYMBOL_PREFIX = "extern const u8 _binary_"
SYMBOL_SUFFIX1 = "_start[];"
SYMBOL_SUFFIX2 = "_end[];"



# Here follow the generic build rules.
all:  $(TARGET)

# Rule to build raw files into .o files, noting their exported symbols.
%.o: %.raw
	@$(CROSS)objcopy -I binary -O elf32-little $< temp.o 2> /dev/null
	@$(CROSS)ld -T convert.ls temp.o -o $@
	@interflip -mthumb-interwork $@
	@echo $(CROSS)objcopy -I binary -O elf32-little $< $@
	@echo -n $(SYMBOL_PREFIX) >> $(SYMBOLS)
	@echo -n "$<" | tr "[:punct:]" "_" >> $(SYMBOLS)
	@echo $(SYMBOL_SUFFIX1) >> $(SYMBOLS)
	@echo -n $(SYMBOL_PREFIX) >> $(SYMBOLS)
	@echo -n "$<" | tr "[:punct:]" "_" >> $(SYMBOLS)
	@echo $(SYMBOL_SUFFIX2) >> $(SYMBOLS)

release:
	make clean all
	rm -f *.o $(NAME) $(GFX) $(SOUND) $(SYMBOLS) $(MAP)

clean:
	rm -f *.o $(TARGET) $(NAME) $(GFX) $(SOUND) $(SYMBOLS) $(MAP)

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

%.o: %.s
	$(AS) $(ASFLAGS) -o $@ $<

%.o: %.thumb.c
	$(CC) $(THUMB) $(INCLUDES) $(CFLAGS) -c $< -o $@

%.o: %.arm.c
	$(CC) $(ARM) $(INCLUDES) $(CFLAGS) -c $< -o $@

%.o: %.c
	$(CC) $(DEFAULT) $(INCLUDES) $(CFLAGS) -c $< -o $@

%.text.iwram.o: %.o
	cp $< $@

$(NAME): crt0.o $(IWRAM) $(GFX) $(SOUND) $(SRC)
	touch $(MAP)
	$(LD) $(LDFLAGS) -o $@ crt0.o $(SRC) $(IWRAM) $(GFX) $(SOUND) $(LIBS)
	$(CROSS)size $@

$(TARGET): $(NAME)
	$(CROSS)objcopy -v -O binary $< $@
	gbafix $@ -tLameFighter

