]> www.fi.muni.cz Git - openparking.git/blobdiff - Makefile
Firmware - initial revision.
[openparking.git] / Makefile
index df8eded6237449251e357b2c342eb33c36c02630..23528a0821dd8cd349a3ebd319e2e9e77b12cb23 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,3 +1,25 @@
+
+PROGRAM=firmware
+SRC=firmware.c rs485.c
+OBJ=$(SRC:.c=.o)
+
+
+MCU=atmega328p
+# AVRDUDE_MCU=$(MCU)
+AVRDUDE_MCU=atmega328p
+AVRDUDE_PROGRAMMER=arduino
+
+CFLAGS=-Wall -Os -mmcu=$(MCU) -DUSE_LOGGING=1 -DF_CPU=16000000UL -std=gnu99
+LDFLAGS=
+AVRDUDE_FLAGS= -p$(AVRDUDE_MCU) -c $(AVRDUDE_PROGRAMMER) -P /dev/ttyUSB0 -b 57600
+
+FORMAT=ihex
+
+CC=avr-gcc
+OBJCOPY=avr-objcopy
+OBJDUMP=avr-objdump
+AVRDUDE=avrdude
+
 WEB_DIR=/home/kas/html/board/
 WEB_FILES=pcb-back.png pcb-front.png schematics.png handlebar.png
 GERBER_FILES=\
@@ -7,15 +29,17 @@ GERBER_FILES=\
        board.bottommask.gbr \
        board.topsilk.gbr \
        board.bottomsilk.gbr \
+       board.outline.gbr \
        board.plated-drill.cnc
 
-all:
-       @echo "Usage: make [clean|web|gerber|fab|board.pcb]"
+all: $(PROGRAM).hex $(PROGRAM).eep
 
 clean:
        rm -f board.cmd board.jpg board.net board.new.pcb board.pcb- \
                board.png board.ps board.sch~ pcb-back.png pcb-front.png \
-               schematics.png *.gbr *.cnc
+               schematics.png *.gbr *.cnc \
+               $(PROGRAM).hex $(PROGRAM).eep $(PROGRAM).elf *.o *.s \
+               eeprom.raw version.c
 
 web: $(WEB_FILES)
        test -d $(WEB_DIR) && install -m 644 $(WEB_FILES) $(WEB_DIR)
@@ -53,9 +77,56 @@ fab: $(GERBER_FILES)
                cp board.bottommask.gbr $$D/board.gbs && \
                cp board.topsilk.gbr $$D/board.gto && \
                cp board.bottomsilk.gbr $$D/board.gbo && \
+               cp board.outline.gbr $$D/board.gko && \
                cp board.plated-drill.cnc $$D/board.txt && \
                zip -r $$D.zip $$D && \
                echo "Done. Output in $$D.zip."; \
                echo "You may also want to do git tag gerber-fab-$$D" '
 
 .PHONY: gerber
+
+program: $(PROGRAM).hex $(PROGRAM).eep
+       $(AVRDUDE) $(AVRDUDE_FLAGS) -U flash:w:$(PROGRAM).hex:i -U eeprom:w:$(PROGRAM).eep:i
+
+program_flash: $(PROGRAM).hex
+       $(AVRDUDE) $(AVRDUDE_FLAGS) -U flash:w:$(PROGRAM).hex:i
+
+program_eeprom: $(PROGRAM).eep
+       $(AVRDUDE) $(AVRDUDE_FLAGS) eeprom:w:$(PROGRAM).eep:i
+
+dump_eeprom:
+       $(AVRDUDE) $(AVRDUDE_FLAGS) -U eeprom:r:eeprom.raw:r
+       od -tx1 eeprom.raw
+
+objdump: $(PROGRAM).elf
+       $(OBJDUMP) --disassemble $<
+
+.PRECIOUS : $(OBJ) $(PROGRAM).elf
+
+%.hex: %.elf
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+       $(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+               --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+%.elf: $(OBJ)
+       $(CC) $(CFLAGS) $(OBJ) -o $@ $(LDFLAGS)
+
+%.o: %.c lights.h Makefile
+       $(CC) -c $(CFLAGS) $< -o $@
+
+%.s: %.c lights.h Makefile
+       $(CC) -S -c $(CFLAGS) $< -o $@
+
+%.o: %.S
+       $(CC) -c $(CFLAGS) $< -o $@
+
+clean:
+
+version.c:
+       ./version.pl > version.c
+
+.PHONY: all clean dump_eeprom program program_flash program_eeprom objdump \
+       version.c
+