diff options
Diffstat (limited to 'software/avr.include.mk')
-rw-r--r-- | software/avr.include.mk | 158 |
1 files changed, 52 insertions, 106 deletions
diff --git a/software/avr.include.mk b/software/avr.include.mk index 93a34fb..3950dd1 100644 --- a/software/avr.include.mk +++ b/software/avr.include.mk @@ -20,115 +20,56 @@ ## along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. ## -ifeq ($(BOARD_TYPE),teensy1) - MCU := at90usb162 - F_CPU := 16000000 - PROG := teensy -endif -ifeq ($(BOARD_TYPE),teensy2) - MCU := atmega32u4 - F_CPU := 16000000 - PROG := teensy -endif -ifeq ($(BOARD_TYPE),teensy1pp) - MCU := at90usb646 - F_CPU := 16000000 - PROG := teensy -endif -ifeq ($(BOARD_TYPE),teensy2pp) - MCU := at90usb1286 - F_CPU := 16000000 - PROG := teensy -endif -ifeq ($(BOARD_TYPE),hhd70dongle) - MCU := atmega32u4 - F_CPU := 16000000 - PROG := DFU -endif -ifeq ($(BOARD_TYPE),arduinoUno) - MCU := atmega328p - F_CPU := 16000000 - PROG := avrdude - UPLOAD_RATE := 57600 - PROG_TYPE := stk500v1 - AVRDUDE_PORT := /dev/ttyUSB0 - RESET_FUNC := ../tools/reset_arduino - RESET_PARAM = $(AVRDUDE_PORT) -endif -ifeq ($(BOARD_TYPE),arduino2009v2) - MCU := atmega328p - F_CPU := 16000000 - PROG := avrdude - UPLOAD_RATE := 57600 - PROG_TYPE := stk500v1 - AVRDUDE_PORT := /dev/ttyUSB0 - RESET_FUNC := ../tools/reset_arduino - RESET_PARAM = $(AVRDUDE_PORT) -endif -ifeq ($(BOARD_TYPE),arduino2009) - MCU := atmega168 - F_CPU := 16000000 - PROG := avrdude - UPLOAD_RATE := 19200 - PROG_TYPE := stk500v1 - AVRDUDE_PORT := /dev/ttyUSB0 - RESET_FUNC := ../tools/reset_arduino - RESET_PARAM = $(AVRDUDE_PORT) -endif -ifeq ($(BOARD_TYPE),arduino10000) - MCU := atmega168 - F_CPU := 16000000 - PROG := avrdude - UPLOAD_RATE := 19200 - PROG_TYPE := stk500v1 - AVRDUDE_PORT := /dev/ttyUSB0 - RESET_FUNC := ../tools/reset_arduino - RESET_PARAM = $(AVRDUDE_PORT) -endif -ifeq ($(BOARD_TYPE),arduinoNG) - MCU := atmega8 - F_CPU := 16000000 - PROG := avrdude - UPLOAD_RATE := 19200 - PROG_TYPE := stk500v1 - AVRDUDE_PORT := /dev/ttyUSB0 -endif - -CC = avr-gcc -OBJCOPY = avr-objcopy - -DFU = dfu-programmer -teensy = teensy_loader_cli -avrdude = avrdude - -## Options common to compile, link and assembly rules -COMMON = -mmcu=$(MCU) - -## Compile options common for all C compilation units. -CFLAGS = $(COMMON) -CFLAGS += -O2 -CFLAGS += -funsigned-char -CFLAGS += -funsigned-bitfields -CFLAGS += -ffunction-sections -CFLAGS += -fpack-struct -CFLAGS += -fshort-enums -CFLAGS += -Wall -CFLAGS += -Wstrict-prototypes -CFLAGS += -DF_CPU=$(F_CPU)UL -CFLAGS += -D__BOARD_$(BOARD_TYPE)__ - -## Linker flags -LDFLAGS = $(COMMON) -LDFLAGS += +include ../avr.defines.mk +## project-specific objects SRC := $(OBJ:%.o=%.c) +DEP := $(SRC:%.c=%.d) +OBJ_LIB := $(LIBS:%=lib-%.o) +SRC_LIB := $(LIBS:%=$(LIB_DIR)/%.c) +DEP_LIB := $(LIBS:%=lib-%.d) -.PHONY: clean program erase flash reset run +.PHONY: prepare clean clean-external distclean clean-lufa program erase flash reset run ELFFILE := $(NAME).elf HEXFILE := $(NAME).hex -all: $(HEXFILE) +all: prepare $(HEXFILE) + + +## external Libs +LDFLAGS += -L./ + +ifdef LUFA_PATH +CFLAGS += -I$(LUFA_PATH) +CFLAGS += -DF_USB=$(F_USB)UL +CFLAGS += -DBOARD=BOARD_$(LUFA_BOARD) -DARCH=ARCH_$(ARCH) +CFLAGS += $(LUFA_OPTS) +endif + +prepare: $(EXTERNAL_LIBS:%=build-%) +clean-external: $(EXTERNAL_LIBS:%=clean-%) + +export +build-lufa: liblufa.a + +liblufa.a: + @echo "building external LUFA lib ($(LUFA_PATH))" + make -f ../avr.lufa.mk liblufa.a + make -f ../avr.lufa.mk clean + +clean-lufa: + @echo "cleaning external LUFA lib ($(LUFA_PATH))" + make -f ../avr.lufa.mk clean + rm -f liblufa.a + + +## project-specific objects +lib-%.d: $(LIB_DIR)/%.c + @set -e; rm -f $@; \ + $(CC) -MM $(CFLAGS) $< > $@.$$$$; \ + sed 's,\($*\)\.o[ :]*,lib-\1.o $@ : ,g' < $@.$$$$ > $@; \ + rm -f $@.$$$$; echo '(re)building $@' %.d: %.c @set -e; rm -f $@; \ @@ -137,14 +78,18 @@ all: $(HEXFILE) rm -f $@.$$$$; echo '(re)building $@' ifneq ($(MAKECMDGOALS),distclean) --include $(SRC:%.c=%.d) +-include $(DEP) +-include $(DEP_LIB) endif +lib-%.o: $(LIB_DIR)/%.c + $(CC) $(CFLAGS) -c $< -o $@ + %.o: %.c - $(CC) $(CFLAGS) -c $< + $(CC) $(CFLAGS) -c $< -o $@ -$(ELFFILE): $(OBJ) - $(CC) $(OBJ) -o $@ $(LDFLAGS) +$(ELFFILE): $(OBJ) $(OBJ_LIB) $(EXTERNAL_LIBS:%=lib%.a) + $(CC) $(LDFLAGS) $(OBJ) $(OBJ_LIB) $(EXTERNAL_LIBS:%=-l%) -o $@ $(HEXFILE): $(ELFFILE) $(OBJCOPY) -O ihex -R .eeprom -R .fuse -R .lock -R .signature $< $@ @@ -156,6 +101,7 @@ clean: rm -f $(ELFFILE) rm -f $(HEXFILE) +distclean: clean-external clean ### DFU-Programmer define DFU/erase |