From 31dd25efc8f55a13ac74ded86142310f4c9f53a5 Mon Sep 17 00:00:00 2001 From: Damien George Date: Wed, 23 Sep 2020 15:53:46 +1000 Subject: [PATCH 01/10] py,extmod: Add core cmake rule files. Signed-off-by: Damien George --- extmod/extmod.cmake | 42 +++++++++++++++ py/mkrules.cmake | 102 ++++++++++++++++++++++++++++++++++++ py/py.cmake | 124 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 268 insertions(+) create mode 100644 extmod/extmod.cmake create mode 100644 py/mkrules.cmake create mode 100644 py/py.cmake diff --git a/extmod/extmod.cmake b/extmod/extmod.cmake new file mode 100644 index 0000000000000..bff023479a2bd --- /dev/null +++ b/extmod/extmod.cmake @@ -0,0 +1,42 @@ +# CMake fragment for MicroPython extmod component + +set(MPY_EXTMOD_DIR "${MPY_DIR}/extmod") +set(OOFATFS_DIR "${MPY_DIR}/lib/oofatfs") + +set(SOURCE_EXTMOD + ${MPY_EXTMOD_DIR}/machine_i2c.c + ${MPY_EXTMOD_DIR}/machine_mem.c + ${MPY_EXTMOD_DIR}/machine_pulse.c + ${MPY_EXTMOD_DIR}/machine_signal.c + ${MPY_EXTMOD_DIR}/machine_spi.c + ${MPY_EXTMOD_DIR}/modbtree.c + ${MPY_EXTMOD_DIR}/modframebuf.c + ${MPY_EXTMOD_DIR}/moduasyncio.c + ${MPY_EXTMOD_DIR}/modubinascii.c + ${MPY_EXTMOD_DIR}/moducryptolib.c + ${MPY_EXTMOD_DIR}/moductypes.c + ${MPY_EXTMOD_DIR}/moduhashlib.c + ${MPY_EXTMOD_DIR}/moduheapq.c + ${MPY_EXTMOD_DIR}/modujson.c + ${MPY_EXTMOD_DIR}/modurandom.c + ${MPY_EXTMOD_DIR}/modure.c + ${MPY_EXTMOD_DIR}/moduselect.c + ${MPY_EXTMOD_DIR}/modussl_axtls.c + ${MPY_EXTMOD_DIR}/modussl_mbedtls.c + ${MPY_EXTMOD_DIR}/modutimeq.c + ${MPY_EXTMOD_DIR}/moduwebsocket.c + ${MPY_EXTMOD_DIR}/moduzlib.c + ${MPY_EXTMOD_DIR}/modwebrepl.c + ${MPY_EXTMOD_DIR}/uos_dupterm.c + ${MPY_EXTMOD_DIR}/utime_mphal.c + ${MPY_EXTMOD_DIR}/vfs.c + ${MPY_EXTMOD_DIR}/vfs_blockdev.c + ${MPY_EXTMOD_DIR}/vfs_fat.c + ${MPY_EXTMOD_DIR}/vfs_fat_diskio.c + ${MPY_EXTMOD_DIR}/vfs_fat_file.c + ${MPY_EXTMOD_DIR}/vfs_lfs.c + ${MPY_EXTMOD_DIR}/vfs_posix.c + ${MPY_EXTMOD_DIR}/vfs_posix_file.c + ${MPY_EXTMOD_DIR}/vfs_reader.c + ${MPY_EXTMOD_DIR}/virtpin.c +) diff --git a/py/mkrules.cmake b/py/mkrules.cmake new file mode 100644 index 0000000000000..d25126e3195d2 --- /dev/null +++ b/py/mkrules.cmake @@ -0,0 +1,102 @@ +# CMake fragment for MicroPython rules + +set(MPY_PY_QSTRDEFS "${MPY_PY_DIR}/qstrdefs.h") +set(MPY_GENHDR_DIR "${CMAKE_BINARY_DIR}/genhdr") +set(MPY_MPVERSION "${MPY_GENHDR_DIR}/mpversion.h") +set(MPY_MODULEDEFS "${MPY_GENHDR_DIR}/moduledefs.h") +set(MPY_QSTR_DEFS_LAST "${MPY_GENHDR_DIR}/qstr.i.last") +set(MPY_QSTR_DEFS_SPLIT "${MPY_GENHDR_DIR}/qstr.split") +set(MPY_QSTR_DEFS_COLLECTED "${MPY_GENHDR_DIR}/qstrdefs.collected.h") +set(MPY_QSTR_DEFS_PREPROCESSED "${MPY_GENHDR_DIR}/qstrdefs.preprocessed.h") +set(MPY_QSTR_DEFS_GENERATED "${MPY_GENHDR_DIR}/qstrdefs.generated.h") +set(MPY_FROZEN_CONTENT "${CMAKE_BINARY_DIR}/frozen_content.c") + +target_sources(${MICROPYTHON_TARGET} PRIVATE + ${MPY_MPVERSION} + ${MPY_QSTR_DEFS_GENERATED} + ${MPY_FROZEN_CONTENT} +) + +# Command to force the build of another command + +add_custom_command( + OUTPUT FORCE_BUILD + COMMENT "" + COMMAND echo -n +) + +# Generate mpversion.h + +add_custom_command( + OUTPUT ${MPY_MPVERSION} + COMMAND ${CMAKE_COMMAND} -E make_directory ${MPY_GENHDR_DIR} + COMMAND python3 ${MPY_DIR}/py/makeversionhdr.py ${MPY_MPVERSION} + DEPENDS FORCE_BUILD +) + +# Generate moduledefs.h +# This is currently hard-coded to support modarray.c only, because makemoduledefs.py doesn't support absolute paths + +add_custom_command( + OUTPUT ${MPY_MODULEDEFS} + COMMAND python3 ${MPY_PY_DIR}/makemoduledefs.py --vpath="." ../../../py/modarray.c > ${MPY_MODULEDEFS} + DEPENDS ${MPY_MPVERSION} + ${SOURCE_QSTR} +) + +# Generate qstrs + +# If any of the dependencies in this rule change then the C-preprocessor step must be run. +# It only needs to be passed the list of SOURCE_QSTR files that have changed since it was +# last run, but it looks like it's not possible to specify that with cmake. +add_custom_command( + OUTPUT ${MPY_QSTR_DEFS_LAST} + COMMAND ${CMAKE_C_COMPILER} -E \$\(C_INCLUDES\) \$\(C_FLAGS\) -DNO_QSTR ${SOURCE_QSTR} > ${MPY_GENHDR_DIR}/qstr.i.last + DEPENDS ${MPY_MODULEDEFS} + ${SOURCE_QSTR} + VERBATIM +) + +add_custom_command( + OUTPUT ${MPY_QSTR_DEFS_SPLIT} + COMMAND python3 ${MPY_DIR}/py/makeqstrdefs.py split qstr ${MPY_GENHDR_DIR}/qstr.i.last ${MPY_GENHDR_DIR}/qstr _ + COMMAND touch ${MPY_QSTR_DEFS_SPLIT} + DEPENDS ${MPY_QSTR_DEFS_LAST} + VERBATIM +) + +add_custom_command( + OUTPUT ${MPY_QSTR_DEFS_COLLECTED} + COMMAND python3 ${MPY_DIR}/py/makeqstrdefs.py cat qstr _ ${MPY_GENHDR_DIR}/qstr ${MPY_QSTR_DEFS_COLLECTED} + DEPENDS ${MPY_QSTR_DEFS_SPLIT} + VERBATIM +) + +add_custom_command( + OUTPUT ${MPY_QSTR_DEFS_PREPROCESSED} + COMMAND cat ${MPY_PY_QSTRDEFS} ${MPY_QSTR_DEFS_COLLECTED} | sed "s/^Q(.*)/\"&\"/" | ${CMAKE_C_COMPILER} -E \$\(C_INCLUDES\) \$\(C_FLAGS\) - | sed "s/^\\\"\\(Q(.*)\\)\\\"/\\1/" > ${MPY_QSTR_DEFS_PREPROCESSED} + DEPENDS ${MPY_QSTR_DEFS_COLLECTED} + VERBATIM +) + +add_custom_command( + OUTPUT ${MPY_QSTR_DEFS_GENERATED} + COMMAND python3 ${MPY_PY_DIR}/makeqstrdata.py ${MPY_QSTR_DEFS_PREPROCESSED} > ${MPY_QSTR_DEFS_GENERATED} + DEPENDS ${MPY_QSTR_DEFS_PREPROCESSED} + VERBATIM +) + +# Build frozen code + +target_compile_options(${MICROPYTHON_TARGET} PUBLIC + -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool + -DMICROPY_MODULE_FROZEN_MPY=\(1\) +) + +add_custom_command( + OUTPUT ${MPY_FROZEN_CONTENT} + COMMAND python3 ${MPY_DIR}/tools/makemanifest.py -o ${MPY_FROZEN_CONTENT} -v "MPY_DIR=${MPY_DIR}" -v "PORT_DIR=${MPY_PORT_DIR}" -b "${CMAKE_BINARY_DIR}" -f${MPY_CROSS_FLAGS} ${FROZEN_MANIFEST} + DEPENDS FORCE_BUILD + ${MPY_QSTR_DEFS_GENERATED} + VERBATIM +) diff --git a/py/py.cmake b/py/py.cmake new file mode 100644 index 0000000000000..37f4c29c02971 --- /dev/null +++ b/py/py.cmake @@ -0,0 +1,124 @@ +# CMake fragment for MicroPython core py component + +set(MPY_PY_DIR "${MPY_DIR}/py") + +# All py/ source files +set(SOURCE_PY + ${MPY_PY_DIR}/argcheck.c + ${MPY_PY_DIR}/asmarm.c + ${MPY_PY_DIR}/asmbase.c + ${MPY_PY_DIR}/asmthumb.c + ${MPY_PY_DIR}/asmx64.c + ${MPY_PY_DIR}/asmx86.c + ${MPY_PY_DIR}/asmxtensa.c + ${MPY_PY_DIR}/bc.c + ${MPY_PY_DIR}/binary.c + ${MPY_PY_DIR}/builtinevex.c + ${MPY_PY_DIR}/builtinhelp.c + ${MPY_PY_DIR}/builtinimport.c + ${MPY_PY_DIR}/compile.c + ${MPY_PY_DIR}/emitbc.c + ${MPY_PY_DIR}/emitcommon.c + ${MPY_PY_DIR}/emitglue.c + ${MPY_PY_DIR}/emitinlinethumb.c + ${MPY_PY_DIR}/emitinlinextensa.c + ${MPY_PY_DIR}/emitnarm.c + ${MPY_PY_DIR}/emitnthumb.c + ${MPY_PY_DIR}/emitnx64.c + ${MPY_PY_DIR}/emitnx86.c + ${MPY_PY_DIR}/emitnxtensa.c + ${MPY_PY_DIR}/emitnxtensawin.c + ${MPY_PY_DIR}/formatfloat.c + ${MPY_PY_DIR}/frozenmod.c + ${MPY_PY_DIR}/gc.c + ${MPY_PY_DIR}/lexer.c + ${MPY_PY_DIR}/malloc.c + ${MPY_PY_DIR}/map.c + ${MPY_PY_DIR}/modarray.c + ${MPY_PY_DIR}/modbuiltins.c + ${MPY_PY_DIR}/modcmath.c + ${MPY_PY_DIR}/modcollections.c + ${MPY_PY_DIR}/modgc.c + ${MPY_PY_DIR}/modio.c + ${MPY_PY_DIR}/modmath.c + ${MPY_PY_DIR}/modmicropython.c + ${MPY_PY_DIR}/modstruct.c + ${MPY_PY_DIR}/modsys.c + ${MPY_PY_DIR}/modthread.c + ${MPY_PY_DIR}/moduerrno.c + ${MPY_PY_DIR}/mpprint.c + ${MPY_PY_DIR}/mpstate.c + ${MPY_PY_DIR}/mpz.c + ${MPY_PY_DIR}/nativeglue.c + ${MPY_PY_DIR}/nlr.c + ${MPY_PY_DIR}/nlrpowerpc.c + ${MPY_PY_DIR}/nlrsetjmp.c + ${MPY_PY_DIR}/nlrthumb.c + ${MPY_PY_DIR}/nlrx64.c + ${MPY_PY_DIR}/nlrx86.c + ${MPY_PY_DIR}/nlrxtensa.c + ${MPY_PY_DIR}/obj.c + ${MPY_PY_DIR}/objarray.c + ${MPY_PY_DIR}/objattrtuple.c + ${MPY_PY_DIR}/objbool.c + ${MPY_PY_DIR}/objboundmeth.c + ${MPY_PY_DIR}/objcell.c + ${MPY_PY_DIR}/objclosure.c + ${MPY_PY_DIR}/objcomplex.c + ${MPY_PY_DIR}/objdeque.c + ${MPY_PY_DIR}/objdict.c + ${MPY_PY_DIR}/objenumerate.c + ${MPY_PY_DIR}/objexcept.c + ${MPY_PY_DIR}/objfilter.c + ${MPY_PY_DIR}/objfloat.c + ${MPY_PY_DIR}/objfun.c + ${MPY_PY_DIR}/objgenerator.c + ${MPY_PY_DIR}/objgetitemiter.c + ${MPY_PY_DIR}/objint.c + ${MPY_PY_DIR}/objint_longlong.c + ${MPY_PY_DIR}/objint_mpz.c + ${MPY_PY_DIR}/objlist.c + ${MPY_PY_DIR}/objmap.c + ${MPY_PY_DIR}/objmodule.c + ${MPY_PY_DIR}/objnamedtuple.c + ${MPY_PY_DIR}/objnone.c + ${MPY_PY_DIR}/objobject.c + ${MPY_PY_DIR}/objpolyiter.c + ${MPY_PY_DIR}/objproperty.c + ${MPY_PY_DIR}/objrange.c + ${MPY_PY_DIR}/objreversed.c + ${MPY_PY_DIR}/objset.c + ${MPY_PY_DIR}/objsingleton.c + ${MPY_PY_DIR}/objslice.c + ${MPY_PY_DIR}/objstr.c + ${MPY_PY_DIR}/objstringio.c + ${MPY_PY_DIR}/objstrunicode.c + ${MPY_PY_DIR}/objtuple.c + ${MPY_PY_DIR}/objtype.c + ${MPY_PY_DIR}/objzip.c + ${MPY_PY_DIR}/opmethods.c + ${MPY_PY_DIR}/pairheap.c + ${MPY_PY_DIR}/parse.c + ${MPY_PY_DIR}/parsenum.c + ${MPY_PY_DIR}/parsenumbase.c + ${MPY_PY_DIR}/persistentcode.c + ${MPY_PY_DIR}/profile.c + ${MPY_PY_DIR}/pystack.c + ${MPY_PY_DIR}/qstr.c + ${MPY_PY_DIR}/reader.c + ${MPY_PY_DIR}/repl.c + ${MPY_PY_DIR}/ringbuf.c + ${MPY_PY_DIR}/runtime.c + ${MPY_PY_DIR}/runtime_utils.c + ${MPY_PY_DIR}/scheduler.c + ${MPY_PY_DIR}/scope.c + ${MPY_PY_DIR}/sequence.c + ${MPY_PY_DIR}/showbc.c + ${MPY_PY_DIR}/smallint.c + ${MPY_PY_DIR}/stackctrl.c + ${MPY_PY_DIR}/stream.c + ${MPY_PY_DIR}/unicode.c + ${MPY_PY_DIR}/vm.c + ${MPY_PY_DIR}/vstr.c + ${MPY_PY_DIR}/warning.c +) From 0ddce6952dd18b2342be8188467a6d549adb40e2 Mon Sep 17 00:00:00 2001 From: Damien George Date: Wed, 23 Sep 2020 15:55:33 +1000 Subject: [PATCH 02/10] esp32: Update to support IDF v4.1. Signed-off-by: Damien George --- ports/esp32/machine_uart.c | 24 +++++++++++++----------- ports/esp32/modnetwork.c | 7 +++---- ports/esp32/modsocket.c | 3 +-- ports/esp32/uart.c | 1 + 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/ports/esp32/machine_uart.c b/ports/esp32/machine_uart.c index c334e694b21b0..30fafc11201e7 100644 --- a/ports/esp32/machine_uart.c +++ b/ports/esp32/machine_uart.c @@ -36,6 +36,8 @@ #include "py/mperrno.h" #include "modmachine.h" +#define UART_LINE_INV_MASK (0xff) + typedef struct _machine_uart_obj_t { mp_obj_base_t base; uart_port_t uart_num; @@ -68,28 +70,28 @@ STATIC void machine_uart_print(const mp_print_t *print, mp_obj_t self_in, mp_pri if (self->invert) { mp_printf(print, ", invert="); uint32_t invert_mask = self->invert; - if (invert_mask & UART_INVERSE_TXD) { + if (invert_mask & UART_SIGNAL_TXD_INV) { mp_printf(print, "INV_TX"); - invert_mask &= ~UART_INVERSE_TXD; + invert_mask &= ~UART_SIGNAL_TXD_INV; if (invert_mask) { mp_printf(print, "|"); } } - if (invert_mask & UART_INVERSE_RXD) { + if (invert_mask & UART_SIGNAL_RXD_INV) { mp_printf(print, "INV_RX"); - invert_mask &= ~UART_INVERSE_RXD; + invert_mask &= ~UART_SIGNAL_RXD_INV; if (invert_mask) { mp_printf(print, "|"); } } - if (invert_mask & UART_INVERSE_RTS) { + if (invert_mask & UART_SIGNAL_RTS_INV) { mp_printf(print, "INV_RTS"); - invert_mask &= ~UART_INVERSE_RTS; + invert_mask &= ~UART_SIGNAL_RTS_INV; if (invert_mask) { mp_printf(print, "|"); } } - if (invert_mask & UART_INVERSE_CTS) { + if (invert_mask & UART_SIGNAL_CTS_INV) { mp_printf(print, "INV_CTS"); } } @@ -380,10 +382,10 @@ STATIC const mp_rom_map_elem_t machine_uart_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&mp_stream_write_obj) }, { MP_ROM_QSTR(MP_QSTR_sendbreak), MP_ROM_PTR(&machine_uart_sendbreak_obj) }, - { MP_ROM_QSTR(MP_QSTR_INV_TX), MP_ROM_INT(UART_INVERSE_TXD) }, - { MP_ROM_QSTR(MP_QSTR_INV_RX), MP_ROM_INT(UART_INVERSE_RXD) }, - { MP_ROM_QSTR(MP_QSTR_INV_RTS), MP_ROM_INT(UART_INVERSE_RTS) }, - { MP_ROM_QSTR(MP_QSTR_INV_CTS), MP_ROM_INT(UART_INVERSE_CTS) }, + { MP_ROM_QSTR(MP_QSTR_INV_TX), MP_ROM_INT(UART_SIGNAL_TXD_INV) }, + { MP_ROM_QSTR(MP_QSTR_INV_RX), MP_ROM_INT(UART_SIGNAL_RXD_INV) }, + { MP_ROM_QSTR(MP_QSTR_INV_RTS), MP_ROM_INT(UART_SIGNAL_RTS_INV) }, + { MP_ROM_QSTR(MP_QSTR_INV_CTS), MP_ROM_INT(UART_SIGNAL_CTS_INV) }, }; STATIC MP_DEFINE_CONST_DICT(machine_uart_locals_dict, machine_uart_locals_dict_table); diff --git a/ports/esp32/modnetwork.c b/ports/esp32/modnetwork.c index 44263350409fc..d91fc936a83b3 100644 --- a/ports/esp32/modnetwork.c +++ b/ports/esp32/modnetwork.c @@ -45,7 +45,6 @@ #include "esp_wifi.h" #include "esp_log.h" #include "lwip/dns.h" -#include "tcpip_adapter.h" #include "mdns.h" #if !MICROPY_ESP_IDF_4 @@ -491,7 +490,7 @@ STATIC mp_obj_t esp_ifconfig(size_t n_args, const mp_obj_t *args) { tcpip_adapter_ip_info_t info; tcpip_adapter_dns_info_t dns_info; tcpip_adapter_get_ip_info(self->if_id, &info); - tcpip_adapter_get_dns_info(self->if_id, TCPIP_ADAPTER_DNS_MAIN, &dns_info); + tcpip_adapter_get_dns_info(self->if_id, ESP_NETIF_DNS_MAIN, &dns_info); if (n_args == 1) { // get mp_obj_t tuple[4] = { @@ -526,14 +525,14 @@ STATIC mp_obj_t esp_ifconfig(size_t n_args, const mp_obj_t *args) { _esp_exceptions(e); } ESP_EXCEPTIONS(tcpip_adapter_set_ip_info(self->if_id, &info)); - ESP_EXCEPTIONS(tcpip_adapter_set_dns_info(self->if_id, TCPIP_ADAPTER_DNS_MAIN, &dns_info)); + ESP_EXCEPTIONS(tcpip_adapter_set_dns_info(self->if_id, ESP_NETIF_DNS_MAIN, &dns_info)); } else if (self->if_id == WIFI_IF_AP) { esp_err_t e = tcpip_adapter_dhcps_stop(WIFI_IF_AP); if (e != ESP_OK && e != ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPPED) { _esp_exceptions(e); } ESP_EXCEPTIONS(tcpip_adapter_set_ip_info(WIFI_IF_AP, &info)); - ESP_EXCEPTIONS(tcpip_adapter_set_dns_info(WIFI_IF_AP, TCPIP_ADAPTER_DNS_MAIN, &dns_info)); + ESP_EXCEPTIONS(tcpip_adapter_set_dns_info(WIFI_IF_AP, ESP_NETIF_DNS_MAIN, &dns_info)); ESP_EXCEPTIONS(tcpip_adapter_dhcps_start(WIFI_IF_AP)); } } else { diff --git a/ports/esp32/modsocket.c b/ports/esp32/modsocket.c index 85433e575fc51..5647559a67230 100644 --- a/ports/esp32/modsocket.c +++ b/ports/esp32/modsocket.c @@ -46,7 +46,6 @@ #include "py/stream.h" #include "py/mperrno.h" #include "lib/netutils/netutils.h" -#include "tcpip_adapter.h" #include "mdns.h" #include "modnetwork.h" @@ -181,7 +180,7 @@ static int _socket_getaddrinfo3(const char *nodename, const char *servname, memcpy(nodename_no_local, nodename, nodename_len - local_len); nodename_no_local[nodename_len - local_len] = '\0'; - struct ip4_addr addr = {0}; + esp_ip4_addr_t addr = {0}; esp_err_t err = mdns_query_a(nodename_no_local, MDNS_QUERY_TIMEOUT_MS, &addr); if (err != ESP_OK) { if (err == ESP_ERR_NOT_FOUND) { diff --git a/ports/esp32/uart.c b/ports/esp32/uart.c index 381be7f4f016c..c837c8dcfe6a4 100644 --- a/ports/esp32/uart.c +++ b/ports/esp32/uart.c @@ -29,6 +29,7 @@ #include #include "driver/uart.h" +#include "soc/uart_periph.h" #include "py/runtime.h" #include "py/mphal.h" From 35f6c3db16ded65223f025a984c926590cc0af32 Mon Sep 17 00:00:00 2001 From: Damien George Date: Wed, 23 Sep 2020 15:55:55 +1000 Subject: [PATCH 03/10] esp32: Add support to build using IDF with cmake. Signed-off-by: Damien George --- ports/esp32/CMakeLists.txt | 5 ++ ports/esp32/boards/sdkconfig.base | 5 ++ ports/esp32/main/CMakeLists.txt | 123 ++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 ports/esp32/CMakeLists.txt create mode 100644 ports/esp32/main/CMakeLists.txt diff --git a/ports/esp32/CMakeLists.txt b/ports/esp32/CMakeLists.txt new file mode 100644 index 0000000000000..1900313742116 --- /dev/null +++ b/ports/esp32/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.5) +set(SDKCONFIG ${CMAKE_BINARY_DIR}/sdkconfig) +set(SDKCONFIG_DEFAULTS boards/sdkconfig.base) +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(micropython) diff --git a/ports/esp32/boards/sdkconfig.base b/ports/esp32/boards/sdkconfig.base index 67e2424a1246d..de6e42c8f3139 100644 --- a/ports/esp32/boards/sdkconfig.base +++ b/ports/esp32/boards/sdkconfig.base @@ -51,3 +51,8 @@ CONFIG_PPP_SUPPORT=y CONFIG_PPP_PAP_SUPPORT=y CONFIG_PPP_CHAP_SUPPORT=y CONFIG_ULP_COPROC_ENABLED=y + +# For cmake build +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" diff --git a/ports/esp32/main/CMakeLists.txt b/ports/esp32/main/CMakeLists.txt new file mode 100644 index 0000000000000..4e8b9c739655f --- /dev/null +++ b/ports/esp32/main/CMakeLists.txt @@ -0,0 +1,123 @@ +# Set location of base MicroPython directory, and this port's directory. +get_filename_component(MPY_DIR ${PROJECT_DIR}/../.. ABSOLUTE) +set(MPY_PORT_DIR ${PROJECT_DIR}) +set(MPY_BOARD_DIR ${PROJECT_DIR}/boards/GENERIC) + +# Include core source components. +include(${MPY_DIR}/py/py.cmake) +include(${MPY_DIR}/extmod/extmod.cmake) + +set(SOURCE_EXTMOD_EXTRA + ${MPY_DIR}/extmod/modonewire.c +) + +set(SOURCE_LIB + ${MPY_DIR}/lib/littlefs/lfs1.c + ${MPY_DIR}/lib/littlefs/lfs1_util.c + ${MPY_DIR}/lib/littlefs/lfs2.c + ${MPY_DIR}/lib/littlefs/lfs2_util.c + ${MPY_DIR}/lib/mbedtls_errors/mp_mbedtls_errors.c + ${MPY_DIR}/lib/mp-readline/readline.c + ${MPY_DIR}/lib/netutils/netutils.c + ${MPY_DIR}/lib/oofatfs/ff.c + ${MPY_DIR}/lib/oofatfs/ffunicode.c + ${MPY_DIR}/lib/timeutils/timeutils.c + ${MPY_DIR}/lib/utils/interrupt_char.c + ${MPY_DIR}/lib/utils/stdout_helpers.c + ${MPY_DIR}/lib/utils/sys_stdio_mphal.c + ${MPY_DIR}/lib/utils/pyexec.c +) + +set(SOURCE_DRIVERS + ${MPY_DIR}/drivers/bus/softspi.c + ${MPY_DIR}/drivers/dht/dht.c +) + +set(SOURCE_PORT + ${PROJECT_DIR}/main.c + ${PROJECT_DIR}/uart.c + ${PROJECT_DIR}/gccollect.c + ${PROJECT_DIR}/mphalport.c + ${PROJECT_DIR}/fatfs_port.c + ${PROJECT_DIR}/help.c + ${PROJECT_DIR}/modutime.c + ${PROJECT_DIR}/moduos.c + ${PROJECT_DIR}/machine_timer.c + ${PROJECT_DIR}/machine_pin.c + ${PROJECT_DIR}/machine_touchpad.c + ${PROJECT_DIR}/machine_adc.c + ${PROJECT_DIR}/machine_dac.c + ${PROJECT_DIR}/machine_i2c.c + ${PROJECT_DIR}/machine_pwm.c + ${PROJECT_DIR}/machine_uart.c + ${PROJECT_DIR}/modmachine.c + ${PROJECT_DIR}/modnetwork.c + ${PROJECT_DIR}/network_lan.c + ${PROJECT_DIR}/network_ppp.c + ${PROJECT_DIR}/mpnimbleport.c + ${PROJECT_DIR}/modsocket.c + ${PROJECT_DIR}/modesp.c + ${PROJECT_DIR}/esp32_partition.c + ${PROJECT_DIR}/esp32_rmt.c + ${PROJECT_DIR}/esp32_ulp.c + ${PROJECT_DIR}/modesp32.c + ${PROJECT_DIR}/espneopixel.c + ${PROJECT_DIR}/machine_hw_spi.c + ${PROJECT_DIR}/machine_wdt.c + ${PROJECT_DIR}/mpthreadport.c + ${PROJECT_DIR}/machine_rtc.c + ${PROJECT_DIR}/machine_sdcard.c +) + +set(SOURCE_QSTR + ${SOURCE_PY} + ${SOURCE_EXTMOD} + ${SOURCE_EXTMOD_EXTRA} + ${SOURCE_LIB} + ${SOURCE_PORT} +) + +# Register the main IDF component. +idf_component_register( + SRCS + ${SOURCE_PY} + ${SOURCE_EXTMOD} + ${SOURCE_EXTMOD_EXTRA} + ${SOURCE_LIB} + ${SOURCE_DRIVERS} + ${SOURCE_PORT} + INCLUDE_DIRS + ${MPY_DIR} + ${MPY_PORT_DIR} + ${MPY_BOARD_DIR} + ${CMAKE_BINARY_DIR} + REQUIRES + soc nvs_flash ulp sdmmc mdns app_update lwip +) + +# Define mpy-cross flags and frozen manifest +set(MPY_CROSS_FLAGS -march=xtensawin) +set(FROZEN_MANIFEST ${PROJECT_DIR}/boards/manifest.py) + +# Include the main MicroPython cmake rules. +set(MICROPYTHON_TARGET ${COMPONENT_TARGET}) +include(${MPY_DIR}/py/mkrules.cmake) + +# Set compile options for this port. +target_compile_options(${MICROPYTHON_TARGET} PUBLIC + -DMICROPY_ESP_IDF_4=1 + -DMICROPY_VFS_FAT=1 + -DMICROPY_VFS_LFS2=1 + -DFFCONF_H=\"${OOFATFS_DIR}/ffconf.h\" + -DLFS1_NO_MALLOC -DLFS1_NO_DEBUG -DLFS1_NO_WARN -DLFS1_NO_ERROR -DLFS1_NO_ASSERT + -DLFS2_NO_MALLOC -DLFS2_NO_DEBUG -DLFS2_NO_WARN -DLFS2_NO_ERROR -DLFS2_NO_ASSERT +) + +# Disable some warnings to keep the build output clean. +target_compile_options(${MICROPYTHON_TARGET} PUBLIC + -Wno-clobbered + -Wno-deprecated-declarations + -Wno-implicit-fallthrough + -Wno-missing-field-initializers + -Wno-override-init +) From 6f5e02639da75f6e328084b69bcd28b352c98b31 Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 6 Oct 2020 18:06:09 +1100 Subject: [PATCH 04/10] esp32/esp32_rmt: Don't do unnecessary check for unsigned less than zero. --- ports/esp32/esp32_rmt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/esp32/esp32_rmt.c b/ports/esp32/esp32_rmt.c index 7971ca5d1c5af..b547af5539f34 100644 --- a/ports/esp32/esp32_rmt.c +++ b/ports/esp32/esp32_rmt.c @@ -209,7 +209,7 @@ STATIC mp_obj_t esp32_rmt_write_pulses(size_t n_args, const mp_obj_t *pos_args, mp_obj_t pulses = args[1].u_obj; mp_uint_t start = args[2].u_int; - if (start < 0 || start > 1) { + if (start > 1) { mp_raise_ValueError(MP_ERROR_TEXT("start must be 0 or 1")); } From 5ea9433c7003de1f6238cac73f242c6e63e68c9f Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 6 Oct 2020 18:14:07 +1100 Subject: [PATCH 05/10] travis: Update esp32 CI to build with cmake. Signed-off-by: Damien George --- .travis.yml | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/.travis.yml b/.travis.yml index c9fcc21336efd..049d69e4e2ff1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -268,39 +268,23 @@ jobs: - make ${MAKEOPTS} -C mpy-cross - make ${MAKEOPTS} -C ports/windows CROSS_COMPILE=i686-w64-mingw32- - # esp32 w/ESP-IDFv3 port + # esp32 port - stage: test - name: "esp32 ESP-IDFv3 port build" + name: "esp32 port build" install: - - sudo apt-get install python3-pip - - sudo pip3 install 'pyparsing<2.4' - - curl -L https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz | tar zxf - + - curl -L https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp-2020r2-linux-amd64.tar.gz | tar zxf - - export PATH=$(pwd)/xtensa-esp32-elf/bin:$PATH - git clone https://github.com/espressif/esp-idf.git - export IDF_PATH=$(pwd)/esp-idf - script: - - make ${MAKEOPTS} -C mpy-cross - - git -C esp-idf checkout $(grep "ESPIDF_SUPHASH_V3 :=" ports/esp32/Makefile | cut -d " " -f 3) - - git -C esp-idf submodule update --init components/json/cJSON components/esp32/lib components/esptool_py/esptool components/expat/expat components/lwip/lwip components/mbedtls/mbedtls components/micro-ecc/micro-ecc components/nghttp/nghttp2 components/nimble components/bt - - make ${MAKEOPTS} -C ports/esp32 submodules - - make ${MAKEOPTS} -C ports/esp32 - - # esp32 w/ESP-IDFv4 port - - stage: test - name: "esp32 ESP-IDFv4 port build" - install: - sudo apt-get install python3-pip - - sudo pip3 install 'pyparsing<2.4' - - curl -L https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz | tar zxf - - - export PATH=$(pwd)/xtensa-esp32-elf/bin:$PATH - - git clone https://github.com/espressif/esp-idf.git - - export IDF_PATH=$(pwd)/esp-idf + - sudo pip3 install -r $IDF_PATH/requirementns.txt script: - make ${MAKEOPTS} -C mpy-cross - - git -C esp-idf checkout $(grep "ESPIDF_SUPHASH_V4 :=" ports/esp32/Makefile | cut -d " " -f 3) + - git -C esp-idf checkout v4.1 - git -C esp-idf submodule update --init components/bt/controller/lib components/bt/host/nimble/nimble components/esp_wifi/lib_esp32 components/esptool_py/esptool components/lwip/lwip components/mbedtls/mbedtls - make ${MAKEOPTS} -C ports/esp32 submodules - - make ${MAKEOPTS} -C ports/esp32 + - cmake -S ports/esp32 -B build + - make ${MAKEOPTS} -C build # esp8266 port - stage: test From 9d6124519a60535ee52aef458002d7736d623434 Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 6 Oct 2020 18:40:56 +1100 Subject: [PATCH 06/10] travis: Reorder esp32 install rules. Signed-off-by: Damien George --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 049d69e4e2ff1..eec69515be2e8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -275,13 +275,13 @@ jobs: - curl -L https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp-2020r2-linux-amd64.tar.gz | tar zxf - - export PATH=$(pwd)/xtensa-esp32-elf/bin:$PATH - git clone https://github.com/espressif/esp-idf.git + - git -C esp-idf checkout v4.1 + - git -C esp-idf submodule update --init components/bt/controller/lib components/bt/host/nimble/nimble components/esp_wifi/lib_esp32 components/esptool_py/esptool components/lwip/lwip components/mbedtls/mbedtls - export IDF_PATH=$(pwd)/esp-idf - sudo apt-get install python3-pip - - sudo pip3 install -r $IDF_PATH/requirementns.txt + - sudo pip3 install -r $IDF_PATH/requirements.txt script: - make ${MAKEOPTS} -C mpy-cross - - git -C esp-idf checkout v4.1 - - git -C esp-idf submodule update --init components/bt/controller/lib components/bt/host/nimble/nimble components/esp_wifi/lib_esp32 components/esptool_py/esptool components/lwip/lwip components/mbedtls/mbedtls - make ${MAKEOPTS} -C ports/esp32 submodules - cmake -S ports/esp32 -B build - make ${MAKEOPTS} -C build From c38f62709a81aed1586dbb2ba1d47f4621c1d3dc Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 6 Oct 2020 18:52:25 +1100 Subject: [PATCH 07/10] travis: Checkout all submodules of esp-idf. Signed-off-by: Damien George --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index eec69515be2e8..667db69610430 100644 --- a/.travis.yml +++ b/.travis.yml @@ -276,7 +276,7 @@ jobs: - export PATH=$(pwd)/xtensa-esp32-elf/bin:$PATH - git clone https://github.com/espressif/esp-idf.git - git -C esp-idf checkout v4.1 - - git -C esp-idf submodule update --init components/bt/controller/lib components/bt/host/nimble/nimble components/esp_wifi/lib_esp32 components/esptool_py/esptool components/lwip/lwip components/mbedtls/mbedtls + - git -C esp-idf submodule update --init - export IDF_PATH=$(pwd)/esp-idf - sudo apt-get install python3-pip - sudo pip3 install -r $IDF_PATH/requirements.txt From bf2ee6c40e6dc7f9c446e37845a2259b460a3ee0 Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 6 Oct 2020 20:52:04 +1100 Subject: [PATCH 08/10] travis: Install setuptools for idf. Signed-off-by: Damien George --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 667db69610430..8a363b86a50b7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -279,6 +279,7 @@ jobs: - git -C esp-idf submodule update --init - export IDF_PATH=$(pwd)/esp-idf - sudo apt-get install python3-pip + - sudo pip3 install setuptools - sudo pip3 install -r $IDF_PATH/requirements.txt script: - make ${MAKEOPTS} -C mpy-cross From b6b68a33d7bbbfd51ce47ec9e9d7012b1040982a Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 6 Oct 2020 22:36:11 +1100 Subject: [PATCH 09/10] travis: Print cmake version and don't use -S or -B options. Signed-off-by: Damien George --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8a363b86a50b7..f5817b56787bd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -272,6 +272,7 @@ jobs: - stage: test name: "esp32 port build" install: + - cmake --version - curl -L https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp-2020r2-linux-amd64.tar.gz | tar zxf - - export PATH=$(pwd)/xtensa-esp32-elf/bin:$PATH - git clone https://github.com/espressif/esp-idf.git @@ -284,7 +285,7 @@ jobs: script: - make ${MAKEOPTS} -C mpy-cross - make ${MAKEOPTS} -C ports/esp32 submodules - - cmake -S ports/esp32 -B build + - (mkdir build && cd build && cmake ../ports/esp32) - make ${MAKEOPTS} -C build # esp8266 port From cf4a64b2a783d2ab6fadf61cb2c0ca70859cfc74 Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 6 Oct 2020 22:59:31 +1100 Subject: [PATCH 10/10] travis: Explicitly use PYTHON=python3 for cmake build. Signed-off-by: Damien George --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f5817b56787bd..ebb15eace5254 100644 --- a/.travis.yml +++ b/.travis.yml @@ -285,7 +285,7 @@ jobs: script: - make ${MAKEOPTS} -C mpy-cross - make ${MAKEOPTS} -C ports/esp32 submodules - - (mkdir build && cd build && cmake ../ports/esp32) + - (mkdir build && cd build && cmake -D PYTHON=python3 ../ports/esp32) - make ${MAKEOPTS} -C build # esp8266 port pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy