Makefile 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  1. # Select the board to build for: if not given on the command line,
  2. # then default to PYBV10.
  3. BOARD ?= PYBV10
  4. ifeq ($(wildcard boards/$(BOARD)/.),)
  5. $(error Invalid BOARD specified)
  6. endif
  7. # If the build directory is not given, make it reflect the board name.
  8. BUILD ?= build-$(BOARD)
  9. include ../../py/mkenv.mk
  10. -include mpconfigport.mk
  11. include boards/$(BOARD)/mpconfigboard.mk
  12. # qstr definitions (must come before including py.mk)
  13. QSTR_DEFS = qstrdefsport.h $(BUILD)/pins_qstr.h $(BUILD)/modstm_qstr.h
  14. QSTR_GLOBAL_DEPENDENCIES = mpconfigboard_common.h boards/$(BOARD)/mpconfigboard.h
  15. # directory containing scripts to be frozen as bytecode
  16. FROZEN_MPY_DIR ?= modules
  17. # include py core make definitions
  18. include $(TOP)/py/py.mk
  19. LD_DIR=boards
  20. CMSIS_DIR=$(TOP)/lib/stm32lib/CMSIS/STM32$(MCU_SERIES_UPPER)xx/Include
  21. MCU_SERIES_UPPER = $(shell echo $(MCU_SERIES) | tr '[:lower:]' '[:upper:]')
  22. HAL_DIR=lib/stm32lib/STM32$(MCU_SERIES_UPPER)xx_HAL_Driver
  23. USBDEV_DIR=usbdev
  24. #USBHOST_DIR=usbhost
  25. FATFS_DIR=lib/oofatfs
  26. DFU=$(TOP)/tools/dfu.py
  27. # may need to prefix dfu-util with sudo
  28. USE_PYDFU ?= 1
  29. PYDFU ?= $(TOP)/tools/pydfu.py
  30. DFU_UTIL ?= dfu-util
  31. DEVICE=0483:df11
  32. STFLASH ?= st-flash
  33. OPENOCD ?= openocd
  34. OPENOCD_CONFIG ?= boards/openocd_stm32f4.cfg
  35. STARTUP_FILE ?= boards/startup_stm32$(MCU_SERIES).o
  36. CROSS_COMPILE = arm-none-eabi-
  37. INC += -I.
  38. INC += -I$(TOP)
  39. INC += -I$(BUILD)
  40. INC += -I$(TOP)/lib/cmsis/inc
  41. INC += -I$(CMSIS_DIR)/
  42. INC += -I$(TOP)/$(HAL_DIR)/Inc
  43. INC += -I$(USBDEV_DIR)/core/inc -I$(USBDEV_DIR)/class/inc
  44. #INC += -I$(USBHOST_DIR)
  45. # Basic Cortex-M flags
  46. CFLAGS_CORTEX_M = -mthumb
  47. # Select hardware floating-point support
  48. ifeq ($(CMSIS_MCU),$(filter $(CMSIS_MCU),STM32F767xx STM32F769xx STM32H743xx))
  49. CFLAGS_CORTEX_M += -mfpu=fpv5-d16 -mfloat-abi=hard
  50. else
  51. ifeq ($(MCU_SERIES),f0)
  52. CFLAGS_CORTEX_M += -msoft-float
  53. else
  54. CFLAGS_CORTEX_M += -mfpu=fpv4-sp-d16 -mfloat-abi=hard
  55. endif
  56. endif
  57. # Options for particular MCU series
  58. CFLAGS_MCU_f0 = $(CFLAGS_CORTEX_M) -mtune=cortex-m0 -mcpu=cortex-m0
  59. CFLAGS_MCU_f4 = $(CFLAGS_CORTEX_M) -mtune=cortex-m4 -mcpu=cortex-m4
  60. CFLAGS_MCU_f7 = $(CFLAGS_CORTEX_M) -mtune=cortex-m7 -mcpu=cortex-m7
  61. CFLAGS_MCU_l4 = $(CFLAGS_CORTEX_M) -mtune=cortex-m4 -mcpu=cortex-m4
  62. CFLAGS_MCU_h7 = $(CFLAGS_CORTEX_M) -mtune=cortex-m7 -mcpu=cortex-m7
  63. CFLAGS = $(INC) -Wall -Wpointer-arith -Werror -std=gnu99 -nostdlib $(CFLAGS_MOD) $(CFLAGS_EXTRA)
  64. CFLAGS += -D$(CMSIS_MCU)
  65. CFLAGS += $(CFLAGS_MCU_$(MCU_SERIES))
  66. CFLAGS += $(COPT)
  67. CFLAGS += -Iboards/$(BOARD)
  68. CFLAGS += -DSTM32_HAL_H='<stm32$(MCU_SERIES)xx_hal.h>'
  69. CFLAGS += -DMICROPY_HW_VTOR=$(TEXT0_ADDR)
  70. ifeq ($(MICROPY_FLOAT_IMPL),double)
  71. CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_DOUBLE
  72. else
  73. CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_FLOAT
  74. CFLAGS += -fsingle-precision-constant -Wdouble-promotion
  75. endif
  76. LDFLAGS = -nostdlib -L $(LD_DIR) $(addprefix -T,$(LD_FILES)) -Map=$(@:.elf=.map) --cref
  77. LIBS = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
  78. # Remove uncalled code from the final image.
  79. CFLAGS += -fdata-sections -ffunction-sections
  80. LDFLAGS += --gc-sections
  81. # Debugging/Optimization
  82. ifeq ($(DEBUG), 1)
  83. CFLAGS += -g -DPENDSV_DEBUG
  84. COPT = -O0
  85. else
  86. COPT += -Os -DNDEBUG
  87. endif
  88. SRC_LIB = $(addprefix lib/,\
  89. libc/string0.c \
  90. oofatfs/ff.c \
  91. oofatfs/option/unicode.c \
  92. mp-readline/readline.c \
  93. netutils/netutils.c \
  94. timeutils/timeutils.c \
  95. utils/pyexec.c \
  96. utils/interrupt_char.c \
  97. utils/sys_stdio_mphal.c \
  98. )
  99. ifeq ($(MICROPY_FLOAT_IMPL),double)
  100. SRC_LIBM = $(addprefix lib/libm_dbl/,\
  101. __cos.c \
  102. __expo2.c \
  103. __fpclassify.c \
  104. __rem_pio2.c \
  105. __rem_pio2_large.c \
  106. __signbit.c \
  107. __sin.c \
  108. __tan.c \
  109. acos.c \
  110. acosh.c \
  111. asin.c \
  112. asinh.c \
  113. atan.c \
  114. atan2.c \
  115. atanh.c \
  116. ceil.c \
  117. cos.c \
  118. cosh.c \
  119. erf.c \
  120. exp.c \
  121. expm1.c \
  122. floor.c \
  123. fmod.c \
  124. frexp.c \
  125. ldexp.c \
  126. lgamma.c \
  127. log.c \
  128. log10.c \
  129. log1p.c \
  130. modf.c \
  131. nearbyint.c \
  132. pow.c \
  133. rint.c \
  134. scalbn.c \
  135. sin.c \
  136. sinh.c \
  137. sqrt.c \
  138. tan.c \
  139. tanh.c \
  140. tgamma.c \
  141. trunc.c \
  142. )
  143. else
  144. SRC_LIBM = $(addprefix lib/libm/,\
  145. math.c \
  146. acoshf.c \
  147. asinfacosf.c \
  148. asinhf.c \
  149. atan2f.c \
  150. atanf.c \
  151. atanhf.c \
  152. ef_rem_pio2.c \
  153. erf_lgamma.c \
  154. fmodf.c \
  155. kf_cos.c \
  156. kf_rem_pio2.c \
  157. kf_sin.c \
  158. kf_tan.c \
  159. log1pf.c \
  160. nearbyintf.c \
  161. sf_cos.c \
  162. sf_erf.c \
  163. sf_frexp.c \
  164. sf_ldexp.c \
  165. sf_modf.c \
  166. sf_sin.c \
  167. sf_tan.c \
  168. wf_lgamma.c \
  169. wf_tgamma.c \
  170. )
  171. ifeq ($(MCU_SERIES),f0)
  172. SRC_LIBM += lib/libm/ef_sqrt.c
  173. else
  174. SRC_LIBM += lib/libm/thumb_vfp_sqrtf.c
  175. endif
  176. endif
  177. EXTMOD_SRC_C = $(addprefix extmod/,\
  178. modlwip.c \
  179. modonewire.c \
  180. )
  181. DRIVERS_SRC_C = $(addprefix drivers/,\
  182. bus/softspi.c \
  183. bus/softqspi.c \
  184. memory/spiflash.c \
  185. dht/dht.c \
  186. )
  187. SRC_C = \
  188. main.c \
  189. stm32_it.c \
  190. usbd_conf.c \
  191. usbd_desc.c \
  192. usbd_cdc_interface.c \
  193. usbd_hid_interface.c \
  194. usbd_msc_storage.c \
  195. mphalport.c \
  196. mpthreadport.c \
  197. irq.c \
  198. pendsv.c \
  199. systick.c \
  200. pybthread.c \
  201. timer.c \
  202. led.c \
  203. pin.c \
  204. pin_defs_stm32.c \
  205. pin_named_pins.c \
  206. bufhelper.c \
  207. dma.c \
  208. i2c.c \
  209. pyb_i2c.c \
  210. spi.c \
  211. qspi.c \
  212. uart.c \
  213. can.c \
  214. usb.c \
  215. wdt.c \
  216. gccollect.c \
  217. help.c \
  218. machine_i2c.c \
  219. modmachine.c \
  220. modpyb.c \
  221. modstm.c \
  222. moduos.c \
  223. modutime.c \
  224. modusocket.c \
  225. modnetwork.c \
  226. extint.c \
  227. usrsw.c \
  228. rng.c \
  229. rtc.c \
  230. flash.c \
  231. flashbdev.c \
  232. spibdev.c \
  233. storage.c \
  234. sdcard.c \
  235. fatfs_port.c \
  236. lcd.c \
  237. accel.c \
  238. servo.c \
  239. dac.c \
  240. adc.c \
  241. $(wildcard boards/$(BOARD)/*.c)
  242. ifeq ($(MCU_SERIES),f0)
  243. SRC_O = \
  244. $(STARTUP_FILE) \
  245. system_stm32f0.o \
  246. resethandler_m0.o \
  247. gchelper_m0.o
  248. else
  249. SRC_O = \
  250. $(STARTUP_FILE) \
  251. system_stm32.o \
  252. resethandler.o \
  253. gchelper.o
  254. endif
  255. SRC_HAL = $(addprefix $(HAL_DIR)/Src/stm32$(MCU_SERIES)xx_,\
  256. hal.c \
  257. hal_adc.c \
  258. hal_adc_ex.c \
  259. hal_cortex.c \
  260. hal_dac.c \
  261. hal_dac_ex.c \
  262. hal_dma.c \
  263. hal_flash.c \
  264. hal_flash_ex.c \
  265. hal_gpio.c \
  266. hal_i2c.c \
  267. hal_pcd.c \
  268. hal_pcd_ex.c \
  269. hal_pwr.c \
  270. hal_pwr_ex.c \
  271. hal_rcc.c \
  272. hal_rcc_ex.c \
  273. hal_rtc.c \
  274. hal_rtc_ex.c \
  275. hal_spi.c \
  276. hal_tim.c \
  277. hal_tim_ex.c \
  278. hal_uart.c \
  279. )
  280. ifeq ($(MCU_SERIES),$(filter $(MCU_SERIES),f4 f7 h7 l4))
  281. SRC_HAL += $(addprefix $(HAL_DIR)/Src/stm32$(MCU_SERIES)xx_,\
  282. hal_sd.c \
  283. ll_sdmmc.c \
  284. ll_usb.c \
  285. )
  286. endif
  287. ifeq ($(CMSIS_MCU),$(filter $(CMSIS_MCU),STM32H743xx))
  288. SRC_HAL += $(addprefix $(HAL_DIR)/Src/stm32$(MCU_SERIES)xx_, hal_fdcan.c)
  289. else
  290. SRC_HAL += $(addprefix $(HAL_DIR)/Src/stm32$(MCU_SERIES)xx_, hal_can.c)
  291. endif
  292. SRC_USBDEV = $(addprefix $(USBDEV_DIR)/,\
  293. core/src/usbd_core.c \
  294. core/src/usbd_ctlreq.c \
  295. core/src/usbd_ioreq.c \
  296. class/src/usbd_cdc_msc_hid.c \
  297. class/src/usbd_msc_bot.c \
  298. class/src/usbd_msc_scsi.c \
  299. class/src/usbd_msc_data.c \
  300. )
  301. ifneq ($(MICROPY_PY_WIZNET5K),0)
  302. WIZNET5K_DIR=drivers/wiznet5k
  303. INC += -I$(TOP)/$(WIZNET5K_DIR)
  304. CFLAGS_MOD += -DMICROPY_PY_WIZNET5K=$(MICROPY_PY_WIZNET5K) -D_WIZCHIP_=$(MICROPY_PY_WIZNET5K)
  305. SRC_MOD += network_wiznet5k.c modnwwiznet5k.c
  306. SRC_MOD += $(addprefix $(WIZNET5K_DIR)/,\
  307. ethernet/w$(MICROPY_PY_WIZNET5K)/w$(MICROPY_PY_WIZNET5K).c \
  308. ethernet/wizchip_conf.c \
  309. ethernet/socket.c \
  310. internet/dns/dns.c \
  311. )
  312. endif
  313. # for CC3000 module
  314. ifeq ($(MICROPY_PY_CC3K),1)
  315. CC3000_DIR=drivers/cc3000
  316. INC += -I$(TOP)/$(CC3000_DIR)/inc
  317. CFLAGS_MOD += -DMICROPY_PY_CC3K=1
  318. SRC_MOD += modnwcc3k.c
  319. SRC_MOD += $(addprefix $(CC3000_DIR)/src/,\
  320. cc3000_common.c \
  321. evnt_handler.c \
  322. hci.c \
  323. netapp.c \
  324. nvmem.c \
  325. security.c \
  326. socket.c \
  327. wlan.c \
  328. ccspi.c \
  329. inet_ntop.c \
  330. inet_pton.c \
  331. patch.c \
  332. patch_prog.c \
  333. )
  334. endif
  335. LWIP_DIR = lib/lwip/src
  336. INC += -I$(TOP)/$(LWIP_DIR)/include -Ilwip_inc
  337. $(BUILD)/$(LWIP_DIR)/core/ipv4/dhcp.o: CFLAGS += -Wno-address
  338. SRC_MOD += $(addprefix $(LWIP_DIR)/,\
  339. core/def.c \
  340. core/dns.c \
  341. core/inet_chksum.c \
  342. core/init.c \
  343. core/ip.c \
  344. core/mem.c \
  345. core/memp.c \
  346. core/netif.c \
  347. core/pbuf.c \
  348. core/raw.c \
  349. core/stats.c \
  350. core/sys.c \
  351. core/tcp.c \
  352. core/tcp_in.c \
  353. core/tcp_out.c \
  354. core/timeouts.c \
  355. core/udp.c \
  356. core/ipv4/autoip.c \
  357. core/ipv4/dhcp.c \
  358. core/ipv4/etharp.c \
  359. core/ipv4/icmp.c \
  360. core/ipv4/igmp.c \
  361. core/ipv4/ip4_addr.c \
  362. core/ipv4/ip4.c \
  363. core/ipv4/ip4_frag.c \
  364. core/ipv6/dhcp6.c \
  365. core/ipv6/ethip6.c \
  366. core/ipv6/icmp6.c \
  367. core/ipv6/inet6.c \
  368. core/ipv6/ip6_addr.c \
  369. core/ipv6/ip6.c \
  370. core/ipv6/ip6_frag.c \
  371. core/ipv6/mld6.c \
  372. core/ipv6/nd6.c \
  373. netif/ethernet.c \
  374. )
  375. OBJ =
  376. OBJ += $(PY_O)
  377. OBJ += $(addprefix $(BUILD)/, $(SRC_LIB:.c=.o))
  378. OBJ += $(addprefix $(BUILD)/, $(SRC_LIBM:.c=.o))
  379. OBJ += $(addprefix $(BUILD)/, $(EXTMOD_SRC_C:.c=.o))
  380. OBJ += $(addprefix $(BUILD)/, $(DRIVERS_SRC_C:.c=.o))
  381. OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
  382. OBJ += $(addprefix $(BUILD)/, $(SRC_O))
  383. OBJ += $(addprefix $(BUILD)/, $(SRC_HAL:.c=.o))
  384. OBJ += $(addprefix $(BUILD)/, $(SRC_USBDEV:.c=.o))
  385. OBJ += $(addprefix $(BUILD)/, $(SRC_MOD:.c=.o))
  386. OBJ += $(BUILD)/pins_$(BOARD).o
  387. # This file contains performance critical functions so turn up the optimisation
  388. # level. It doesn't add much to the code size and improves performance a bit.
  389. # Don't use -O3 with this file because gcc tries to optimise memset in terms of itself.
  390. $(BUILD)/lib/libc/string0.o: COPT += -O2
  391. # We put several files into the first 16K section with the ISRs.
  392. # If we compile these using -O0 then it won't fit. So if you really want these
  393. # to be compiled with -O0, then edit boards/common.ld (in the .isr_vector section)
  394. # and comment out the following lines.
  395. $(BUILD)/$(FATFS_DIR)/ff.o: COPT += -Os
  396. $(filter $(PY_BUILD)/../extmod/vfs_fat_%.o, $(PY_O)): COPT += -Os
  397. $(PY_BUILD)/formatfloat.o: COPT += -Os
  398. $(PY_BUILD)/parsenum.o: COPT += -Os
  399. $(PY_BUILD)/mpprint.o: COPT += -Os
  400. all: $(TOP)/lib/stm32lib/README.md $(BUILD)/firmware.dfu $(BUILD)/firmware.hex
  401. # For convenience, automatically fetch required submodules if they don't exist
  402. $(TOP)/lib/stm32lib/README.md:
  403. $(ECHO) "stm32lib submodule not found, fetching it now..."
  404. (cd $(TOP) && git submodule update --init lib/stm32lib)
  405. ifneq ($(FROZEN_DIR),)
  406. # To use frozen source modules, put your .py files in a subdirectory (eg scripts/)
  407. # and then invoke make with FROZEN_DIR=scripts (be sure to build from scratch).
  408. CFLAGS += -DMICROPY_MODULE_FROZEN_STR
  409. endif
  410. ifneq ($(FROZEN_MPY_DIR),)
  411. # To use frozen bytecode, put your .py files in a subdirectory (eg frozen/) and
  412. # then invoke make with FROZEN_MPY_DIR=frozen (be sure to build from scratch).
  413. CFLAGS += -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
  414. CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
  415. endif
  416. .PHONY: deploy
  417. deploy: $(BUILD)/firmware.dfu
  418. $(ECHO) "Writing $< to the board"
  419. ifeq ($(USE_PYDFU),1)
  420. $(Q)$(PYTHON) $(PYDFU) -u $<
  421. else
  422. $(Q)$(DFU_UTIL) -a 0 -d $(DEVICE) -D $<
  423. endif
  424. # A board should specify TEXT0_ADDR if to use a different location than the
  425. # default for the firmware memory location. A board can also optionally define
  426. # TEXT1_ADDR to split the firmware into two sections; see below for details.
  427. TEXT0_ADDR ?= 0x08000000
  428. ifeq ($(TEXT1_ADDR),)
  429. # No TEXT1_ADDR given so put all firmware at TEXT0_ADDR location
  430. deploy-stlink: $(BUILD)/firmware.dfu
  431. $(ECHO) "Writing $(BUILD)/firmware.bin to the board via ST-LINK"
  432. $(Q)$(STFLASH) write $(BUILD)/firmware.bin $(TEXT0_ADDR)
  433. deploy-openocd: $(BUILD)/firmware.dfu
  434. $(ECHO) "Writing $(BUILD)/firmware.bin to the board via ST-LINK using OpenOCD"
  435. $(Q)$(OPENOCD) -f $(OPENOCD_CONFIG) -c "stm_flash $(BUILD)/firmware.bin $(TEXT0_ADDR)"
  436. $(BUILD)/firmware.dfu: $(BUILD)/firmware.elf
  437. $(ECHO) "Create $@"
  438. $(Q)$(OBJCOPY) -O binary -j .isr_vector -j .text -j .data $^ $(BUILD)/firmware.bin
  439. $(Q)$(PYTHON) $(DFU) -b $(TEXT0_ADDR):$(BUILD)/firmware.bin $@
  440. else
  441. # TEXT0_ADDR and TEXT1_ADDR are specified so split firmware between these locations
  442. deploy-stlink: $(BUILD)/firmware.dfu
  443. $(ECHO) "Writing $(BUILD)/firmware0.bin to the board via ST-LINK"
  444. $(Q)$(STFLASH) write $(BUILD)/firmware0.bin $(TEXT0_ADDR)
  445. $(ECHO) "Writing $(BUILD)/firmware1.bin to the board via ST-LINK"
  446. $(Q)$(STFLASH) --reset write $(BUILD)/firmware1.bin $(TEXT1_ADDR)
  447. deploy-openocd: $(BUILD)/firmware.dfu
  448. $(ECHO) "Writing $(BUILD)/firmware{0,1}.bin to the board via ST-LINK using OpenOCD"
  449. $(Q)$(OPENOCD) -f $(OPENOCD_CONFIG) -c "stm_flash $(BUILD)/firmware0.bin $(TEXT0_ADDR) $(BUILD)/firmware1.bin $(TEXT1_ADDR)"
  450. $(BUILD)/firmware.dfu: $(BUILD)/firmware.elf
  451. $(ECHO) "GEN $@"
  452. $(Q)$(OBJCOPY) -O binary -j .isr_vector $^ $(BUILD)/firmware0.bin
  453. $(Q)$(OBJCOPY) -O binary -j .text -j .data $^ $(BUILD)/firmware1.bin
  454. $(Q)$(PYTHON) $(DFU) -b $(TEXT0_ADDR):$(BUILD)/firmware0.bin -b $(TEXT1_ADDR):$(BUILD)/firmware1.bin $@
  455. endif
  456. $(BUILD)/firmware.hex: $(BUILD)/firmware.elf
  457. $(ECHO) "GEN $@"
  458. $(Q)$(OBJCOPY) -O ihex $< $@
  459. $(BUILD)/firmware.elf: $(OBJ)
  460. $(ECHO) "LINK $@"
  461. $(Q)$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
  462. $(Q)$(SIZE) $@
  463. PLLVALUES = boards/pllvalues.py
  464. MAKE_PINS = boards/make-pins.py
  465. BOARD_PINS = boards/$(BOARD)/pins.csv
  466. PREFIX_FILE = boards/stm32f4xx_prefix.c
  467. GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c
  468. GEN_PINS_HDR = $(HEADER_BUILD)/pins.h
  469. GEN_PINS_QSTR = $(BUILD)/pins_qstr.h
  470. GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h
  471. GEN_PINS_AF_DEFS = $(HEADER_BUILD)/pins_af_defs.h
  472. GEN_PINS_AF_PY = $(BUILD)/pins_af.py
  473. INSERT_USB_IDS = $(TOP)/tools/insert-usb-ids.py
  474. FILE2H = $(TOP)/tools/file2h.py
  475. USB_IDS_FILE = usb.h
  476. CDCINF_TEMPLATE = pybcdc.inf_template
  477. GEN_CDCINF_FILE = $(HEADER_BUILD)/pybcdc.inf
  478. GEN_CDCINF_HEADER = $(HEADER_BUILD)/pybcdc_inf.h
  479. # List of sources for qstr extraction
  480. SRC_QSTR += $(SRC_C) $(SRC_MOD) $(SRC_LIB) $(EXTMOD_SRC_C)
  481. # Append any auto-generated sources that are needed by sources listed in
  482. # SRC_QSTR
  483. SRC_QSTR_AUTO_DEPS += $(GEN_CDCINF_HEADER)
  484. # Making OBJ use an order-only depenedency on the generated pins.h file
  485. # has the side effect of making the pins.h file before we actually compile
  486. # any of the objects. The normal dependency generation will deal with the
  487. # case when pins.h is modified. But when it doesn't exist, we don't know
  488. # which source files might need it.
  489. $(OBJ): | $(GEN_PINS_HDR)
  490. # With conditional pins, we may need to regenerate qstrdefs.h when config
  491. # options change.
  492. $(HEADER_BUILD)/qstrdefs.generated.h: boards/$(BOARD)/mpconfigboard.h
  493. # main.c can't be even preprocessed without $(GEN_CDCINF_HEADER)
  494. main.c: $(GEN_CDCINF_HEADER)
  495. # Use a pattern rule here so that make will only call make-pins.py once to make
  496. # both pins_$(BOARD).c and pins.h
  497. $(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(HEADER_BUILD)/%_af_defs.h $(BUILD)/%_qstr.h: boards/$(BOARD)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD)
  498. $(ECHO) "GEN $@"
  499. $(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-defs $(GEN_PINS_AF_DEFS) --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC)
  500. $(BUILD)/pins_$(BOARD).o: $(BUILD)/pins_$(BOARD).c
  501. $(call compile_c)
  502. GEN_PLLFREQTABLE_HDR = $(HEADER_BUILD)/pllfreqtable.h
  503. GEN_STMCONST_HDR = $(HEADER_BUILD)/modstm_const.h
  504. GEN_STMCONST_QSTR = $(BUILD)/modstm_qstr.h
  505. GEN_STMCONST_MPZ = $(HEADER_BUILD)/modstm_mpz.h
  506. CMSIS_MCU_LOWER = $(shell echo $(CMSIS_MCU) | tr '[:upper:]' '[:lower:]')
  507. CMSIS_MCU_HDR = $(CMSIS_DIR)/$(CMSIS_MCU_LOWER).h
  508. modmachine.c: $(GEN_PLLFREQTABLE_HDR)
  509. $(GEN_PLLFREQTABLE_HDR): $(PLLVALUES) | $(HEADER_BUILD)
  510. $(ECHO) "GEN $@"
  511. $(Q)$(PYTHON) $(PLLVALUES) -c file:boards/$(BOARD)/stm32$(MCU_SERIES)xx_hal_conf.h > $@
  512. $(BUILD)/modstm.o: $(GEN_STMCONST_HDR)
  513. # Use a pattern rule here so that make will only call make-stmconst.py once to
  514. # make both modstm_const.h and modstm_qstr.h
  515. $(HEADER_BUILD)/%_const.h $(BUILD)/%_qstr.h: $(CMSIS_MCU_HDR) make-stmconst.py | $(HEADER_BUILD)
  516. $(ECHO) "GEN stmconst $@"
  517. $(Q)$(PYTHON) make-stmconst.py --qstr $(GEN_STMCONST_QSTR) --mpz $(GEN_STMCONST_MPZ) $(CMSIS_MCU_HDR) > $(GEN_STMCONST_HDR)
  518. $(GEN_CDCINF_HEADER): $(GEN_CDCINF_FILE) $(FILE2H) | $(HEADER_BUILD)
  519. $(ECHO) "GEN $@"
  520. $(Q)$(PYTHON) $(FILE2H) $< > $@
  521. $(GEN_CDCINF_FILE): $(CDCINF_TEMPLATE) $(INSERT_USB_IDS) $(USB_IDS_FILE) | $(HEADER_BUILD)
  522. $(ECHO) "GEN $@"
  523. $(Q)$(PYTHON) $(INSERT_USB_IDS) $(USB_IDS_FILE) $< > $@
  524. include $(TOP)/py/mkrules.mk