-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
120 lines (109 loc) · 2.5 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# -----------------------------------------------------------------------------------
#
# @descr Makefile for compiling, linking and flashing code into atmega's
#
# @author Marian Hrinko
# @datum 29.07.2020
# @notes Suffix Replacement within a macro: $(name:string1=string2)
# For each word in 'name' replace 'string1' with 'string2'
# For example $(DEPENDENCIES:.c=.o)
# @inspir https://www.cs.swarthmore.edu/~newhall/unixhelp/howto_makefiles.html
# https://wiki.hacdc.org/index.php/AVR_Makefile
#
# -----------------------------------------------------------------------------------
#
# Final file
TARGET = main
#
# Library directory
LIBDIR = lib
#
# Type of microcontroller
DEVICE = atmega328p
#
# Frequency
FCPU = 8000000
#
# Optimization
OPTIMIZE = Os
#
# Type of compiler
CC = avr-gcc
#
# Compiler flags
CFLAGS = -g -Wall -DF_CPU=$(FCPU) -mmcu=$(DEVICE) -$(OPTIMIZE)
#
# Includes
INCLUDES = -I.
#
# Libraries
LIBS = -L$(LIBDIR)
#
# Object copy
OBJCOPY = avr-objcopy
#
# Objcopy, create hex file flags
# -R .eeprom -O ihex or -j .data -j .text -O ihex
OBJFLAGS = -j .data -j .text -O ihex
#
# Size of file
AVRSIZE = avr-size
#
# Size flags
SFLAGS = --mcu=$(DEVICE) --format=avr
#
# Target and dependencies .c
SOURCES := $(wildcard *.c $(LIBDIR)/*.c)
#
# Target and dependencies .o
OBJECTS = $(SOURCES:.c=.o)
# AVRDUDE CONFIGURATION, SETTINGS
# -------------------------------------------------------------------
#
# AVRDUDE
AVRDUDE = avrdude
# AVRDUDE DEVICE
AVRDUDE_MMCU = m328p
#
# AVRDUDE PORT
AVRDUDE_PORT = /dev/ttyUSB0
#
# AVRDUDE PROGRAMMER
AVRDUDE_PROG = usbasp
#
# AVRDUDE BAUD RATE
AVRDUDE_BAUD = 115200
#
# AVRDUDE BAUD RATE
AVROBJ_FORMAT = ihex
#
# AVRDUDE FLAGS
AVRDUDE_FLAGS = -p $(AVRDUDE_MMCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROG) -b $(AVRDUDE_BAUD) -u -U
#
# Create file to programmer
main: $(TARGET).hex
#
# Create hex file
$(TARGET).hex: $(TARGET).elf
$(OBJCOPY) $(OBJFLAGS) $(TARGET).elf $(TARGET).hex
$(AVRSIZE) $(TARGET).elf
#
# Create .elf file
$(TARGET).elf:$(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o $(TARGET).elf
#
# Create object files
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
#
# Program avr - send file to programmer
flash:
$(AVRDUDE) $(AVRDUDE_FLAGS) flash:w:$(TARGET).hex:i
#
# Clean
clean:
rm -f $(OBJECTS) $(TARGET).elf $(TARGET).map
#
# Cleanall
cleanall:
rm -f $(OBJECTS) $(TARGET).hex $(TARGET).elf $(TARGET).map