-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
98 lines (72 loc) · 2.74 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
# Główny plik Makefile projektu
# Przedrostek nazwy kompilatora, identyfikujący platformę:
CROSS_COMPILE = arm-none-eabi-
# Końcowa nazwa pliku wyjściowego:
EXEC_FILE = test
# Narzędzia budowania:
CC = $(CROSS_COMPILE)gcc
CP = $(CROSS_COMPILE)objcopy
AS = $(CROSS_COMPILE)gcc -x assembler-with-cpp
ELF2BIN = $(CP) -O binary -S
# Identyfikator procesora:
UC = cortex-m0
# Adres flash na urządzeniu:
FLASH_START = 0x8000000
# Plik definiujący stałe platformy, umożliwiający start.
# Dostarczony przez ST.
STARTUP_FILE = ./vendor/startup_stm32f0xx.s
# Plik definiujący proces łączenia plików w końcowy program,
# z zachowaniem poprawnego adresowania. Dostarczony przez ST.
LINKER_FILE = ./vendor/stm32f0_linker.ld
# Lokalizacja plików dostarczonych przez STM:
STM_ROOTDIR = ../STM32F0-Discovery_FW_V1.0.0
DEBUG = -g -gdwarf-2 # ustawienia załączenia symboli debuggera
MCFLAGS = -mcpu=$(UC) -mthumb # parametr ustawiający konkretny procesor
# Ustawienia procesu asemblacji:
ASFLAGS = $(MCFLAGS) $(DEBUG) -mthumb -Wa,-amhls=$(<:.s=.lst)
# Ustawienia procesu kompilacji:
CFLAGS = $(MCFLAGS) $(DEBUG) -fomit-frame-pointer -Wall -Wstrict-prototypes -fverbose-asm -Wa,-ahlms=$(<:.c=.lst) -DRUN_FROM_FLASH=1
# Ustawienia procesu łączenia:
LDFLAGS = $(MCFLAGS) $(DEBUG) -nostartfiles -T$(LINKER_FILE) -Wl,-Map=$(EXEC_FILE).map,--cref,--no-warn-mismatch
# Pliki źródłowe do kompilacji:
SRC = ./src/main.c \
./vendor/system_stm32f0xx.c \
./src/pt6961.c \
./src/interrupts.c \
./src/mini-printf.c \
./src/gpiopin.c
# Ścieżki dołączanych plików nagłówkowych:
INCLUDE_DIRS = ./include \
$(STM_ROOTDIR)/Libraries/CMSIS/Include \
$(STM_ROOTDIR)/Libraries/CMSIS/ST/STM32F0xx/Include \
$(STM_ROOTDIR)/Project/Demonstration \
$(STM_ROOTDIR)/Libraries/STM32F0xx_StdPeriph_Driver/inc
# Tworzenie parametrów dla kompilatora na podstawie listy katalogów:
INCLUDES = $(patsubst %,-I%, $(INCLUDE_DIRS))
# Pliki objektów (nazwy tworzone dynamicznie z listy źródeł):
OBJECTS = $(SRC:.c=.o) $(STARTUP_FILE:.s=.o)
# Cele makefile - część wykonywalna:
# Cel domyślny, wykonywany przy wywołaniu bez parametrów.
# Tworzy końcowy plik binarny, bez zapisu do pamięci flash.
all: $(EXEC_FILE).elf $(EXEC_FILE).bin
$(CROSS_COMPILE)size $(EXEC_FILE).elf
%.o: %.c
$(CC) -c $(CFLAGS) $(INCLUDES) $< -o $@
%.o: %.s
$(AS) -c $(ASFLAGS) $< -o $@
%.elf: $(OBJECTS)
$(CC) $(OBJECTS) $(LDFLAGS) -o $@
%.bin: %.elf
$(ELF2BIN) $< $@
# Usunięcie efektów budowania - przywrócenie czystego drzewa projektu.
clean:
-rm -rf $(OBJECTS)
-rm -rf $(EXEC_FILE).elf
-rm -rf $(EXEC_FILE).map
-rm -rf $(EXEC_FILE).bin
-rm -rf $(SRC:.c=.lst)
-rm -rf $(STARTUP_FILE:.s=.lst)
flash: $(EXEC_FILE).bin
st-info --flash
st-flash write $(EXEC_FILE).bin $(FLASH_START)
.PHONY: clean all