Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
131 lines (106 loc) · 4.98 KB
/
Copy pathMakefile
File metadata and controls
131 lines (106 loc) · 4.98 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
125
126
127
128
129
130
131
PROJECT_NAME := core
PROJECT_VERSION := f33
# Build info
BUILD_DIR := build
STM32_BUILD_DIR := $(BUILD_DIR)/stm32
# Cross-compilation tooling
STM32_PREFIX := arm-none-eabi
STM32_CC := $(STM32_PREFIX)-gcc
STM32_ASM := $(STM32_PREFIX)-gcc
STM32_LD := $(STM32_PREFIX)-gcc
STM32_GDB := $(STM32_PREFIX)-gdb
STM32_OBJCOPY := $(STM32_PREFIX)-objcopy
STM32_OBJDUMP := $(STM32_PREFIX)-objdump
# Cross-compilation options
STM32_COMMON_FLAGS := -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -D USE_HAL_DRIVER -D STM32G473xx
STM32_CC_FLAGS := $(STM32_COMMON_FLAGS) -ffreestanding -ffunction-sections -fdata-sections -Wall -Wextra -Werror=implicit-function-declaration -g
STM32_ASM_FLAGS := $(STM32_CC_FLAGS)
STM32_LD_SCRIPT := STM32G473RETx_FLASH.ld
STM32_LD_FLAGS := $(STM32_COMMON_FLAGS) -static -Wl,--gc-sections -T $(STM32_LD_SCRIPT) -specs=nano.specs -specs=nosys.specs
# Sources
ifdef TARGET
APP_DIR := Examples/$(TARGET)
else
APP_DIR := src/app
endif
APP_SRCS := $(shell find $(APP_DIR) -type f -name "*.c")
APP_INCLUDE := -I $(APP_DIR)
STM32_APP_OBJS := $(APP_SRCS:$(APP_DIR)/%=$(STM32_BUILD_DIR)/obj/app/%.o)
DRIVER_DIR := src/driver
DRIVER_SRCS := $(shell find $(DRIVER_DIR)/Src -type f -name "*.c")
DRIVER_INCLUDE := -I $(DRIVER_DIR)/Inc
STM32_DRIVER_OBJS := $(DRIVER_SRCS:$(DRIVER_DIR)/%=$(STM32_BUILD_DIR)/obj/driver/%.o)
# Libraries
STM32CUBE_DIR := ../STM32CubeG4
STM32CUBE_HAL_DIR := $(STM32CUBE_DIR)/Drivers/STM32G4xx_HAL_Driver
STM32CUBE_CMSIS_DIR := $(STM32CUBE_DIR)/Drivers/CMSIS/Device/ST/STM32G4xx
STM32CUBE_SRC_DIRS := $(STM32CUBE_HAL_DIR)/Src
STM32CUBE_SRCS := $(shell find $(STM32CUBE_SRC_DIRS) -maxdepth 1 -type f -name "*.c") $(STM32CUBE_CMSIS_DIR)/Source/Templates/system_stm32g4xx.c
#STM32CUBE_ASMS := $(STM32CUBE_CMSIS_DIR)/Source/Templates/gcc/startup_stm32g473xx.s
STM32CUBE_ASMS := src/startup_stm32g473xx.s
STM32CUBE_INCLUDES := $(STM32CUBE_HAL_DIR)/Inc $(STM32CUBE_DIR)/Drivers/CMSIS/Include $(STM32CUBE_CMSIS_DIR)/Include
STM32CUBE_INCLUDES := $(foreach d, $(STM32CUBE_INCLUDES),-I $d)
#STM32CUBE_OBJS := $(STM32CUBE_SRCS:$(STM32CUBE_DIR)/%=$(STM32_BUILD_DIR)/obj/stm32cube/%.o) $(STM32CUBE_ASMS:$(STM32CUBE_DIR)/%=$(STM32_BUILD_DIR)/obj/stm32cube/%.o)
STM32CUBE_OBJS := $(STM32CUBE_SRCS:$(STM32CUBE_DIR)/%=$(STM32_BUILD_DIR)/obj/stm32cube/%.o) $(STM32_BUILD_DIR)/obj/stm32cube/startup_stm32g473xx.s.o
FREERTOS_DIR := ../FreeRTOS-Kernel
FREERTOS_SRC_DIRS := $(FREERTOS_DIR) $(FREERTOS_DIR)/portable/GCC/ARM_CM4F
FREERTOS_SRCS := $(shell find $(FREERTOS_SRC_DIRS) -maxdepth 1 -type f -name "*.c") $(FREERTOS_DIR)/portable/MemMang/heap_4.c
FREERTOS_INCLUDES := $(FREERTOS_DIR)/include $(FREERTOS_DIR)/portable/GCC/ARM_CM4F
FREERTOS_INCLUDES := $(foreach d, $(FREERTOS_INCLUDES),-I $d)
FREERTOS_OBJS := $(FREERTOS_SRCS:$(FREERTOS_DIR)/%=$(STM32_BUILD_DIR)/obj/freertos/%.o)
RTT_DIR := ../RTT
RTT_SRCS := $(RTT_DIR)/RTT/SEGGER_RTT.c $(RTT_DIR)/Syscalls/SEGGER_RTT_Syscalls_GCC.c $(RTT_DIR)/RTT/SEGGER_RTT_printf.c
RTT_INCLUDES := $(addprefix -I, ./src) $(addprefix -I, $(RTT_DIR)/RTT)
RTT_OBJS := $(RTT_SRCS:$(RTT_DIR)/%=$(STM32_BUILD_DIR)/obj/rtt/%.o)
OUTNAME := $(STM32_BUILD_DIR)/$(PROJECT_NAME)-$(PROJECT_VERSION)
# Compilation targets
.PHONY: all
all: core
.PHONY: core
core: $(OUTNAME).elf $(OUTNAME).bin $(OUTNAME).ihex
# Main executable
$(OUTNAME).bin: $(OUTNAME).elf
@[ -d $(@D) ] || mkdir -p $(@D)
$(STM32_OBJCOPY) -O binary $< $@
$(OUTNAME).ihex: $(OUTNAME).elf
@[ -d $(@D) ] || mkdir -p $(@D)
$(STM32_OBJCOPY) -O ihex $< $@
$(OUTNAME).elf: $(STM32_APP_OBJS) $(STM32_DRIVER_OBJS) $(STM32CUBE_OBJS) $(FREERTOS_OBJS) $(RTT_OBJS)
@[ -d $(@D) ] || mkdir -p $(@D)
$(STM32_LD) $(STM32_LD_FLAGS) $^ -o $@
# application objects
$(STM32_BUILD_DIR)/obj/app/%.c.o: $(APP_DIR)/%.c
@[ -d $(@D) ] || mkdir -p $(@D)
$(STM32_CC) $(STM32_CC_FLAGS) -I src $(APP_INCLUDE) $(DRIVER_INCLUDE) $(FREERTOS_INCLUDES) $(STM32CUBE_INCLUDES) $(RTT_INCLUDES) -c $< -o $@
# driver objects
$(STM32_BUILD_DIR)/obj/driver/%.c.o: $(DRIVER_DIR)/%.c
@[ -d $(@D) ] || mkdir -p $(@D)
$(STM32_CC) $(STM32_CC_FLAGS) -I src $(DRIVER_INCLUDE) $(FREERTOS_INCLUDES) $(STM32CUBE_INCLUDES) $(RTT_INCLUDES) -c $< -o $@
# stm32cube objects
$(STM32_BUILD_DIR)/obj/stm32cube/%.c.o: $(STM32CUBE_DIR)/%.c
@[ -d $(@D) ] || mkdir -p $(@D)
$(STM32_CC) $(STM32_CC_FLAGS) -I src $(STM32CUBE_INCLUDES) -c $< -o $@
$(STM32_BUILD_DIR)/obj/stm32cube/startup_stm32g473xx.s.o: src/startup_stm32g473xx.s
@[ -d $(@D) ] || mkdir -p $(@D)
$(STM32_CC) $(STM32_ASM_FLAGS) -c $< -o $@
# freertos objects
$(STM32_BUILD_DIR)/obj/freertos/%.c.o: $(FREERTOS_DIR)/%.c
@[ -d $(@D) ] || mkdir -p $(@D)
$(STM32_CC) $(STM32_CC_FLAGS) -I src $(FREERTOS_INCLUDES) -c $< -o $@
# RTT objects
$(STM32_BUILD_DIR)/obj/rtt/%.c.o: $(RTT_DIR)/%.c
@[ -d $(@D) ] || mkdir -p $(@D)
$(STM32_CC) $(STM32_CC_FLAGS) -I src $(RTT_INCLUDES) -c $< -o $@
# Misc targets
.PHONY: clean
clean:
rm -r $(BUILD_DIR)
.PHONY: clean-user
clean-user:
rm -r $(BUILD_DIR)/stm32/obj/app
rm -r $(BUILD_DIR)/stm32/obj/driver
.PHONY: check-target
check-target:
ifndef TARGET
$(error Specify target as TARGET=[module/name])
endif