-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
124 lines (96 loc) · 3.18 KB
/
Copy pathMakefile
File metadata and controls
124 lines (96 loc) · 3.18 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
119
120
121
122
123
124
###############################
######### Toolchain #########
###############################
TOOLCHAIN := arm-none-eabi-
CC := $(TOOLCHAIN)gcc
OBJCOPY := $(TOOLCHAIN)objcopy
SIZE := $(TOOLCHAIN)size
###############################
########## TARGET ###########
###############################
MCU := cortex-m3
PROJECT_NAME := FlightController
LIBNAME := opencm3_stm32f1
###############################
######## Directories ########
###############################
ROOT_DIR := .
SRC_DIR := $(ROOT_DIR)/src
CONFIG_DIR := $(ROOT_DIR)/config
LIB_DIR := $(ROOT_DIR)/lib
BUILD_DIR := $(ROOT_DIR)/build
OPENCM3_DIR := $(LIB_DIR)/libopencm3
FREERTOS_DIR := $(LIB_DIR)/freertos
LINK_SCRIPT := $(CONFIG_DIR)/stm32f1_linker.ld
###############################
####### Make configs ########
###############################
GENERATE_LST ?= 0
DEBUG ?= 0
###############################
####### Source files ########
###############################
SRC := $(shell find $(SRC_DIR) -name "*.c")
###############################
####### Include paths #######
###############################
INCLUDE_DIRS := $(SRC_DIR)
include $(CONFIG_DIR)/makefile_freertos.mk
###############################
########### Flags ###########
###############################
FP_FLAGS ?= -msoft-float
ARCH_FLAGS = -mthumb -mcpu=cortex-m3 $(FP_FLAGS) -mfix-cortex-m3-ldrd
INC_FLAGS := $(addprefix -I, $(INCLUDE_DIRS))
DEBUG_FLAGS := -g -gdwarf-2
COMMON_FLAGS += -ffunction-sections -fdata-sections
COMMON_FLAGS += -Wall
ifeq ($(DEBUG),1)
COMMON_FLAGS += $(DEBUG_FLAGS)
endif
CFLAGS := $(COMMON_FLAGS) -Os -g -MMD -MP
CFLAGS += $(ARCH_FLAGS)
CFLAGS += -I$(OPENCM3_DIR)/include
ifeq ($(GENERATE_LST),1)
$(BUILD_DIR)/%.o: CFLAGS += -Wa,-ahlms=$(@:.o=.lst)
endif
LDFLAGS := $(COMMON_FLAGS)
LDFLAGS += $(ARCH_FLAGS)
LDFLAGS += -T$(LINK_SCRIPT)
LDFLAGS += -L$(OPENCM3_DIR)/lib
LDFLAGS += -Wl,--gc-sections
LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(PROJECT_NAME).map,--cref,--no-warn-mismatch
LDFLAGS += --static -nostartfiles
LDFLAGS += -lm
DEFINES := -DRUN_FROM_FLASH=1
DEFINES += -DSTM32F1
###############################
####### Object files ########
###############################
OBJ_FILES := $(patsubst $(ROOT_DIR)/%.c,$(BUILD_DIR)/%.o,$(SRC))
DEPS := $(OBJ_FILES:.o=.d)
###############################
########### Rules ###########
###############################
all: $(BUILD_DIR)/$(PROJECT_NAME).elf
$(SIZE) $<
$(OPENCM3_DIR)/lib/lib$(LIBNAME).a:
$(MAKE) -C $(OPENCM3_DIR)
$(BUILD_DIR)/$(PROJECT_NAME).elf: $(OBJ_FILES) $(OPENCM3_DIR)/lib/lib$(LIBNAME).a
@mkdir -p $(BUILD_DIR)
$(CC) $^ $(LDFLAGS) -o $@
$(BUILD_DIR)/%.o: $(ROOT_DIR)/%.c
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) $(INC_FLAGS) $(DEFINES) -c $< -o $@
hex: $(BUILD_DIR)/$(PROJECT_NAME).elf
$(OBJCOPY) -O ihex $< $(BUILD_DIR)/$(PROJECT_NAME).hex
bin: $(BUILD_DIR)/$(PROJECT_NAME).elf
$(OBJCOPY) -O binary $< $(BUILD_DIR)/$(PROJECT_NAME).bin
flash: bin
st-flash --connect-under-reset write $(BUILD_DIR)/$(PROJECT_NAME).bin 0x08000000
erase:
st-flash erase
clean:
rm -rf $(BUILD_DIR)
-include $(DEPS)
.PHONY: all clean flash erase hex bin