parent
7320781c43
commit
78f0398ef1
@ -0,0 +1,137 @@ |
||||
## === CPU settings === |
||||
# CPU type |
||||
MCU = atmega328p |
||||
# CPU frequency |
||||
F_CPU = 16000000 |
||||
# Fuses |
||||
LFUSE = 0xFF |
||||
HFUSE = 0xDE |
||||
EFUSE = 0x05 |
||||
|
||||
|
||||
## === Source files === |
||||
# Main C file |
||||
MAIN = main.c |
||||
# Extra C files in this folder |
||||
LOCAL_SOURCE = |
||||
|
||||
# Library directory (with C files) |
||||
EXTRA_SOURCE_DIR = lib/ |
||||
# C files in the library directory |
||||
EXTRA_SOURCE_FILES = uart.c |
||||
|
||||
|
||||
## === Programmer === |
||||
PROGRAMMER_TYPE = arduino |
||||
PROGRAMMER_ARGS = -b 57600 -P /dev/ttyUSB0 |
||||
|
||||
|
||||
## === C flags === |
||||
|
||||
CFLAGS = -std=gnu99 -mmcu=$(MCU) -DF_CPU=$(F_CPU)UL -I. -I$(EXTRA_SOURCE_DIR) |
||||
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums |
||||
CFLAGS += -Wall -Wno-main -Wno-strict-prototypes -Wno-comment |
||||
CFLAGS += -g2 -Wextra -Wfatal-errors -Wno-unused-but-set-variable |
||||
CFLAGS += -ffunction-sections -fdata-sections -Wl,--gc-sections -Wl,--relax |
||||
# CFLAGS += -lm ## Math |
||||
# CFLAGS += -Wl,-u,vfprintf -lprintf_flt -lm ## for floating-point printf |
||||
# CFLAGS += -Wl,-u,vfprintf -lprintf_min ## for smaller printf |
||||
CFLAGS_BUILD = $(CFLAGS) -Os |
||||
|
||||
|
||||
# --------------------------------------------------------------------------- |
||||
|
||||
## Defined programs / locations |
||||
CC = avr-gcc |
||||
OBJCOPY = avr-objcopy |
||||
OBJDUMP = avr-objdump |
||||
AVRSIZE = avr-size |
||||
AVRDUDE = avrdude |
||||
|
||||
## === File lists === |
||||
TARGET = $(strip $(basename $(MAIN))) |
||||
SRC1 = $(TARGET).c |
||||
SRC = $(SRC1) |
||||
EXTRA_SOURCE = $(addprefix $(EXTRA_SOURCE_DIR), $(EXTRA_SOURCE_FILES)) |
||||
SRC += $(EXTRA_SOURCE) |
||||
SRC += $(LOCAL_SOURCE) |
||||
|
||||
HEADERS = $(SRC:.c=.h) |
||||
OBJ = $(SRC:.c=.o) |
||||
|
||||
|
||||
## === File generation === |
||||
all: $(TARGET).hex size |
||||
pre: $(TARGET).pre |
||||
|
||||
%.hex: %.elf |
||||
$(OBJCOPY) -R .eeprom -O ihex $< $@ |
||||
|
||||
%.elf: $(SRC) |
||||
$(CC) $(CFLAGS_BUILD) $(SRC) --output $@ |
||||
|
||||
%.pre: $(SRC1) |
||||
$(CC) $(CFLAGS) -E $(SRC1) --output $@ |
||||
|
||||
%.eeprom: %.elf |
||||
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@ |
||||
|
||||
%.lst: %.elf |
||||
$(OBJDUMP) -S $< > $@ |
||||
|
||||
# Show debug info |
||||
debug: |
||||
@echo |
||||
@echo "Source files:" $(SRC) |
||||
@echo "MCU, F_CPU, BAUD:" $(MCU), $(F_CPU), $(BAUD) |
||||
@echo |
||||
|
||||
|
||||
# Disassemble the ELF |
||||
disassemble: $(TARGET).lst |
||||
dis: disassemble |
||||
lst: disassemble |
||||
|
||||
# Make eeprom file |
||||
eeprom: $(TARGET).eeprom |
||||
|
||||
# Show how big the resulting program is |
||||
size: $(TARGET).elf |
||||
$(AVRSIZE) -C --mcu=$(MCU) $(TARGET).elf |
||||
|
||||
# Clean all produced trash |
||||
clean: |
||||
rm -f $(TARGET).elf $(TARGET).hex $(TARGET).obj \ |
||||
$(TARGET).o $(TARGET).d $(TARGET).eep $(TARGET).lst \ |
||||
$(TARGET).lss $(TARGET).sym $(TARGET).map $(TARGET)~ \ |
||||
$(TARGET).eeprom |
||||
|
||||
# Clean all trash |
||||
purge: |
||||
rm -f *.elf *.hex *.obj *.o *.d *.eep *.lst *.lss *.sym *.map *~ |
||||
|
||||
|
||||
## === avrdude === |
||||
|
||||
flash: $(TARGET).hex |
||||
$(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) $(PROGRAMMER_ARGS) -U flash:w:$< |
||||
|
||||
flashe: $(TARGET).eeprom |
||||
$(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) $(PROGRAMMER_ARGS) -U eeprom:w:$< |
||||
|
||||
shell: |
||||
$(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) $(PROGRAMMER_ARGS) -nt |
||||
|
||||
|
||||
# === fuses === |
||||
|
||||
FUSE_STRING = -U lfuse:w:$(LFUSE):m -U hfuse:w:$(HFUSE):m -U efuse:w:$(EFUSE):m |
||||
|
||||
fuses: |
||||
$(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) \ |
||||
$(PROGRAMMER_ARGS) $(FUSE_STRING) |
||||
show_fuses: |
||||
$(AVRDUDE) -c $(PROGRAMMER_TYPE) -p $(MCU) $(PROGRAMMER_ARGS) -nv |
||||
|
||||
set_default_fuses: FUSE_STRING = -U lfuse:w:$(LFUSE):m -U hfuse:w:$(HFUSE):m -U efuse:w:$(EFUSE):m |
||||
set_default_fuses: fuses |
Loading…
Reference in new issue