-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathMakefile.STM32F4_EDA
130 lines (106 loc) · 3.96 KB
/
Makefile.STM32F4_EDA
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
119
120
121
122
123
124
125
126
127
128
129
130
# STM32 library paths
F4_LIB_PATH=./STM32F4XX_Platform
# MCU external clock frequency (Hz)
OSC=8000000
# Directory Structure
BINDIR=.
OBJDIR_EDA=obj_eda
# Output files
BINELF_EDA=dvm-firmware_eda.elf
BINBIN_EDA=dvm-firmware_eda.bin
# Header directories
INC_F4=. $(F4_LIB_PATH)/CMSIS/Include/ $(F4_LIB_PATH)/Device/ $(F4_LIB_PATH)/STM32F4xx_StdPeriph_Driver/include/
INCLUDES_F4=$(INC_F4:%=-I%)
# CMSIS libraries
INCLUDES_LIBS_F4=$(F4_LIB_PATH)/CMSIS/Lib/GCC/libarm_cortexM4lf_math.a
# STM32F4 Standard Peripheral Libraries source path
STD_LIB_F4=$(F4_LIB_PATH)/STM32F4xx_StdPeriph_Driver/source
# STM32F4 system source path
SYS_DIR_F4=$(F4_LIB_PATH)/Device
STARTUP_DIR_F4=$(F4_LIB_PATH)/Device/startup
# GNU ARM Embedded Toolchain
CC=arm-none-eabi-gcc
CXX=arm-none-eabi-g++
LD=arm-none-eabi-ld
AR=arm-none-eabi-ar
AS=arm-none-eabi-as
CP=arm-none-eabi-objcopy
OD=arm-none-eabi-objdump
NM=arm-none-eabi-nm
SIZE=arm-none-eabi-size
A2L=arm-none-eabi-addr2line
# Build object lists
CXXSRC=$(wildcard ./*.cpp) $(wildcard ./dmr/*.cpp) $(wildcard ./p25/*.cpp) $(wildcard ./nxdn/*.cpp)
CSRC_STD_F4=$(wildcard $(STD_LIB_F4)/*.c)
SYS_F4=$(wildcard $(SYS_DIR_F4)/*.c)
STARTUP_F4=$(wildcard $(STARTUP_DIR_F4)/*.c)
OBJ_F4=$(CXXSRC:./%.cpp=$(OBJDIR_EDA)/%.o) $(CSRC_STD_F4:$(STD_LIB_F4)/%.c=$(OBJDIR_EDA)/%.o) $(SYS_F4:$(SYS_DIR_F4)/%.c=$(OBJDIR_EDA)/%.o) $(STARTUP_F4:$(STARTUP_DIR_F4)/%.c=$(OBJDIR_EDA)/%.o)
# MCU flags
MCFLAGS_F4=-mcpu=cortex-m4 -mthumb -mlittle-endian -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb-interwork
# Compile flags
# WA0EDA F405 MTR2K, MASTR3 board:
DEFS_EDA_405=-DUSE_STDPERIPH_DRIVER -DSTM32F4XX -DSTM32F40_41xxx -DSTM32F4_EDA_405 -DHSE_VALUE=$(OSC) -DMADEBYMAKEFILE
# WA0EDA F446 MTR2K, MASTR3 board:
DEFS_EDA_446=-DUSE_STDPERIPH_DRIVER -DSTM32F4XX -DSTM32F446xx -DSTM32F4_EDA_446 -DHSE_VALUE=$(OSC) -DMADEBYMAKEFILE
# Build compiler flags
CFLAGS_F4=-c $(MCFLAGS_F4) $(INCLUDES_F4)
CXXFLAGS_F4=-c $(MCFLAGS_F4) $(INCLUDES_F4)
# Linker flags
LDFLAGS_F4 =-T stm32f4xx_link.ld $(MCFLAGS_F4) --specs=nosys.specs $(INCLUDES_LIBS_F4)
LDFLAGS_F4_D =-T stm32f4xx_link_debug.ld $(MCFLAGS_F4) --specs=nosys.specs $(INCLUDES_LIBS_F4)
# Common flags
CFLAGS=-Os -g -ffunction-sections -fdata-sections -fno-builtin -Wno-implicit -DCUSTOM_NEW -DNO_EXCEPTIONS
CXXFLAGS=-Os -g -fno-exceptions -ffunction-sections -fdata-sections -fno-builtin -fno-rtti -Wall -DCUSTOM_NEW -DNO_EXCEPTIONS
LDFLAGS=-Os -g --specs=nano.specs
# Build Rules
.PHONY: all eda405 eda405-debug eda446 eda446-debug clean
all: eda405
eda405: CFLAGS+=$(CFLAGS_F4) $(DEFS_EDA_405)
eda405: CXXFLAGS+=$(CXXFLAGS_F4) $(DEFS_EDA_405)
eda405: LDFLAGS+=$(LDFLAGS_F4)
eda405: $(BINDIR)
eda405: $(OBJDIR_EDA)
eda405: $(BINDIR)/$(BINBIN_EDA)
eda405-debug: CFLAGS+=$(CFLAGS_F4) $(DEFS_EDA_405)
eda405-debug: CXXFLAGS+=$(CXXFLAGS_F4) $(DEFS_EDA_405)
eda405-debug: LDFLAGS+=$(LDFLAGS_F4_D)
eda405-debug: $(BINDIR)
eda405-debug: $(OBJDIR_EDA)
eda405-debug: $(BINDIR)/$(BINBIN_EDA)
eda446: CFLAGS+=$(CFLAGS_F4) $(DEFS_EDA_446)
eda446: CXXFLAGS+=$(CXXFLAGS_F4) $(DEFS_EDA_446)
eda446: LDFLAGS+=$(LDFLAGS_F4)
eda446: $(BINDIR)
eda446: $(OBJDIR_EDA)
eda446: $(BINDIR)/$(BINBIN_EDA)
eda446-debug: CFLAGS+=$(CFLAGS_F4) $(DEFS_EDA_446)
eda446-debug: CXXFLAGS+=$(CXXFLAGS_F4) $(DEFS_EDA_446)
eda446-debug: LDFLAGS+=$(LDFLAGS_F4_D)
eda446-debug: $(BINDIR)
eda446-debug: $(OBJDIR_EDA)
eda446-debug: $(BINDIR)/$(BINBIN_EDA)
$(BINDIR):
mkdir $@
$(OBJDIR_EDA):
mkdir $@
mkdir $@/dmr
mkdir $@/p25
mkdir $@/nxdn
$(BINDIR)/$(BINBIN_EDA): $(BINDIR)/$(BINELF_EDA)
$(CP) -O binary $< $@
$(BINDIR)/$(BINELF_EDA): $(OBJ_F4)
$(CXX) $(OBJ_F4) $(LDFLAGS) -o $@
$(SIZE) $(BINDIR)/$(BINELF_EDA)
$(OBJDIR_EDA)/%.o: ./%.cpp
$(CXX) $(CXXFLAGS) $< -o $@
$(OBJDIR_EDA)/%.o: $(STD_LIB_F4)/%.c
$(CC) $(CFLAGS) $< -o $@
$(OBJDIR_EDA)/%.o: $(SYS_DIR_F4)/%.c
$(CC) $(CFLAGS) $< -o $@
$(OBJDIR_EDA)/%.o: $(STARTUP_DIR_F4)/%.c
$(CC) $(CFLAGS) $< -o $@
clean-objs:
test ! -d $(OBJDIR_EDA) || rm -rf $(OBJDIR_EDA)
clean:
test ! -d $(OBJDIR_EDA) || rm -rf $(OBJDIR_EDA)
rm -f $(BINDIR)/*.bin $(BINDIR)/*.elf