# AvrX 2.5 GCC Examples makefile
# Larry Barello May, 2000
#
# Hard wire the AvrXStack location, which is at end of 8515 ram...
# How to set a stack elsewhere in RAM is TBD...
#
	MCU	= at90s8535
#	MCU	= at90s8515
	FORMAT	= ihex
	LIB	= $(AVRX)/avrx/avrx.a
	INCDIR	= -I. -I$(AVRX)/avrx

	LDFLAGS = -Wl,-lm,--defsym,AvrXStack=0x25F,-Map=$(<:.o=.map),--cref,-v,--sort-common
	AFLAGS	= -c -mmcu=$(MCU) -Wa,-gstabs -mmcu=$(MCU) -I$(INCDIR)
	CFLAGS	= -g -O2 -Wall -fno-gcse -mmcu=$(MCU)

	RM	= rm -f
	BIN	= avr-objcopy
	CC	= avr-gcc
	AS	= avr-gcc -x assembler-with-cpp

#	include monitor.mak
	include maze.mak
	
	OBJ	= $(SRC:.c=.o) $(ASRC:.s=.o)
	
%o: %c
	$(CC) -c $< $(INCDIR) $(CFLAGS) -D$(TARGET) -o $@

%s: %c
	$(CC) -S $< $(INCDIR) $(CFLAGS) -D$(TARGET) -o $@

%o: %s
	$(AS) $(AFLAGS) $< -o $@
	
%elf:   %o
	$(CC) $< $(LIB) $(LDFLAGS) -mmcu=$(MCU) -o $@

%obj: %elf
	$(BIN) -O avrobj -R .eeprom $< $@

%hex: %elf
	$(BIN) -O $(FORMAT) -R .eeprom $< $@

%eep: %elf
	$(BIN) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O $(FORMAT) $< $@

all:	NewBot.obj NewBot.hex NewBot.eep

NewBot.elf:   $(OBJ) $(LIB)
	$(CC) $(OBJ) $(LIB) $(LDFLAGS) -mmcu=$(MCU) -o $@

foo.elf:	foo.o 
	$(CC) foo.o $(LIB) $(LDFLAGS) -mmcu=$(MCU) -o $@

clean:
	set
	$(RM) *.o
	$(RM) $(SRC:.c=.s)
	$(RM) $(SRC:.c=.elf)
	$(RM) $(SRC:.c=.obj)
	$(RM) $(SRC:.c=.eep)
	$(RM) $(SRC:.c=.hex)
	$(RM) $(SRC:.c=.map)
	$(RM) $(SRC:.c=.c_sym)

assembly: $(SRC:.c=.s)

NewBot.o:	makefile NewBot.c hardware.h gp2d02.h
monitor.o:	makefile monitor.c serialio.h  adc_driver.h
serialio.o:	makefile serialio.c serialio.h maze.h
MotorTask.o:	makefile MotorTask.c hardware.h
LcdTask.o:	makefile LcdTask.c lcdio.h lcdtask.h
adc_driver.o:	makefile adc_driver.s
maze.o:		makefile maze.c maze.h hardware.h adc_driver.h
mazesup.o:	makefile mazesup.c maze.h hardware.h adc_driver.h
lcdio.s:	makefile lcd.inc
lcd.s:		makefile myctoasm.inc lcd.inc
