# Makefile
# BCD -- Ben Hutton (blh36), Chris Leary (cdl28), Devrin Talen (dct23)
# ECE476 @ Cornell University
CC=avr-gcc
OPTIMIZE=-Os
DEFS=-D DEBUG_SIE -D DEBUG_HC
OBJCOPY=avr-objcopy
MCU_TARGET=atmega32
P_CFLAGS=-Wall $(OPTIMIZE) $(DEFS) -save-temps# optimize for size and warn all
override CFLAGS=-mmcu=$(MCU_TARGET) $(P_CFLAGS)# override needed by avr-lib build system
OC_HEX_FLAGS=-j .text -j .data -O ihex# avr object copy flags to make Intel hex
# text and data segments extracted (EEPROM sold separately)
PROG_NAME=mega32_usb
OBJECTS=usb_primitives.o usb_interface.o usb_system.o usb_client.o
PROGRAMMER=avrdude
PROG_FLAGS=-v -c stk500v2 -P /dev/ttyUSB0 -p m32 -u -U# NOTE: this will sometimes be stk500v2!
PROG_HEX_PREFIX=flash:w:
##################
# ENTIRE PROGRAM #
##################
install:
$(PROGRAMMER) $(PROG_FLAGS) $(PROG_HEX_PREFIX)$(PROG_NAME).hex
clean:
-rm *.i *.s *.o *.elf *.hex
all: $(PROG_NAME).hex
# all depends on the hex file
$(PROG_NAME).elf: $(OBJECTS)
# binary depends on object consituents
$(CC) $(CFLAGS) -o $@ $^
###################
# INFERENCE RULES #
###################
%.hex: %.elf
# hex depends on the (elf) binary
$(OBJCOPY) $(OC_HEX_FLAGS) $< $@
%.elf: %.c
%.o : %.c %.h
# all of the objects depend on their corresponding C and H files
$(CC) $(CFLAGS) -o $@ -c $<
#########
# SHELL #
#########
install_shell: shell
# program the chip
$(PROGRAMMER) $(PROG_FLAGS) $(PROG_HEX_PREFIX)test_shell_avr.hex
shell: $(OBJECTS) usb_shell.o
# create the elf file
$(CC) $(CFLAGS) -o test_shell_avr.elf $(OBJECTS) usb_shell.o test_shell_avr.c
# make the hex
$(OBJCOPY) $(OC_HEX_FLAGS) test_shell_avr.elf test_shell_avr.hex
##########
# CLIENT #
##########
client: $(OBJECTS)
# create the elf file
$(CC) $(CFLAGS) -o test_client_avr.elf $(OBJECTS) test_client_avr.c
# make the hex
$(OBJCOPY) $(OC_HEX_FLAGS) test_client_avr.elf test_client_avr.hex
install_client: client
# program the chip
$(PROGRAMMER) $(PROG_FLAGS) $(PROG_HEX_PREFIX)test_client_avr.hex
test_client:
# regression testing for the interface
#gcc -o usb_primitives.o -DNO_AVR_GCC -c usb_primitives.c
#gcc -o usb_interface.o -DNO_AVR_GCC -c usb_interface.o usb_interface.c
#gcc -o test_system.o -DNO_AVR_GCC usb_system.c usb_interface.c usb_primitives.c test_system.c
#gcc -o test_client.o -DNO_AVR_GCC usb_client.c usb_system.c usb_interface.c usb_primitives.c test_client.c
./test_client.o
rm test_client.o
##########
# SYSTEM #
##########
system: usb_primitives.o usb_interface.o usb_system.o
# create the elf file
$(CC) $(CFLAGS) -o test_system_avr.elf $(OBJECTS) test_system_avr.c
# make the hex
$(OBJCOPY) $(OC_HEX_FLAGS) test_system_avr.elf test_system_avr.hex
install_system: system
# program the chip
$(PROGRAMMER) $(PROG_FLAGS) $(PROG_HEX_PREFIX)test_system_avr.hex
test_system:
# regression testing for the interface
#gcc -o usb_primitives.o -DNO_AVR_GCC -c usb_primitives.c
#gcc -o usb_interface.o -DNO_AVR_GCC -c usb_interface.o usb_interface.c
gcc -o test_system.o -DNO_AVR_GCC usb_system.c usb_interface.c usb_primitives.c test_system.c
./test_system.o
rm test_system.o
#############
# INTERFACE #
#############
interface: usb_primitives.o usb_interface.o
# create the elf file
$(CC) $(CFLAGS) -o test_interface_avr.elf $(OBJECTS) test_interface_avr.c
# make the hex
$(OBJCOPY) $(OC_HEX_FLAGS) test_interface_avr.elf test_interface_avr.hex
install_interface: interface
# program the chip
$(PROGRAMMER) $(PROG_FLAGS) $(PROG_HEX_PREFIX)test_interface_avr.hex
test_interface:
# regression testing for the interface
#gcc -o usb_primitives.o -DNO_AVR_GCC -c usb_primitives.c
#gcc -o usb_interface.o -DNO_AVR_GCC -c usb_interface.o usb_interface.c
gcc -o test_interface.o -DNO_AVR_GCC -g usb_interface.c usb_primitives.c test_interface.c
./test_interface.o
rm test_interface.o
##############
# PRIMITIVES #
##############
primitives: usb_primitives.o
# create the elf file
$(CC) $(CFLAGS) -o test_primitives_avr.elf usb_primitives.o test_primitives_avr.c
# make the hex
$(OBJCOPY) $(OC_HEX_FLAGS) test_primitives_avr.elf test_primitives_avr.hex
install_primitives: primitives
# program the chip
$(PROGRAMMER) $(PROG_FLAGS) $(PROG_HEX_PREFIX)test_primitives_avr.hex
test_primitives:
# regression testing for the primitives
gcc -o usb_primitives.o -DNO_AVR_GCC -c usb_primitives.c
gcc -o test_primitives.o -DNO_AVR_GCC usb_primitives.o test_primitives.c
./test_primitives.o
rm test_primitives.o