-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
98 lines (76 loc) · 1.81 KB
/
Copy pathMakefile
File metadata and controls
98 lines (76 loc) · 1.81 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
#
# Variable Assignments.
#
PROJECT = project_name
# MCU specification:
# MCU = STM32F051R8T6
CORTEX_M = 0
ARCH_FLAGS = -mthumb -mcpu=cortex-m$(CORTEX_M)
MCU_DEFINES = -DSTM32F0 -DSTM32F051
FLASH_START = 0x08000000
# Tools:
CC = arm-none-eabi-gcc
LD = arm-none-eabi-gcc
GDB = arm-none-eabi-gdb
OBJC = arm-none-eabi-objcopy
OBJD = arm-none-eabi-objdump
SIZE = arm-none-eabi-size
STW = st-flash write
STE = st-flash erase
STU = st-util
RM = rm
# Sources:
SOURCE_S = $(wildcard boot/*.S)
SOURCE_LIB = $(wildcard libs/Sources/*.c)
SOURCE_BOOT = $(wildcard boot/*.c)
SOURCE_C = $(wildcard *.c)
SOURCE_C += $(SOURCE_BOOT)
SOURCE_C += $(SOURCE_LIB)
OBJS = $(SOURCE_C:.c=.o) $(SOURCE_S:.s=.o)
LDFILE = $(wildcard boot/*.ld)
# Includes:
IBOOT = -Iboot
ILIBS = -Ilibs/Includes
INCLUDES += $(IBOOT)
INCLUDES += $(ILIBS)
DEFINES = -D__STARTUP_CLEAR_BSS -D__START=main
DEFINES += -DSYSCLK48 -D__NO_SYSTEM_INIT
# Option flags:
MCUFLAGS = $(ARCH_FLAGS) $(MCU_DEFINES)
LDFLAGS = -T$(LDFILE) $(MCUFLAGS)
DBGFLAGS = -g -O0 -ggdb -gdwarf-2
CFLAGS += $(DBGFLAGS) $(MCUFLAGS) $(INCLUDES) $(DEFINES)
CFLAGS += -Wall -Wextra -pedantic
CFLAGS += -nostartfiles -nodefaultlibs -nostdlib
#
# Rules.
#
.PHONY: all, clean, asm, flash, erase, gdbs, gdbr
all: $(PROJECT).bin
$(SIZE) $(PROJECT).elf
clean:
$(RM) -f *.bin *.elf *.asm *.o boot/*.o libs/Sources/*.o
asm: $(PROJECT).asm
flash:
$(STW) $(PROJECT).bin $(FLASH_START)
erase:
st-flash erase
gdbs:
$(STU)
gdbr: $(PROJECT).elf
$(GDB) -ex 'target extended-remote :4242' \
-ex 'load' $(PROJECT).elf
# Source Rules
# Object file assembling
%.o: %.s
$(CC) $(CFLAGS) -c -o $@ $<
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
# ELF and Binary
$(PROJECT).elf: $(OBJS)
$(LD) $(LDFLAGS) $^ $(CFLAGS) -o $@ -lgcc
%.bin: %.elf
$(OBJC) -O binary $< $@
# Disassemling
%.asm: %.elf
$(OBJD) -dwh $< > $@