|
| 1 | +BUILD ?= build-mega-atmega2560 |
| 2 | +# MCU & nástroje |
| 3 | +MCU ?= atmega2560 |
| 4 | +CC = avr-gcc |
| 5 | +OBJCOPY = avr-objcopy |
| 6 | +OBJDUMP = avr-objdump |
| 7 | + |
| 8 | +LIB_PREFIX = ../../../libs |
| 9 | +Ilibs = -I$(LIB_PREFIX) |
| 10 | + |
| 11 | +CFLAGS = -Os -mmcu=$(MCU) -std=gnu99 -ffreestanding -fno-exceptions -fno-unwind-tables $(Ilibs) |
| 12 | +ASFLAGS = -mmcu=$(MCU) |
| 13 | +LDFLAGS = -Wl,-Ttext=0 |
| 14 | + |
| 15 | +SRC ?= $(notdir $(CURDIR)).c |
| 16 | +TARGET := $(notdir $(CURDIR)) |
| 17 | + |
| 18 | +# ========== Automatická detekce knihoven ========== |
| 19 | +# Vyhledá řádky jako: .* LIBS: serial file |
| 20 | + |
| 21 | +LIB_NAMES := $(shell grep -o '\<LIBS:.*' $(SRC) | sed 's/^.*\<LIBS: //' | tr ' ' '\n' | sort -u) |
| 22 | +LIB_OBJS := $(foreach lib,$(LIB_NAMES),$(LIB_PREFIX)/$(lib)/$(BUILD)/$(notdir $(lib)).o) |
| 23 | + |
| 24 | +OBJS = $(BUILD)/$(TARGET).o $(LIB_OBJS) |
| 25 | +# OBJS=\ |
| 26 | +$(LIB_PREFIX)/Serial/usart0/$(BUILD)/usart0.o \ |
| 27 | +$(BUILD)/$(TARGET).o |
| 28 | +# ========== Build pravidla ========== |
| 29 | + |
| 30 | +all: $(BUILD)/$(TARGET).hex $(TARGET).dis | $(BUILD)/ |
| 31 | + |
| 32 | +%/: |
| 33 | +mkdir -p $@ |
| 34 | + |
| 35 | +$(BUILD)/$(TARGET).elf: $(OBJS) | $(BUILD)/ |
| 36 | +$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) |
| 37 | +define LIB_RULE_template |
| 38 | +$(LIB_PREFIX)/$(1)/$(BUILD)/$(notdir $(1)).o: $(LIB_PREFIX)/$(1)/* |
| 39 | +$(MAKE) -C $(LIB_PREFIX)/$(1) MCU=$(MCU) BUILD=$(BUILD) $(BUILD)/$(notdir $(1)).o |
| 40 | +endef |
| 41 | + |
| 42 | +$(BUILD)/%.o: %.c | $(BUILD)/ |
| 43 | +$(CC) $(CFLAGS) -c $< -o $@ |
| 44 | + |
| 45 | +$(BUILD)/%.o: %.S | $(BUILD)/ |
| 46 | +$(CC) $(ASFLAGS) -c $< -o $@ |
| 47 | + |
| 48 | +$(foreach lib,$(LIB_NAMES),$(eval $(call LIB_RULE_template,$(lib)))) |
| 49 | + |
| 50 | +$(BUILD)/$(TARGET).hex: $(BUILD)/$(TARGET).elf |
| 51 | +$(OBJCOPY) -O ihex -R .eeprom $< $@ |
| 52 | + |
| 53 | +$(TARGET).dis: $(BUILD)/$(TARGET).elf Makefile |
| 54 | +$(OBJDUMP) --disassemble --source --line-numbers --demangle -z --section=.text --section=.data --section=.bss $< > $@ |
| 55 | + |
| 56 | +upload: $(BUILD)/$(TARGET).hex |
| 57 | +/usr/bin/avrdude -v -V -p atmega2560 -D -c wiring -b 115200 -P /dev/ttyACM0 -U flash:w:$<:i |
| 58 | + |
| 59 | +monitor: |
| 60 | +picocom -b 115200 --flow n --noreset --quiet /dev/ttyACM0 |
| 61 | + |
| 62 | +upload_monitor: upload monitor |
| 63 | + |
| 64 | +clean: |
| 65 | +rm -f *.o *.elf *.hex *.dis |
| 66 | +rm -rf $(BUILD) |
0 commit comments