-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathMakefile
135 lines (110 loc) · 3.13 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
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
132
133
134
135
TARGET:=smarts
# Define the toolchain
TOOLCHAIN_ROOT:=/usr/local/lib/gcc-arm-none-eabi-4_9-2015q3
TOOLCHAIN_PATH:=$(TOOLCHAIN_ROOT)/bin
TOOLCHAIN_PREFIX:=arm-none-eabi
CC=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-gcc
LD=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-gcc
OBJCOPY=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-objcopy
AS=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-as
AR=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-ar
GDB=$(TOOLCHAIN_PATH)/$(TOOLCHAIN_PREFIX)-gdb
# Optimization level, can be [0, 1, 2, 3, s].
OPTLVL:=0
DBG:=-g
STARTUP:=$(CURDIR)/hardware
LINKER_SCRIPT:=$(CURDIR)/Utilities/stm32_flash.ld
CDEFS=-DUSE_STDPERIPH_DRIVER -DSTM32F4XX -DHSE_VALUE=8000000 -D__FPU_PRESENT=1 -D__FPU_USED=1 -DARM_MATH_CM4
MCUFLAGS=-mcpu=cortex-m4 -mthumb -mfloat-abi=hard
COMMONFLAGS=-O$(OPTLVL) $(DBG) -Wall
CFLAGS=$(COMMONFLAGS) $(MCUFLAGS) $(INCLUDE) $(CDEFS) -std=gnu99
LDLIBS=$(TOOLCHAIN_ROOT)/arm-none-eabi/lib/armv7e-m/fpu/libc.a $(TOOLCHAIN_ROOT)/arm-none-eabi/lib/armv7e-m/fpu/libm.a
LDFLAGS=$(COMMONFLAGS) -fno-exceptions -ffunction-sections -fdata-sections -nostartfiles -Wl,--gc-sections,-T$(LINKER_SCRIPT)
BUILD_DIR = build
BIN_DIR = bin
# Include Files
INCLUDE= \
-Ihardware \
-Id1k/FreeRTOS/include \
-Id1k/FreeRTOS/portable/GCC/ARM_CM4F \
-Id1k/CMSIS/Device/ST/STM32F4xx/Include \
-Id1k/CMSIS/Include \
-Id1k/STM32F4xx_StdPeriph_Driver/inc \
-Iconfig \
-Id1k/src \
-Isrc
# vpath is used so object files are written to the current directory instead
# of the same directory as their source files
vpath %.c d1k/STM32F4xx_StdPeriph_Driver/src d1k/syscall hardware d1k/FreeRTOS \
d1k/FreeRTOS/portable/MemMang d1k/FreeRTOS/portable/GCC/ARM_CM4F \
d1k/src d1k/src/drivers d1k/src/func src
vpath %.s $(STARTUP)
ASRC=startup_stm32f4xx.s
# Project Source Files
SRC= \
stm32f4xx_it.c \
system_stm32f4xx.c \
main.c \
diagnostics.c \
pwm.c \
adc.c \
measurements.c \
debug_uart.c \
syscalls.c
# FreeRTOS Source Files
SRC+=port.c list.c queue.c tasks.c event_groups.c timers.c heap_4.c
# d1k Source Files
SRC+= \
led.c \
can.c \
i2c.c \
nvmem.c \
mb85rcxxx.c \
math_limits.c
# Standard Peripheral Source Files
SRC+= \
misc.c \
stm32f4xx_adc.c \
stm32f4xx_can.c \
stm32f4xx_dac.c \
stm32f4xx_dma.c \
stm32f4xx_exti.c \
stm32f4xx_flash.c \
stm32f4xx_gpio.c \
stm32f4xx_i2c.c \
stm32f4xx_rcc.c \
stm32f4xx_rng.c \
stm32f4xx_spi.c \
stm32f4xx_syscfg.c \
stm32f4xx_tim.c \
stm32f4xx_usart.c
OBJ = $(SRC:%.c=$(BUILD_DIR)/%.o)
$(BUILD_DIR)/%.o: %.c
@mkdir -p $(BUILD_DIR)
@mkdir -p $(BIN_DIR)
@echo [CC] $(notdir $<)
@$(CC) $(CFLAGS) $< -c -o $@
all: $(OBJ)
@echo [AS] $(ASRC)
@$(AS) -o $(ASRC:%.s=$(BUILD_DIR)/%.o) $(STARTUP)/$(ASRC)
@echo [LD] $(TARGET).elf
@$(CC) -o $(BIN_DIR)/$(TARGET).elf $(LDFLAGS) $(OBJ) $(ASRC:%.s=$(BUILD_DIR)/%.o) $(LDLIBS)
@echo [OBJCOPY] $(TARGET).hex
@$(OBJCOPY) -O ihex $(BIN_DIR)/$(TARGET).elf $(BIN_DIR)/$(TARGET).hex
@echo [OBJCOPY] $(TARGET).bin
@$(OBJCOPY) -O binary $(BIN_DIR)/$(TARGET).elf $(BIN_DIR)/$(TARGET).bin
.PHONY: clean
clean:
@echo [RM] OBJ
@rm -f $(OBJ)
@echo [RM] BUILD
@rm -rf $(BUILD_DIR)
@echo [RM] BIN
@rm -rf $(BIN_DIR)
jlink:
JLinkExe flash.jlink
jtag:
openocd -f $(TARGET).cfg
cb: clean all
cbf: clean all jlink
bf: all jlink