-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
118 lines (86 loc) · 2.89 KB
/
Makefile
File metadata and controls
118 lines (86 loc) · 2.89 KB
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
NAME = c++
PROGRAM = ${NAME}
ASMDIR = asm
OBJDIR = obj
SRCDIR = src
SRCEXT = cpp
CSRCEXT = c
ASMEXT = S
OBJEXT = o
LIBEXT = a
BINEXT = elf
HEXEXT = hex
SRC += ${wildcard ${SRCDIR}/*.${SRCEXT}}
SRC += ${wildcard ${SRCDIR}/**/*.${SRCEXT}}
SRC += ${wildcard ${SRCDIR}/**/**/*.${SRCEXT}}
SRC += ${wildcard ${SRCDIR}/**/**/**/*.${SRCEXT}}
CSRC += ${wildcard ${SRCDIR}/*.${CSRCEXT}}
CSRC += ${wildcard ${SRCDIR}/**/*.${CSRCEXT}}
CSRC += ${wildcard ${SRCDIR}/**/**/*.${CSRCEXT}}
CSRC += ${wildcard ${SRCDIR}/**/**/**/*.${CSRCEXT}}
ASM += ${wildcard ${SRCDIR}/*.${ASMEXT}}
ASM += ${wildcard ${SRCDIR}/**/*.${ASMEXT}}
ASM += ${wildcard ${SRCDIR}/**/**/*.${ASMEXT}}
ASM += ${wildcard ${SRCDIR}/**/**/**/*.${ASMEXT}}
OBJ += ${SRC:${SRCDIR}/%.${SRCEXT}=${OBJDIR}/%.${OBJEXT}}
OBJ += ${CSRC:${SRCDIR}/%.${CSRCEXT}=${OBJDIR}/%.${OBJEXT}}
OBJ += ${ASM:${SRCDIR}/%.${ASMEXT}=${OBJDIR}/%.${OBJEXT}}
WARNINGS += all pedantic extra shadow no-overflow no-volatile
STANDARD = c++20
OPTIMISATION = 2
DEFINES += __AVR_ATmega644P__ F_CPU=12000000 #ENABLE_INTERRUPTS
LIBRARIES += #atmega644p c c++
WHOLE_LIBRARIES +=
INCLUDEPATH += ${PRJDIR}/avr-libc++/hdr/ /usr/lib/avr/include/ ${PRJDIR}/libusb++/hdr/
INC = ${INCLUDEPATH:%=-I%}
LIBDIR += . /usr/local/avr/lib/avr5/ ${PRJDIR}/avr-libc++/ ${PRJDIR}/libusb++/
LIB = ${LIBDIR:%=-L%} ${LIBRARIES:%=-l%} -Wl,--whole-archive ${WHOLE_LIBRARIES:%=-l%} -Wl,--no-whole-archive
CXX_COMPILE_FLAGS = -c -std=${STANDARD} ${WARNINGS:%=-W%} -O${OPTIMISATION} ${INC} ${DEFINES:%=-D%} -ggdb
C_COMPILE_FLAGS = -c ${WARNINGS:%=-W%} -O${OPTIMISATION} ${INC} ${DEFINES:%=-D%} -ggdb
ASSEMBLE_FLAGS = -c -mmcu=atmega644p ${INC} ${DEFINES:%=-D%}
ARCHIVE_FLAGS = rcs
LINK_FLAGS = ${LIB} -Xlinker --defsym=__DATA_REGION_ORIGIN__=0x800100
COMPILE = avr-gcc-10.1.0
ASSEMBLE = avr-as
ARCHIVE = avr-ar
LINK = ${COMPILE}
MKDIR = mkdir -p
all: ${PROGRAM}
debug:
@echo "SRC:"
@echo ${SRC}
@echo "OBJ:"
@echo ${OBJ}
obj: ${OBJ}
${OBJDIR}/%.${OBJEXT}: ${SRCDIR}/%.${SRCEXT}
${MKDIR} ${@D}
${COMPILE} ${CXX_COMPILE_FLAGS} -o $@ $<
${OBJDIR}/%.${OBJEXT}: ${SRCDIR}/%.${CSRCEXT}
${MKDIR} ${@D}
${COMPILE} ${C_COMPILE_FLAGS} -o $@ $<
${OBJDIR}/%.${OBJEXT}: ${SRCDIR}/%.${ASMEXT}
${MKDIR} ${@D}
${COMPILE} ${ASSEMBLE_FLAGS} -o $@ $<
#make assembly files
asm: ${ASM}
${ASMDIR}/%.${ASMEXT}: ${SRCDIR}/%.${SRCEXT}
${MKDIR} ${@D}
${COMPILE} -S ${COMPILE_FLAGS} -o $@ $<
#make executeable file
${PROGRAM}.${BINEXT}: ${OBJ}
${LINK} -o $@ $< /usr/lib/avr/lib/avr5/crtatmega644p.o ${LINK_FLAGS}
lib${PROGRAM}.${LIBEXT} : ${OBJ}
${ARCHIVE} ${ARCHIVE_FLAGS} $@ $^
${PROGRAM}.${HEXEXT} : ${PROGRAM}.${BINEXT}
avr-objcopy -O ihex $< $@
${PROGRAM}: ${PROGRAM}.${BINEXT}
lib: lib${PROGRAM}.${LIBEXT}
hex: ${PROGRAM}.${HEXEXT}
upload: ${PROGRAM}.${HEXEXT}
avrdude -c usbasp -p m644p -U flash:w:$<
clean:
rm -rf ${ASMDIR}/* ${OBJ} ${PROGRAM}*
size: ${PROGRAM}.${BINEXT}
avr-size $<
nm: ${PROGRAM}.${BINEXT}
avr-nm -C -S --size-sort -t d $<