Makefile 7.66 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
# Select the board to build for: if not given on the command line,
# then default to PYBV10.
BOARD ?= PYBV10
ifeq ($(wildcard boards/$(BOARD)/.),)
$(error Invalid BOARD specified)
endif

# If the build directory is not given, make it reflect the board name.
BUILD ?= build-$(BOARD)

Dave Hylands's avatar
Dave Hylands committed
11
include ../py/mkenv.mk
12
-include mpconfigport.mk
13
include boards/$(BOARD)/mpconfigboard.mk
Dave Hylands's avatar
Dave Hylands committed
14
15

# qstr definitions (must come before including py.mk)
16
QSTR_DEFS = qstrdefsport.h $(BUILD)/pins_qstr.h
Dave Hylands's avatar
Dave Hylands committed
17
18
19
20
21

# include py core make definitions
include ../py/py.mk

CMSIS_DIR=cmsis
22
HAL_DIR=hal/$(MCU_SERIES)
23
24
USBDEV_DIR=usbdev
#USBHOST_DIR=usbhost
25
FATFS_DIR=lib/fatfs
Dave Hylands's avatar
Dave Hylands committed
26
DFU=../tools/dfu.py
27
# may need to prefix dfu-util with sudo
28
29
USE_PYDFU ?= 0
PYDFU = ../tools/pydfu.py
30
DFU_UTIL ?= dfu-util
31
DEVICE=0483:df11
Dave Hylands's avatar
Dave Hylands committed
32
33
34
35

CROSS_COMPILE = arm-none-eabi-

INC =  -I.
36
INC += -I..
37
INC += -I$(BUILD)
Dave Hylands's avatar
Dave Hylands committed
38
39
40
INC += -I$(CMSIS_DIR)/inc
INC += -I$(CMSIS_DIR)/devinc
INC += -I$(HAL_DIR)/inc
41
INC += -I$(USBDEV_DIR)/core/inc -I$(USBDEV_DIR)/class/inc
42
#INC += -I$(USBHOST_DIR)
43
INC += -I../lib/mp-readline
44
INC += -I../lib/netutils
45
INC += -I../lib/timeutils
Dave Hylands's avatar
Dave Hylands committed
46
47

CFLAGS_CORTEX_M4 = -mthumb -mtune=cortex-m4 -mabi=aapcs-linux -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -Wdouble-promotion
48
CFLAGS = $(INC) -Wall -Wpointer-arith -Werror -ansi -std=gnu99 -nostdlib $(CFLAGS_MOD) $(CFLAGS_CORTEX_M4) $(COPT)
Dave Hylands's avatar
Dave Hylands committed
49
CFLAGS += -Iboards/$(BOARD)
50
CFLAGS += -DSTM32_HAL_H='<stm32$(MCU_SERIES)xx_hal.h>'
Dave Hylands's avatar
Dave Hylands committed
51

52
LDFLAGS = -nostdlib -T $(LD_FILE) -Map=$(@:.elf=.map) --cref
53
54
55
LIBS =

# Debugging/Optimization
Dave Hylands's avatar
Dave Hylands committed
56
57
58
59
ifeq ($(DEBUG), 1)
CFLAGS += -g -DPENDSV_DEBUG
COPT = -O0
else
60
CFLAGS += -fdata-sections -ffunction-sections
Dave Hylands's avatar
Dave Hylands committed
61
COPT += -Os -DNDEBUG
62
LDFLAGS += --gc-sections
Dave Hylands's avatar
Dave Hylands committed
63
64
65
66
67
endif

# uncomment this if you want libgcc
#LIBS += $(shell $(CC) -print-libgcc-file-name)

68
SRC_LIB = $(addprefix lib/,\
69
	libc/string0.c \
70
	libm/math.c \
71
	libm/asinfacosf.c \
72
73
	libm/atanf.c \
	libm/atan2f.c \
74
	libm/fmodf.c \
75
	libm/roundf.c \
76
77
78
79
80
81
82
83
84
	libm/log1pf.c \
	libm/acoshf.c \
	libm/asinhf.c \
	libm/atanhf.c \
	libm/kf_rem_pio2.c \
	libm/kf_sin.c \
	libm/kf_cos.c \
	libm/kf_tan.c \
	libm/ef_rem_pio2.c \
85
	libm/erf_lgamma.c \
86
87
88
	libm/sf_sin.c \
	libm/sf_cos.c \
	libm/sf_tan.c \
89
90
	libm/sf_frexp.c \
	libm/sf_modf.c \
91
92
93
94
	libm/sf_ldexp.c \
	libm/sf_erf.c \
	libm/wf_lgamma.c \
	libm/wf_tgamma.c \
95
96
	fatfs/ff.c \
	fatfs/option/ccsbcs.c \
97
	mp-readline/readline.c \
98
	netutils/netutils.c \
99
	timeutils/timeutils.c \
100
101
	)

Dave Hylands's avatar
Dave Hylands committed
102
103
104
SRC_C = \
	main.c \
	system_stm32f4xx.c \
105
	stm32f4xx_it.c \
106
	usbd_conf.c \
107
	usbd_desc.c \
108
	usbd_cdc_interface.c \
109
	usbd_msc_storage.c \
110
	mphal.c \
Dave Hylands's avatar
Dave Hylands committed
111
	irq.c \
112
	pendsv.c \
113
	systick.c  \
114
	timer.c \
115
116
	led.c \
	pin.c \
117
	pin_defs_stmhal.c \
118
	pin_named_pins.c \
Damien George's avatar
Damien George committed
119
	bufhelper.c \
120
	dma.c \
Damien George's avatar
Damien George committed
121
122
123
	i2c.c \
	spi.c \
	uart.c \
124
	can.c \
125
	usb.c \
126
127
	printf.c \
	gccollect.c \
128
	pybstdio.c \
129
	pyexec.c \
Damien George's avatar
Damien George committed
130
	help.c \
131
	input.c \
132
133
	modpyb.c \
	modstm.c \
134
135
136
	moduos.c \
	modutime.c \
	moduselect.c \
137
138
	modusocket.c \
	modnetwork.c \
139
140
	import.c \
	lexerfatfs.c \
141
	extint.c \
142
	usrsw.c \
143
	rng.c \
Damien George's avatar
Damien George committed
144
	rtc.c \
145
146
	flash.c \
	storage.c \
147
	file.c \
Damien George's avatar
Damien George committed
148
	sdcard.c \
149
	fsusermount.c \
150
	diskio.c \
151
	ffconf.c \
152
	lcd.c \
153
	accel.c \
Damien George's avatar
Damien George committed
154
	servo.c \
Damien George's avatar
Damien George committed
155
	dac.c \
Dave Hylands's avatar
Dave Hylands committed
156
	adc.c \
Dave Hylands's avatar
Dave Hylands committed
157
158
159

SRC_S = \
	startup_stm32f40xx.s \
160
	gchelper.s \
Dave Hylands's avatar
Dave Hylands committed
161

162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
SRC_HAL = $(addprefix $(HAL_DIR)/src/stm32$(MCU_SERIES)xx_,\
	hal.c \
	hal_adc.c \
	hal_adc_ex.c \
	hal_can.c \
	hal_cortex.c \
	hal_dac.c \
	hal_dac_ex.c \
	hal_dma.c \
	hal_flash.c \
	hal_flash_ex.c \
	hal_gpio.c \
	hal_i2c.c \
	hal_pcd.c \
	hal_pcd_ex.c \
	hal_pwr.c \
	hal_pwr_ex.c \
	hal_rcc.c \
	hal_rcc_ex.c \
	hal_rng.c \
	hal_rtc.c \
	hal_rtc_ex.c \
	hal_sd.c \
	hal_spi.c \
	hal_tim.c \
	hal_tim_ex.c \
	hal_uart.c \
	ll_sdmmc.c \
	ll_usb.c \
Dave Hylands's avatar
Dave Hylands committed
191
192
	)

193
194
195
196
SRC_USBDEV = $(addprefix $(USBDEV_DIR)/,\
	core/src/usbd_core.c \
	core/src/usbd_ctlreq.c \
	core/src/usbd_ioreq.c \
197
198
199
200
	class/src/usbd_cdc_msc_hid.c \
	class/src/usbd_msc_bot.c \
	class/src/usbd_msc_scsi.c \
	class/src/usbd_msc_data.c \
Dave Hylands's avatar
Dave Hylands committed
201
202
	)

203
204
205
206
ifeq ($(MICROPY_PY_WIZNET5K),1)
WIZNET5K_DIR=drivers/wiznet5k
INC += -I$(TOP)/$(WIZNET5K_DIR)
CFLAGS_MOD += -DMICROPY_PY_WIZNET5K=1
207
SRC_MOD += modnwwiznet5k.c
208
209
210
211
212
213
214
215
SRC_MOD += $(addprefix $(WIZNET5K_DIR)/,\
	ethernet/w5200/w5200.c \
	ethernet/wizchip_conf.c \
	ethernet/socket.c \
	internet/dns/dns.c \
	)
endif

216
217
218
219
220
# for CC3000 module
ifeq ($(MICROPY_PY_CC3K),1)
CC3000_DIR=drivers/cc3000
INC += -I$(TOP)/$(CC3000_DIR)/inc
CFLAGS_MOD += -DMICROPY_PY_CC3K=1
221
SRC_MOD += modnwcc3k.c
222
223
224
225
226
227
228
229
230
231
232
233
SRC_MOD += $(addprefix $(CC3000_DIR)/src/,\
	cc3000_common.c \
	evnt_handler.c \
	hci.c \
	netapp.c \
	nvmem.c \
	security.c \
	socket.c \
	wlan.c \
	ccspi.c \
	inet_ntop.c \
	inet_pton.c \
234
235
	patch.c \
	patch_prog.c \
236
237
238
	)
endif

Dave Hylands's avatar
Dave Hylands committed
239
OBJ =
240
OBJ += $(PY_O)
241
OBJ += $(addprefix $(BUILD)/, $(SRC_LIB:.c=.o))
Dave Hylands's avatar
Dave Hylands committed
242
243
244
OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
OBJ += $(addprefix $(BUILD)/, $(SRC_HAL:.c=.o))
245
OBJ += $(addprefix $(BUILD)/, $(SRC_USBDEV:.c=.o))
246
OBJ += $(addprefix $(BUILD)/, $(SRC_MOD:.c=.o))
247
OBJ += $(BUILD)/pins_$(BOARD).o
Dave Hylands's avatar
Dave Hylands committed
248

249
250
251
252
# We put ff.o and stm32f4xx_hal_sd.o into the first 16K section with the ISRs.
# If we compile these using -O0 then it won't fit. So if you really want these
# to be compiled with -O0, then edit stm32f405.ld (in the .isr_vector section)
# and comment out the following 2 lines.
253
$(BUILD)/$(FATFS_DIR)/ff.o: COPT += -Os
254
$(BUILD)/$(HAL_DIR)/src/stm32$(MCU_SERIES)xx_hal_sd.o: COPT += -Os
255

Windel Bouwman's avatar
Windel Bouwman committed
256
all: $(BUILD)/firmware.dfu $(BUILD)/firmware.hex
Dave Hylands's avatar
Dave Hylands committed
257

258
.PHONY: deploy
259

260
deploy: $(BUILD)/firmware.dfu
261
	$(ECHO) "Writing $< to the board"
262
263
264
ifeq ($(USE_PYDFU),1)
	$(Q)$(PYTHON) $(PYDFU) -u $<
else
265
	$(Q)$(DFU_UTIL) -a 0 -d $(DEVICE) -D $<
266
endif
267

268
$(BUILD)/firmware.dfu: $(BUILD)/firmware.elf
Dave Hylands's avatar
Dave Hylands committed
269
	$(ECHO) "Create $@"
270
271
272
	$(Q)$(OBJCOPY) -O binary -j .isr_vector $^ $(BUILD)/firmware0.bin
	$(Q)$(OBJCOPY) -O binary -j .text -j .data $^ $(BUILD)/firmware1.bin
	$(Q)$(PYTHON) $(DFU) -b 0x08000000:$(BUILD)/firmware0.bin -b 0x08020000:$(BUILD)/firmware1.bin $@
Dave Hylands's avatar
Dave Hylands committed
273

Windel Bouwman's avatar
Windel Bouwman committed
274
275
276
277
$(BUILD)/firmware.hex: $(BUILD)/firmware.elf
	$(ECHO) "Create $@"
	$(Q)$(OBJCOPY) -O ihex $< $@

278
$(BUILD)/firmware.elf: $(OBJ)
Dave Hylands's avatar
Dave Hylands committed
279
280
281
282
283
284
	$(ECHO) "LINK $@"
	$(Q)$(LD) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
	$(Q)$(SIZE) $@

MAKE_PINS = boards/make-pins.py
BOARD_PINS = boards/$(BOARD)/pins.csv
285
PREFIX_FILE = boards/stm32f4xx_prefix.c
Dave Hylands's avatar
Dave Hylands committed
286
GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c
287
GEN_PINS_HDR = $(HEADER_BUILD)/pins.h
288
GEN_PINS_QSTR = $(BUILD)/pins_qstr.h
289
GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h
290
GEN_PINS_AF_PY = $(BUILD)/pins_af.py
Dave Hylands's avatar
Dave Hylands committed
291

292
293
294
INSERT_USB_IDS = ../tools/insert-usb-ids.py
FILE2H = ../tools/file2h.py

295
USB_IDS_FILE = usbd_desc.c
296
CDCINF_TEMPLATE = pybcdc.inf_template
297
298
GEN_CDCINF_FILE = $(HEADER_BUILD)/pybcdc.inf
GEN_CDCINF_HEADER = $(HEADER_BUILD)/pybcdc_inf.h
299

Dave Hylands's avatar
Dave Hylands committed
300
301
302
303
304
# Making OBJ use an order-only depenedency on the generated pins.h file
# has the side effect of making the pins.h file before we actually compile
# any of the objects. The normal dependency generation will deal with the
# case when pins.h is modified. But when it doesn't exist, we don't know
# which source files might need it.
305
$(OBJ): | $(HEADER_BUILD)/pins.h
306

307
308
$(BUILD)/main.o: $(GEN_CDCINF_HEADER)

Dave Hylands's avatar
Dave Hylands committed
309
310
# Use a pattern rule here so that make will only call make-pins.py once to make
# both pins_$(BOARD).c and pins.h
311
$(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(BUILD)/%_qstr.h: boards/$(BOARD)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD)
Dave Hylands's avatar
Dave Hylands committed
312
	$(ECHO) "Create $@"
313
	$(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --qstr $(GEN_PINS_QSTR) --af-const $(GEN_PINS_AF_CONST) --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC)
Dave Hylands's avatar
Dave Hylands committed
314
315
316
317

$(BUILD)/pins_$(BOARD).o: $(BUILD)/pins_$(BOARD).c
	$(call compile_c)

318
319
320
321
322
323
324
325
$(GEN_CDCINF_HEADER): $(GEN_CDCINF_FILE) $(FILE2H)
	$(ECHO) "Create $@"
	$(Q)$(PYTHON) $(FILE2H) $< > $@

$(GEN_CDCINF_FILE): $(CDCINF_TEMPLATE) $(INSERT_USB_IDS) $(USB_IDS_FILE)
	$(ECHO) "Create $@"
	$(Q)$(PYTHON) $(INSERT_USB_IDS) $(USB_IDS_FILE) $< > $@

Dave Hylands's avatar
Dave Hylands committed
326
include ../py/mkrules.mk