irena-avr/Makefile
2025-10-17 10:35:02 +02:00

102 lines
2.1 KiB
Makefile

CPU_StepperControl = atmega16m1
CPU_ECRIS_REMOTE=atxmega128a1
CPU_lcd=atmega16
CPU_sologse=atmega644
CPU_chaos=atmega32m1
CPU_leia=atmega32m1
pMCU-atmega16m1 = m16
pMCU-atmega32m1 = m32m1
pMCU-atmega16 = m16
pMCU-atmega644 = m644
MCU = $(CPU_$*)
CC=avr-gcc -Wall -Wno-parentheses -MMD -std=c99 -O2 -mmcu=$(MCU) \
-funsigned-char \
-funsigned-bitfields \
-fpack-struct \
-fshort-enums
CFLAGS = $($*_CFLAGS) $(DEBUG)
%.s: %.c revision.h
$(CC) -S $(CFLAGS) -fverbose-asm $<
%.o: %.c revision.h
$(CC) -g -c $(CFLAGS) $<
revision.h: .git
git log --pretty='#define Revision 0x%h' --abbrev=8 HEAD^! > revision.h+
git log --pretty='#define Id "0x%h %as %an"' --abbrev=8 HEAD^! >> revision.h+
diff -q revision.h+ revision.h || \mv -v revision.h+ revision.h
-include *.d
LDFLAGS =
%.elf: %.o
$(CC) $(CFLAGS) -Wl,-Map=$*.map,--cref $^ --output $@ $(LDFLAGS)
OBJCOPY = avr-objcopy
%.hex: %.elf
$(OBJCOPY) -O ihex -R .eeprom $< $@
%.eeprom: %.elf
$(OBJCOPY) -O ihex -j .eeprom --change-section-lma .eeprom=0 $< $@
AVRDUDE = avrdude
AVRDUDE_PROGRAMMER = avrispmkii
AVRDUDE_PORT = usb
AVRDUDE_WRITE_FLASH = -U flash:w:$<
AD = $(AVRDUDE) -p $(pMCU-$(MCU)) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
%.burn: %.hex
$(AD) -U flash:v:$< || $(AD) -U flash:w:$<
lfuse_lcd=0xff
# CKDIV8 : no
# CKOUT: yes, on PB1, pin 41
# SUT: max
# CLKSEL: external clock
lfuse_sologse=0xA0
lfuse_chaos=0xef
chaos_CFLAGS = -I.
chaos.o: ads8688.h ltc1655.h spi_slave.h tick.h hvosc.h hvled.h
chaos.s: ads8688.h ltc1655.h spi_slave.h tick.h hvosc.h hvled.h
chaos.hex: chaos.eeprom
lfuse_leia=0xef
leia_CFLAGS = -I.
leia.o: spi_slave.h
leia.s: spi_slave.h
leia.hex: leia.eeprom
%.lfuse:
$(AD) -B 5 -U lfuse:w:$(lfuse_$*):m
%.id:
$(AD) -B 5 -U lfuse:v:$(lfuse_$*):m
clean:
rm -f *.hex *.o *.s *.map *.elf *.d
VPATH = .:LCD/lcd_slave_sync:sologse:chaos:leia
lcd_CFLAGS = -I. -DDEBUG
lcd.o: lcd.c spi_slave.h lcd_routines.h lcd_routines.c uart_atmega16.c
.PHONY: eeprom.eeprom
%.eeprom.eeprom: %.hex
$(AD) -U eeprom:r:$@
%.eeprom.burn: %.eeprom
$(AD) -U eeprom:v:$< || $(AD) -U eeprom:w:$<
%.ad:
$(AD) -v -t