##
## The unofficial LEGO Mindstorms RCX SDK
## Makefile - allows you to keep the upper hand
## (c) 1998 by Markus L. Noga <noga@inrialpes.fr>    
##

# tool prefix 
INSTPREFIX=/usr/local/bin/h8300-hitachi-hms-

# our target
TARGET=kernel1

# kernel sources & objects
KSOURCES=mm.c kmain.c
KOBJECTS=mm.o kmain.o

# user sources & objects
USOURCES=main.c
UOBJECTS=main.o

# which assembler startup file to use for C files
CBOOTSTRAP=cboot2

# cflags
CFLAGS=-O2 -mno-s -mno-h

# do we need zero padding of the srec file?
#NEED_ZERO_PADDING=--pad-to 0xC000

##
## older options
##

# how to disassemble
ODFLAGS = --disassemble-all --no-show-raw-insn -m h8300

# which firmware version to act upon
FIRMVERS=firm0309


### no user servicable parts below

AS=$(INSTPREFIX)as
LD=$(INSTPREFIX)ld
OBJCOPY=$(INSTPREFIX)objcopy
OBJDUMP=$(INSTPREFIX)objdump
GCC=$(INSTPREFIX)gcc

all: $(TARGET).srec

depend:
	makedepend $(KSOURCES) $(USOURCES)

tags:
	ctags $(KSOURCES) $(USOURCES)
	
clean:
	rm -f *.o *.coff *.srec *~ *.bak *.tgz
	
kernel%.tgz:
	sh -c "mkdir kernel$*"
	cp Makefile $(KSOURCES) $(USOURCES) *.h $(CBOOTSTRAP)*.S kernel$*/
	tar -czf kernel$*.tgz kernel$*/*
	rm -rf kernel$*
	
# target linking
$(TARGET).coff: $(KOBJECTS) $(UOBJECTS) $(CBOOTSTRAP)-head.o $(CBOOTSTRAP)-tail.o
	$(LD) -Ttext 0x8000 --oformat coff-h8300 $(CBOOTSTRAP)-head.o $(KOBJECTS) $(UOBJECTS) $(CBOOTSTRAP)-tail.o -o $(TARGET).coff
	chmod a-x $(TARGET).coff
	
###
### generic rules
###

# how to compile C source
%.o: %.c
	$(GCC) $(CFLAGS) -c $*.c -o $*.o

# how to assemble C bootstrap code
%.o: %.S
	$(AS) $*.S -o $*.o

# how to make a srec file of the appropriate length
%.srec: %.coff	
	$(OBJCOPY) -I coff-h8300 -O srec $(NEED_ZERO_PADDING) $*.coff $*.srec
	chmod a-x $*.srec

# how to disassemble new firmware files
%.dis: %.srec
	$(OBJDUMP) $(ODFLAGS) $*.srec > $*.dis

# how to disassemble original firmware file
%.dis: %.lgo
	$(OBJDUMP) $(ODFLAGS) $*.lgo > $*.dis

# how to merge labels etc into disassembly
%.s: %.fix $(FIRMVERS).dis
	./fixfirm.pl $*.fix $(FIRMVERS).dis > $*.s

# how to reassemble new firmware file
%.srec: %.s
	$(AS) $*.s -o $*.o
	$(LD) -Ttext=0x8000 $*.o -o $*.out
	$(OBJCOPY) -O srec $*.out $*.srec
	rm -f $*.o $*.out
	chmod -x $*.srec

# DO NOT DELETE - makedepend depends on this!

hello-world.o: rcx-lcd.h
lcd-test.o: rcx-rom.h rcx-lcd.h
mem.o: mem-internal.h mem.h rcx-lcd.h rcx-rom.h
