#
# $Header: /home/ben/.cvs_rep/nds/Debug/monitor/Makefile,v 1.2 2006/10/10 12:16:12 ben Exp $
#

NDSTOOL = ndstool

PREFIX = arm-eabi-
CC = $(PREFIX)gcc
LD = $(PREFIX)ld
AR = $(PREFIX)ar
AS = $(PREFIX)as
OBJCOPY	= $(PREFIX)objcopy

ARCH = -mthumb-interwork -march=armv5te -mtune=arm946e-s

INC_DIRS = $(DEVKITPRO)/libnds/include ../include

CFLAGS	= -g -W -Wall -DARM9\
	 -fomit-frame-pointer\
	-ffast-math\
	$(ARCH) $(addprefix -I,$(INC_DIRS))

THUMB_CFLAGS = -mthumb $(CFLAGS)

ASFLAGS = -g $(ARCH)

APP_LDFLAGS	= -specs=../build_things/ds_debug_arm9.specs -g $(ARCH) -mno-fpu

LDFLAGS = -specs=../build_things/ds_debugstub_arm9.specs -g $(ARCH) -mno-fpu

SERIAL_LIBS = debugstub9 debugserial9 serial9 nds9
TCP_LIBS = debugstub9 debugtcp9 dswifi9 serial9 nds9

#LIBDIRS = $(DEVKITPRO)/libnds/lib $(DEVKITPRO)/libnds/wifi/lib ../libs
LIBDIRS = $(DEVKITPRO)/libnds/lib ../../ndsWifi/lib ../libs

# the base name
serial_base_name = monitor_serial
tcp_base_name = monitor_tcp

# the nds file
serial_nds_file = $(serial_base_name).nds
tcp_nds_file = $(tcp_base_name).nds

sources = monitor.c

asm_sources = ds_debugstub_arm9_crt0.asm

serial_objects = $(sources:.c=.serial.o)
tcp_objects = $(sources:.c=.tcp.o)

thumb_source = some_thumb_code.c
thumb_object = $(thumb_source:.c=.o)

.PHONY : all
all : $(serial_nds_file) $(tcp_nds_file)
	$(MAKE) -f Makefile.app


# the ARM7 and ARM9 binary files
serial_arm9_bin_file = $(serial_base_name).arm9
serial_arm9_elf_file = $(serial_arm9_bin_file).elf

tcp_arm9_bin_file = $(tcp_base_name).arm9
tcp_arm9_elf_file = $(tcp_arm9_bin_file).elf

# The arm9 map file
serial_arm9_map_file = $(subst elf,map,$(serial_arm9_elf_file))
tcp_arm9_map_file = $(subst elf,map,$(tcp_arm9_elf_file))

# The thing relating to the .nds banner
banner_text_file = banner.txt
banner_text := $(shell cat $(banner_text_file))
banner_bmp_file = banner.bmp

# How to build the ARM binaries stuff
$(serial_arm9_bin_file) : $(serial_arm9_elf_file)
	@$(OBJCOPY) -O binary $< $@

$(tcp_arm9_bin_file) : $(tcp_arm9_elf_file)
	@$(OBJCOPY) -O binary $< $@


$(serial_arm9_elf_file) : $(serial_objects) $(thumb_object) ds_debugstub_arm9_crt0.o ../libs/libdebugstub9.a ../libs/libdebugserial9.a
	$(CC) $(LDFLAGS) -Wl,-Map,$(serial_arm9_map_file) $(addprefix -L,$(LIBDIRS)) \
		$(serial_objects) $(thumb_object) $(addprefix -l,$(SERIAL_LIBS)) -o $@

$(tcp_arm9_elf_file) : $(tcp_objects) $(thumb_object) ds_debugstub_arm9_crt0.o ../libs/libdebugstub9.a ../libs/libdebugtcp9.a
	$(CC) $(LDFLAGS) -Wl,-Map,$(tcp_arm9_map_file) $(addprefix -L,$(LIBDIRS)) \
		$(tcp_objects) $(thumb_object) $(addprefix -l,$(TCP_LIBS)) -o $@

# How to build the .nds file
$(serial_nds_file) : $(banner_text_file) $(banner_bmp_file) $(serial_arm9_bin_file) ../arm7/debug_tcp.arm7
	$(NDSTOOL) -c $@ -b $(banner_bmp_file) "$(banner_text)"\
	 -9 $(serial_arm9_bin_file) -7 ../arm7/debug_tcp.arm7

$(tcp_nds_file) : $(banner_text_file) $(banner_bmp_file) $(tcp_arm9_bin_file) ../arm7/debug_tcp.arm7
	$(NDSTOOL) -c $@ -b $(banner_bmp_file) "$(banner_text)"\
	 -9 $(tcp_arm9_bin_file) -7 ../arm7/debug_tcp.arm7


# Make the object files
$(thumb_object) : $(thumb_source)
	@echo building $@ from $<
	$(CC) $(THUMB_CFLAGS) $< -c -o $@

%.o : %.asm
	$(CC) -x assembler-with-cpp -marm -c $< -o $@

%.serial.o : %.c
	@echo building $@ from $<
	$(CC) $(CFLAGS) -DSERIAL_DEBUG $< -c -o $@

%.tcp.o : %.c
	@echo building $@ from $<
	$(CC) $(CFLAGS) -DTCP_DEBUG $< -c -o $@

.PHONY : clean
clean :
	-rm -f *.o
	-rm -f $(serial_nds_file) $(serial_arm9_bin_file) $(serial_arm9_elf_file) $(serial_arm9_map_file)
	-rm -f $(tcp_nds_file) $(tcp_arm9_bin_file) $(tcp_arm9_elf_file) $(tcp_arm9_map_file)
	$(MAKE) -f Makefile.app clean

# Generate the dependencies
%.d: %.c
	set -e; $(CC) -MM $(CFLAGS) $< \
		| sed 's|\($*\)\.o[ :]*|\1.o $@ : |g' > $@; \
		[ -s $@ ] || rm -f $@

# include the dependencies files
include $(sources:.c=.d)
