blob: f5219048f35a63a6ee19a2d8befe805a6be4bbee [file] [log] [blame]
Damien George9b908822020-09-23 15:55:55 +10001# Set location of base MicroPython directory.
Damien George0009a7d2021-06-24 16:03:25 +10002if(NOT MICROPY_DIR)
Damien Georgee4650122023-05-09 09:52:54 +10003 get_filename_component(MICROPY_DIR ${CMAKE_CURRENT_LIST_DIR}/../.. ABSOLUTE)
Brian 'redbeard' Harrington5fe2a3f2023-06-12 13:02:10 -07004endif()
5
Damien Georgee4650122023-05-09 09:52:54 +10006# Set location of the ESP32 port directory.
Brian 'redbeard' Harrington5fe2a3f2023-06-12 13:02:10 -07007if(NOT MICROPY_PORT_DIR)
8 get_filename_component(MICROPY_PORT_DIR ${MICROPY_DIR}/ports/esp32 ABSOLUTE)
Damien George0009a7d2021-06-24 16:03:25 +10009endif()
Damien George9b908822020-09-23 15:55:55 +100010
11# Include core source components.
12include(${MICROPY_DIR}/py/py.cmake)
Damien George9b908822020-09-23 15:55:55 +100013
Jim Mussaredad123ed2023-07-31 17:24:38 +100014# CMAKE_BUILD_EARLY_EXPANSION is set during the component-discovery phase of
15# `idf.py build`, so none of the extmod/usermod (and in reality, most of the
16# micropython) rules need to happen. Specifically, you cannot invoke add_library.
Michael O'Cleirigh0ccd9e02021-03-27 17:10:39 -040017if(NOT CMAKE_BUILD_EARLY_EXPANSION)
Damien Georgebd375df2022-06-08 12:21:51 +100018 # Enable extmod components that will be configured by extmod.cmake.
19 # A board may also have enabled additional components.
20 set(MICROPY_PY_BTREE ON)
21
Michael O'Cleirigh0ccd9e02021-03-27 17:10:39 -040022 include(${MICROPY_DIR}/py/usermod.cmake)
Damien George212fe7f2021-04-08 23:45:28 +100023 include(${MICROPY_DIR}/extmod/extmod.cmake)
Michael O'Cleirigh0ccd9e02021-03-27 17:10:39 -040024endif()
25
Damien Georgee4650122023-05-09 09:52:54 +100026list(APPEND MICROPY_QSTRDEFS_PORT
Brian 'redbeard' Harrington5fe2a3f2023-06-12 13:02:10 -070027 ${MICROPY_PORT_DIR}/qstrdefsport.h
Damien George75db0b92021-02-21 11:33:15 +110028)
29
Damien Georgee4650122023-05-09 09:52:54 +100030list(APPEND MICROPY_SOURCE_SHARED
Damien George136369d2021-07-09 14:19:15 +100031 ${MICROPY_DIR}/shared/readline/readline.c
32 ${MICROPY_DIR}/shared/netutils/netutils.c
33 ${MICROPY_DIR}/shared/timeutils/timeutils.c
34 ${MICROPY_DIR}/shared/runtime/interrupt_char.c
35 ${MICROPY_DIR}/shared/runtime/stdout_helpers.c
36 ${MICROPY_DIR}/shared/runtime/sys_stdio_mphal.c
37 ${MICROPY_DIR}/shared/runtime/pyexec.c
38)
39
Damien Georgee4650122023-05-09 09:52:54 +100040list(APPEND MICROPY_SOURCE_LIB
Damien George9b908822020-09-23 15:55:55 +100041 ${MICROPY_DIR}/lib/littlefs/lfs1.c
42 ${MICROPY_DIR}/lib/littlefs/lfs1_util.c
43 ${MICROPY_DIR}/lib/littlefs/lfs2.c
44 ${MICROPY_DIR}/lib/littlefs/lfs2_util.c
Damien Georgee4650122023-05-09 09:52:54 +100045 #${MICROPY_DIR}/lib/mbedtls_errors/esp32_mbedtls_errors.c
Damien George9b908822020-09-23 15:55:55 +100046 ${MICROPY_DIR}/lib/oofatfs/ff.c
47 ${MICROPY_DIR}/lib/oofatfs/ffunicode.c
Damien George9b908822020-09-23 15:55:55 +100048)
49
Damien Georgee4650122023-05-09 09:52:54 +100050list(APPEND MICROPY_SOURCE_DRIVERS
Damien George9b908822020-09-23 15:55:55 +100051 ${MICROPY_DIR}/drivers/bus/softspi.c
52 ${MICROPY_DIR}/drivers/dht/dht.c
53)
54
Damien Georgee4650122023-05-09 09:52:54 +100055list(APPEND MICROPY_SOURCE_PORT
Brian 'redbeard' Harrington5fe2a3f2023-06-12 13:02:10 -070056 main.c
Damien George1db40ed2023-06-21 15:09:26 +100057 ppp_set_auth.c
Brian 'redbeard' Harrington5fe2a3f2023-06-12 13:02:10 -070058 uart.c
59 usb.c
60 usb_serial_jtag.c
61 gccollect.c
62 mphalport.c
63 fatfs_port.c
64 help.c
65 machine_bitstream.c
66 machine_timer.c
67 machine_pin.c
68 machine_touchpad.c
69 machine_adc.c
70 machine_adcblock.c
71 machine_dac.c
72 machine_i2c.c
73 machine_i2s.c
74 machine_uart.c
75 modmachine.c
76 network_common.c
77 network_lan.c
78 network_ppp.c
79 network_wlan.c
80 mpnimbleport.c
81 modsocket.c
82 modesp.c
83 esp32_nvs.c
84 esp32_partition.c
85 esp32_rmt.c
86 esp32_ulp.c
87 modesp32.c
88 machine_hw_spi.c
89 machine_wdt.c
90 mpthreadport.c
91 machine_rtc.c
92 machine_sdcard.c
93 modespnow.c
Damien George9b908822020-09-23 15:55:55 +100094)
Brian 'redbeard' Harrington5fe2a3f2023-06-12 13:02:10 -070095list(TRANSFORM MICROPY_SOURCE_PORT PREPEND ${MICROPY_PORT_DIR}/)
Damien Georgecb31c0a2023-07-15 00:03:59 +100096list(APPEND MICROPY_SOURCE_PORT ${CMAKE_BINARY_DIR}/pins.c)
Damien George9b908822020-09-23 15:55:55 +100097
Damien Georgee4650122023-05-09 09:52:54 +100098list(APPEND MICROPY_SOURCE_QSTR
Damien George9b908822020-09-23 15:55:55 +100099 ${MICROPY_SOURCE_PY}
100 ${MICROPY_SOURCE_EXTMOD}
Michael O'Cleirigh0ccd9e02021-03-27 17:10:39 -0400101 ${MICROPY_SOURCE_USERMOD}
Damien George136369d2021-07-09 14:19:15 +1000102 ${MICROPY_SOURCE_SHARED}
Damien George9b908822020-09-23 15:55:55 +1000103 ${MICROPY_SOURCE_LIB}
104 ${MICROPY_SOURCE_PORT}
Damien Georgef046b502021-09-22 00:00:26 +1000105 ${MICROPY_SOURCE_BOARD}
Damien George9b908822020-09-23 15:55:55 +1000106)
107
Damien Georgee4650122023-05-09 09:52:54 +1000108list(APPEND IDF_COMPONENTS
Damien George9b908822020-09-23 15:55:55 +1000109 app_update
110 bootloader_support
Damien Georgeda2b5fa2021-02-14 01:36:30 +1100111 bt
Damien George9b908822020-09-23 15:55:55 +1000112 driver
Damien Georgee4650122023-05-09 09:52:54 +1000113 esp_adc
114 esp_app_format
Damien George9b908822020-09-23 15:55:55 +1000115 esp_common
116 esp_eth
117 esp_event
Damien Georgee4650122023-05-09 09:52:54 +1000118 esp_hw_support
119 esp_netif
120 esp_partition
121 esp_pm
122 esp_psram
Damien George9b908822020-09-23 15:55:55 +1000123 esp_ringbuf
124 esp_rom
Damien Georgee4650122023-05-09 09:52:54 +1000125 esp_system
126 esp_timer
Damien George9b908822020-09-23 15:55:55 +1000127 esp_wifi
128 freertos
Damien Georgee4650122023-05-09 09:52:54 +1000129 hal
Damien George9b908822020-09-23 15:55:55 +1000130 heap
131 log
132 lwip
133 mbedtls
Damien George9b908822020-09-23 15:55:55 +1000134 newlib
135 nvs_flash
136 sdmmc
137 soc
138 spi_flash
Damien George9b908822020-09-23 15:55:55 +1000139 ulp
140 vfs
141 xtensa
142)
143
Damien George9b908822020-09-23 15:55:55 +1000144# Register the main IDF component.
145idf_component_register(
146 SRCS
147 ${MICROPY_SOURCE_PY}
148 ${MICROPY_SOURCE_EXTMOD}
Damien George136369d2021-07-09 14:19:15 +1000149 ${MICROPY_SOURCE_SHARED}
Damien George9b908822020-09-23 15:55:55 +1000150 ${MICROPY_SOURCE_LIB}
151 ${MICROPY_SOURCE_DRIVERS}
152 ${MICROPY_SOURCE_PORT}
Damien Georgef046b502021-09-22 00:00:26 +1000153 ${MICROPY_SOURCE_BOARD}
Damien George9b908822020-09-23 15:55:55 +1000154 INCLUDE_DIRS
Damien George5dcc9b32021-04-09 00:59:16 +1000155 ${MICROPY_INC_CORE}
Michael O'Cleirigh0ccd9e02021-03-27 17:10:39 -0400156 ${MICROPY_INC_USERMOD}
Damien George9b908822020-09-23 15:55:55 +1000157 ${MICROPY_PORT_DIR}
158 ${MICROPY_BOARD_DIR}
159 ${CMAKE_BINARY_DIR}
160 REQUIRES
161 ${IDF_COMPONENTS}
162)
163
164# Set the MicroPython target as the current (main) IDF component target.
165set(MICROPY_TARGET ${COMPONENT_TARGET})
166
167# Define mpy-cross flags, for use with frozen code.
168set(MICROPY_CROSS_FLAGS -march=xtensawin)
169
170# Set compile options for this port.
171target_compile_definitions(${MICROPY_TARGET} PUBLIC
Damien Georgeab9d47e2021-04-08 23:56:28 +1000172 ${MICROPY_DEF_CORE}
Jim Mussared2fbf42d2023-07-25 15:03:30 +1000173 ${MICROPY_DEF_BOARD}
Damien George9b908822020-09-23 15:55:55 +1000174 MICROPY_ESP_IDF_4=1
175 MICROPY_VFS_FAT=1
176 MICROPY_VFS_LFS2=1
177 FFCONF_H=\"${MICROPY_OOFATFS_DIR}/ffconf.h\"
178 LFS1_NO_MALLOC LFS1_NO_DEBUG LFS1_NO_WARN LFS1_NO_ERROR LFS1_NO_ASSERT
179 LFS2_NO_MALLOC LFS2_NO_DEBUG LFS2_NO_WARN LFS2_NO_ERROR LFS2_NO_ASSERT
180)
181
182# Disable some warnings to keep the build output clean.
183target_compile_options(${MICROPY_TARGET} PUBLIC
184 -Wno-clobbered
185 -Wno-deprecated-declarations
186 -Wno-missing-field-initializers
187)
188
Damien George5dbb8222021-03-17 12:35:59 +1100189# Additional include directories needed for private NimBLE headers.
190target_include_directories(${MICROPY_TARGET} PUBLIC
191 ${IDF_PATH}/components/bt/host/nimble/nimble
192)
193
Damien Georgeab9d47e2021-04-08 23:56:28 +1000194# Add additional extmod and usermod components.
195target_link_libraries(${MICROPY_TARGET} micropy_extmod_btree)
Michael O'Cleirigh0ccd9e02021-03-27 17:10:39 -0400196target_link_libraries(${MICROPY_TARGET} usermod)
197
Luca Burelli31ef7c12023-07-05 18:03:11 +0200198# Collect all of the include directories and compile definitions for the IDF components,
199# including those added by the IDF Component Manager via idf_components.yaml.
200foreach(comp ${__COMPONENT_NAMES_RESOLVED})
Damien George0fabda32021-04-08 23:42:22 +1000201 micropy_gather_target_properties(__idf_${comp})
Damien Georgee4650122023-05-09 09:52:54 +1000202 micropy_gather_target_properties(${comp})
Damien George9b908822020-09-23 15:55:55 +1000203endforeach()
204
Damien George9b908822020-09-23 15:55:55 +1000205# Include the main MicroPython cmake rules.
206include(${MICROPY_DIR}/py/mkrules.cmake)
Damien Georgecb31c0a2023-07-15 00:03:59 +1000207
208# Generate source files for named pins (requires mkrules.cmake for MICROPY_GENHDR_DIR).
209
210set(GEN_PINS_PREFIX "${MICROPY_PORT_DIR}/boards/pins_prefix.c")
211set(GEN_PINS_MKPINS "${MICROPY_PORT_DIR}/boards/make-pins.py")
212set(GEN_PINS_SRC "${CMAKE_BINARY_DIR}/pins.c")
213set(GEN_PINS_HDR "${MICROPY_GENHDR_DIR}/pins.h")
214
215if(EXISTS "${MICROPY_BOARD_DIR}/pins.csv")
216 set(GEN_PINS_BOARD_CSV "${MICROPY_BOARD_DIR}/pins.csv")
217 set(GEN_PINS_BOARD_CSV_ARG --board-csv "${GEN_PINS_BOARD_CSV}")
218endif()
219
220target_sources(${MICROPY_TARGET} PRIVATE ${GEN_PINS_HDR})
221
222add_custom_command(
223 OUTPUT ${GEN_PINS_SRC} ${GEN_PINS_HDR}
224 COMMAND ${Python3_EXECUTABLE} ${GEN_PINS_MKPINS} ${GEN_PINS_BOARD_CSV_ARG}
225 --prefix ${GEN_PINS_PREFIX} --output-source ${GEN_PINS_SRC} --output-header ${GEN_PINS_HDR}
226 DEPENDS
227 ${MICROPY_MPVERSION}
228 ${GEN_PINS_MKPINS}
229 ${GEN_PINS_BOARD_CSV}
230 ${GEN_PINS_PREFIX}
231 VERBATIM
232 COMMAND_EXPAND_LISTS
233)