Makefile 7.6 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
50
CFLAGS += -Iboards/$(BOARD)

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

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

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

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

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

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

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
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
190
191
	)

192
193
194
195
SRC_USBDEV = $(addprefix $(USBDEV_DIR)/,\
	core/src/usbd_core.c \
	core/src/usbd_ctlreq.c \
	core/src/usbd_ioreq.c \
196
197
198
199
	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
200
201
	)

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

215
216
217
218
219
# for CC3000 module
ifeq ($(MICROPY_PY_CC3K),1)
CC3000_DIR=drivers/cc3000
INC += -I$(TOP)/$(CC3000_DIR)/inc
CFLAGS_MOD += -DMICROPY_PY_CC3K=1
220
SRC_MOD += modnwcc3k.c
221
222
223
224
225
226
227
228
229
230
231
232
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 \
233
234
	patch.c \
	patch_prog.c \
235
236
237
	)
endif

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

248
249
250
251
# 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.
252
$(BUILD)/$(FATFS_DIR)/ff.o: COPT += -Os
253
$(BUILD)/$(HAL_DIR)/src/stm32$(MCU_SERIES)xx_hal_sd.o: COPT += -Os
254

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

257
.PHONY: deploy
258

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

267
$(BUILD)/firmware.dfu: $(BUILD)/firmware.elf
Dave Hylands's avatar
Dave Hylands committed
268
	$(ECHO) "Create $@"
269
270
271
	$(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
272

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

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

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

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

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

Dave Hylands's avatar
Dave Hylands committed
299
300
301
302
303
# 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.
304
$(OBJ): | $(HEADER_BUILD)/pins.h
305

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

Dave Hylands's avatar
Dave Hylands committed
308
309
# Use a pattern rule here so that make will only call make-pins.py once to make
# both pins_$(BOARD).c and pins.h
310
$(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
311
	$(ECHO) "Create $@"
312
	$(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
313
314
315
316

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

317
318
319
320
321
322
323
324
$(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
325
include ../py/mkrules.mk