-
Notifications
You must be signed in to change notification settings - Fork 10
/
Makefile
128 lines (112 loc) · 4.55 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
##
## This file is part of the libopenstm32 project.
##
## Copyright (C) 2009 Uwe Hermann <[email protected]>
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
##
OUT_DIR = obj
PREFIX ?= arm-none-eabi
CONTROL ?= SINE
CONTROLLC := $(shell echo $(CONTROL) | tr A-Z a-z)
BINARY = stm32_$(CONTROLLC)
SIZE = $(PREFIX)-size
CC = $(PREFIX)-gcc
CPP = $(PREFIX)-g++
LD = $(PREFIX)-gcc
OBJCOPY = $(PREFIX)-objcopy
OBJDUMP = $(PREFIX)-objdump
MKDIR_P = mkdir -p
TERMINAL_DEBUG ?= 0
CFLAGS = -Os -Wall -Wextra -Iinclude/ -Iplatform/stm32f1/include -Ilibopeninv/include -Iplatform/stm32f1/libopeninv_stm32f1/include -Ilibopencm3/include \
-fno-common -fno-builtin -pedantic -DSTM32F1 -DT_DEBUG=$(TERMINAL_DEBUG) \
-DCONTROL=CTRL_$(CONTROL) -DCTRL_SINE=0 -DCTRL_FOC=1 \
-mcpu=cortex-m3 -mthumb -std=gnu99 -ffunction-sections -fdata-sections -ggdb3
CPPFLAGS = -Os -Wall -Wextra -Iinclude/ -Iplatform/stm32f1/include -Ilibopeninv/include -Iplatform/stm32f1/libopeninv_stm32f1/include -Ilibopencm3/include \
-fno-common -std=c++11 -pedantic -DSTM32F1 -DT_DEBUG=$(TERMINAL_DEBUG) \
-DCONTROL=CTRL_$(CONTROL) -DCTRL_SINE=0 -DCTRL_FOC=1 \
-ffunction-sections -fdata-sections -fno-builtin -fno-rtti -fno-exceptions -fno-unwind-tables -mcpu=cortex-m3 -mthumb -ggdb3
LDSCRIPT = stm32_sine.ld
LDFLAGS = -Llibopencm3/lib -T$(LDSCRIPT) -march=armv7 -nostartfiles -Wl,--gc-sections,-Map,linker.map
OBJSL = stm32_sine.o hwinit.o stm32scheduler.o params.o terminal.o terminal_prj.o \
my_string.o digio.o sine_core.o my_fp.o fu.o inc_encoder.o printf.o anain.o \
temp_meas.o param_save.o throttle.o errormessage.o stm32_can.o \
picontroller.o terminalcommands.o vehiclecontrol.o stm32pwmdriver.o
ifeq ($(CONTROL), FOC)
OBJSL += foc.o
endif
OBJS = $(patsubst %.o,obj/%.o, $(OBJSL))
vpath %.c src/ libopeninv/src platform/stm32f1/libopeninv_stm32f1/src platform/stm32f1/inverter
vpath %.cpp src/ libopeninv/src platform/stm32f1/libopeninv_stm32f1/src platform/stm32f1/inverter
OPENOCD_BASE = /usr
OPENOCD = $(OPENOCD_BASE)/bin/openocd
OPENOCD_SCRIPTS = $(OPENOCD_BASE)/share/openocd/scripts
OPENOCD_FLASHER = $(OPENOCD_SCRIPTS)/interface/parport.cfg
OPENOCD_BOARD = $(OPENOCD_SCRIPTS)/board/olimex_stm32_h103.cfg
# Be silent per default, but 'make V=1' will show all compiler calls.
ifneq ($(V),1)
Q := @
NULL := 2>/dev/null
endif
all: directories images
Debug:images
Release: images
cleanDebug:clean
images: $(BINARY)
@printf " OBJCOPY $(BINARY).bin\n"
$(Q)$(OBJCOPY) -Obinary $(BINARY) $(BINARY).bin
@printf " OBJCOPY $(BINARY).hex\n"
$(Q)$(OBJCOPY) -Oihex $(BINARY) $(BINARY).hex
$(Q)$(SIZE) $(BINARY)
directories: ${OUT_DIR}
${OUT_DIR}:
$(Q)${MKDIR_P} ${OUT_DIR}
$(BINARY): $(OBJS) $(LDSCRIPT)
@printf " LD $(subst $(shell pwd)/,,$(@))\n"
$(Q)$(LD) $(LDFLAGS) -o $(BINARY) $(OBJS) -lopencm3_stm32f1
$(OUT_DIR)/%.o: %.c Makefile
@printf " CC $(subst $(shell pwd)/,,$(@))\n"
$(Q)$(CC) $(CFLAGS) -o $@ -c $<
$(OUT_DIR)/%.o: %.cpp Makefile
@printf " CPP $(subst $(shell pwd)/,,$(@))\n"
$(Q)$(CPP) $(CPPFLAGS) -o $@ -c $<
clean:
@printf " CLEAN ${OUT_DIR}\n"
$(Q)rm -rf ${OUT_DIR}
@printf " CLEAN $(BINARY)\n"
$(Q)rm -f $(BINARY)
@printf " CLEAN $(BINARY).bin\n"
$(Q)rm -f $(BINARY).bin
@printf " CLEAN $(BINARY).hex\n"
$(Q)rm -f $(BINARY).hex
@printf " CLEAN $(BINARY).srec\n"
$(Q)rm -f $(BINARY).srec
@printf " CLEAN $(BINARY).list\n"
$(Q)rm -f $(BINARY).list
flash: images
@printf " FLASH $(BINARY).bin\n"
@# IMPORTANT: Don't use "resume", only "reset" will work correctly!
$(Q)$(OPENOCD) -s $(OPENOCD_SCRIPTS) \
-f $(OPENOCD_FLASHER) \
-f $(OPENOCD_BOARD) \
-c "init" -c "reset halt" \
-c "flash write_image erase $(BINARY).hex" \
-c "reset" \
-c "shutdown" $(NULL)
.PHONY: directories images clean
get-deps:
@printf " GIT SUBMODULE\n"
$(Q)git submodule update --init
@printf " MAKE libopencm3\n"
$(Q)${MAKE} -C libopencm3