summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2024-02-19tools/manifestfile.py: Add --unix-ffi option.Angus Gratton
Follow up to 35dd959133fb233d75e9b3cddbf98b2ed01c6594, allows explicitly adding the unix-ffi library path from the command line. This option is needed when building unix-ffi manifests in micropython-lib CI. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-16py/emitglue: Include fun_data_len in mp_raw_code_t only when saving.Damien George
Reduces the size of mp_raw_code_t in the case when MICROPY_DEBUG_PRINTERS is enabled. Signed-off-by: Damien George <damien@micropython.org>
2024-02-16tests/ports/unix: Add coverage test for frozen functions and generators.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-16tools/mpy-tool.py: Skip generating frozen mp_raw_code_t when possible.Damien George
This reduces frozen code size by using the bytecode directly as the `mp_proto_fun_t`. Signed-off-by: Damien George <damien@micropython.org>
2024-02-16py/emitglue: Introduce mp_proto_fun_t as a more general mp_raw_code_t.Damien George
Allows bytecode itself to be used instead of an mp_raw_code_t in the simple and common cases of a bytecode function without any children. This can be used to further reduce frozen code size, and has the potential to optimise other areas like importing. Signed-off-by: Damien George <damien@micropython.org>
2024-02-16py/emitglue: Simplify mp_raw_code_t's kind and scope_flags members.Damien George
To simplify their access and reduce code size. The `scope_flags` member is only ever used to determine if a function is a generator or not, so make it reflect that fact as a bool type. Signed-off-by: Damien George <damien@micropython.org>
2024-02-16py/emitglue: Provide a truncated mp_raw_code_t for non-asm code.Damien George
The `asm_n_pos_args` and `asm_type_sig` members of `mp_raw_code_t` are only used for raw codes of type MP_CODE_NATIVE_ASM, which are rare, for example in frozen code. So using a truncated `mp_raw_code_t` in these cases helps to reduce frozen code size on targets that have MICROPY_EMIT_INLINE_ASM enabled. With this, change in firmware size of RPI_PICO builds is -648. Signed-off-by: Damien George <damien@micropython.org>
2024-02-16py/emitglue: Reorder and resize members of mp_raw_code_t.Damien George
The mp_raw_code_t struct has been reordered and some members resized. The `n_pos_args` member is renamed to `asm_n_pos_args`, and `type_sig` renamed to `asm_type_sig` to indicate that these are used only for the inline-asm emitters. These two members are also grouped together in the struct. The justifications for resizing the members are: - `fun_data_len` can be 32-bits without issue - `n_children` is already limited to 16-bits by `mp_emit_common_t::ct_cur_child` - `scope_flags` is already limited to 16-bits by `scope_t::scope_flags` - `prelude_offset` is already limited to 16-bits by the argument to `mp_emit_glue_assign_native()` - it's reasonable to limit the maximim number of inline-asm arguments to 12 (24 bits for `asm_type_sig` divided by 2) This change helps to reduce frozen code size (and in some cases RAM usage) in the following cases: - 64-bit targets - builds with MICROPY_PY_SYS_SETTRACE enabled - builds with MICROPY_EMIT_MACHINE_CODE enabled but MICROPY_EMIT_INLINE_ASM disabled With this change, unix 64-bit builds are -4080 bytes in size. Bare-metal ports like rp2 are unchanged (because mp_raw_code_t is still 32 bytes on those 32-bit targets). Signed-off-by: Damien George <damien@micropython.org>
2024-02-16extmod/network_wiznet5k: Adjust IP types for IPv6.Felix Dörre
Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-02-16extmod/modlwip: Support IPv6.Felix Dörre
With these changes IPv6 works on the rp2 port (and possibly others that use the lwIP socket implementation). Things that have been tested and work: - Neighbour solicitation for v6 link local address. - Ping of v6 link-local address. - Receiving a SLAAC address via router advertisement. - Ping a v6 address allocated via SLAAC. - Perform an outgoing connection to a routed v6-address (via default gateway). - Create a listening IPv6 wildcard socked bound to ::, and trying to access it via link-local, SLAAC, and IPv4 (to ensure the dual-stack binding works). Things that could be improved: - socket.socket().getaddrinfo only returns the v4 address. It could also return v6 addresses (getaddrinfo is actively programmed to only return a single address, and this is the v4-address by default, with fallback to the v6 address if both are enabled). Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-02-16tests/multi_bluetooth/ble_irq_calls.py: Enhance test to test recursion.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-16esp32: Increase NimBLE task stack size and overflow detection headroom.Damien George
The Python BLE IRQ handler will most likely run on the NimBLE task, so its C stack must be large enough to accommodate reasonably complicated Python code (eg a few call depths). So increase this stack size. Also increase the headroom from 1024 to 2048 bytes. This is needed because (1) the esp32 architecture uses a fair amount of stack in general; and (2) by the time execution gets to setting the Python stack top via `mp_stack_set_top()` in this interlock code, about 600 bytes of stack are already used, which reduces the amount available for Python. Fixes issue #12349. Signed-off-by: Damien George <damien@micropython.org>
2024-02-15unix: Don't include system headers when features are disabled.YAMAMOTO Takashi
Because the target system may not have these headers at all. Signed-off-by: YAMAMOTO Takashi <yamamoto@midokura.com>
2024-02-15unix/input: Flush the prompt after writing it to stdout.YAMAMOTO Takashi
Depending on your setup, stdout might be buffered/line-buffered. Signed-off-by: YAMAMOTO Takashi <yamamoto@midokura.com>
2024-02-15minimal: Use printf instead of echo -e.YAMAMOTO Takashi
macOS's echo doesn't have -e option. printf is in POSIX and more widely available these days. Signed-off-by: YAMAMOTO Takashi <yamamoto@midokura.com>
2024-02-15minimal: Allow compiling on macOS.YAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto@midokura.com>
2024-02-15esp32/mpnimbleport: Release the GIL while doing NimBLE port deinit.Damien George
In case callbacks must run (eg a disconnect event happens during the deinit) and the GIL must be obtained to run the callback. Fixes part of issue #12349. Signed-off-by: Damien George <damien@micropython.org>
2024-02-15esp32/network_ppp: Make PPP support optional.Trent Piepho
PPP is not that commonly used, let it be turned off in the board config to save space. It is still on by default. On an basic ESP32-S3 build, turning off PPP with LWIP still on saves ~35 kB of codend 4 kB of data. text data bss dec hex filename 1321257 304296 2941433 4566986 45afca before-ppp-off.elf 1285101 299920 2810305 4395326 43113e after-ppp-off.elf ------------------------------- -36156 -4376 -56 Note that the BSS segment size includes all NOBITS sections in ELF file. Some of these are aligned to 64kB chunk sized dummy blocks, I think for alignment to MMU boundaries, and these went down by 1 block each, so 128 kiB of BSS is not really part of the binary size reduction. Signed-off-by: Trent Piepho <tpiepho@gmail.com>
2024-02-15ports: On cold boot, enable USB after boot.py completes.Angus Gratton
For mimxrt, nrf, renesas-ra, rp2 and samd ports, this commit implements similar behaviour to the stm32 port, where USB is only brought up after boot.py completes execution. Currently this doesn't add any useful functionality (and may break workflows that depend on USB-CDC being live in boot.py), however it's a precondition for more usable workflows with USB devices defined in Python (allows setting up USB interfaces in boot.py before the device enumerates for the first time). This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-15shared/timeutils: Remove useless void-return.Yoctopuce
The C99 standard states: 6.8.6.4 The return statement Constraints A return statement with an expression shall not appear in a function whose return type is void. A return statement without an expression shall only appear in a function whose return type is void. And when `-pedantic` is enabled the compiler gives an error. Signed-off-by: Yoctopuce <dev@yoctopuce.com>
2024-02-15extmod/modrandom: Add integer type casts where appropriate.Yoctopuce
To prevent compiler warnings when `mp_int_t` is 64-bits. Signed-off-by: Yoctopuce <dev@yoctopuce.com>
2024-02-15embed: Improve stack top estimation.YAMAMOTO Takashi
Obtaining the stack-top via a few function calls may yield a pointer which is too deep within the stack. So require the user to obtain it from a higher level (or via some other means). Fixes issue #11781. Signed-off-by: YAMAMOTO Takashi <yamamoto@midokura.com>
2024-02-15mimxrt: Fix header include guard names.iabdalkader
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-02-12tools/mpy-tool.py: Fix static qstrs when freezing without qstr header.Damien George
It's rare to freeze .mpy files without specifying a qstr header from a firmware build, but it can be useful for testing, eg `mpy-tool.py -f test.mpy`. Fix this case so static qstrs are properly excluded from the frozen qstr list. Signed-off-by: Damien George <damien@micropython.org>
2024-02-12extmod/btstack: Reset pending_value_handle before calling read-done cb.Damien George
Similar to the previous commit but for MP_BLUETOOTH_IRQ_GATTC_READ_DONE: the pending_value_handle needs to be reset before calling mp_bluetooth_gattc_on_read_write_status(), which will call the Python IRQ handler, which may in turn call back into BTstack to perform an action like a write. In that case the pending_value_handle will need to be available for the write/read/etc to proceed. Fixes issue #13634. Signed-off-by: Damien George <damien@micropython.org>
2024-02-09extmod/btstack: Reset pending_value_handle before calling write-done cb.Damien George
The pending_value_handle needs to be freed and reset before calling mp_bluetooth_gattc_on_read_write_status(), which will call the Python IRQ handler, which may in turn call back into BTstack to perform an action like a write. In that case the pending_value_handle will need to be available for the write/read/etc to proceed. Fixes issue #13611. Signed-off-by: Damien George <damien@micropython.org>
2024-02-08unix/variants: Prefer unix-ffi packages when loading the manifest.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-08tools/manifestfile.py: Change library search to use a list of paths.Damien George
This commit changes how library packages are searched for when a manifest file is loaded: there is now simply a list of library paths that is searched in order for the given package. This list defaults to the main directories in micropython-lib, but can be added to -- either appended or prepended -- by using `add_library()`. In particular the way unix-ffi library packages are searched has changed, because the `unix_ffi` argument to `require()` is now removed. Instead, if a build wants to include packages from micropython-lib/unix-ffi, then it must explicitly add this to the list of paths to search using: add_library("unix-ffi", "$(MPY_LIB_DIR)/unix-ffi") Work done in collaboration with Jim Mussared. Signed-off-by: Damien George <damien@micropython.org>
2024-02-07docs/library/sys.rst: Document implementation.version.releaselevel.Jos Verlinde
Signed-off-by: Jos Verlinde <jos_verlinde@hotmail.com>
2024-02-07github/workflows: Standardise formatting of ruff.yml.Angus Gratton
All the other workflow YAML files use vertical whitespace around top-level items. Also remove spurious comment, the features in the linked doc aren't actually used in this workflow (any more?). This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-07github/workflows: Add comments where tool versions need to be in sync.Angus Gratton
This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-07github/workflows: Move codespell to a GitHub workflow, version it.Angus Gratton
Similar to ruff.yaml, it's simpler to run the codespell command directly from a workflow file. And developers can run codespell directly from the command line without the need for options, or just use pre-commit. This commit also applies a specific version to codespell, same as pre-commit (introduced in a166d805f43). This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-07stm32/Makefile: Ignore uninitialised variable warning in H5 HAL SD code.Damien George
This warning appears when using an MCU like H562 that only has one SDMMC. Signed-off-by: Damien George <damien@micropython.org>
2024-02-07stm32/main: Allow disabling MICROPY_PY_MACHINE.Damien George
Disabling this requires also disabling: MICROPY_PY_PYB and MICROPY_PY_STM. Signed-off-by: Damien George <damien@micropython.org>
2024-02-07stm32/spi: Allow disabling MICROPY_PY_MACHINE_SPI.Damien George
This requires that MICROPY_PY_PYB is also disabled. Signed-off-by: Damien George <damien@micropython.org>
2024-02-07stm32/modos: Allow disabling MICROPY_PY_MACHINE_UART.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-07drivers/dht: Only build DHT driver if MICROPY_PY_MACHINE_PULSE enabled.Damien George
Because this driver calls `machine_time_pulse_us()`. Signed-off-by: Damien George <damien@micropython.org>
2024-02-07docs: Use vfs module instead of os.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-07ports: Use vfs module instead of os.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-07tests: Use vfs module instead of os.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-07docs/reference/micropython2_migration.rst: Add info about os and vfs.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-07docs/library: Move vfs functions and classes from os to vfs module docs.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-07extmod/modvfs: Add new "vfs" module with mount/umount and Vfs classes.Damien George
They have been moved from the "os" module. Signed-off-by: Damien George <damien@micropython.org>
2024-02-07extmod/modtls_mbedtls: Implement cert verification callback for mbedtls.Felix Dörre
This is a useful alternative to .getpeercert() when the certificate is not stored to reduce RAM usage. Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-02-07extmod/modtls: Move the native ssl module to tls.Felix Dörre
The current `ssl` module has quite a few differences to the CPython implementation. This change moves the MicroPython variant to a new `tls` module and provides a wrapper module for `ssl` (in micropython-lib). Users who only rely on implemented comparible behavior can continue to use `ssl`, while users that rely on non-compatible behavior should switch to `tls`. Then we can make the facade in `ssl` more strictly adhere to CPython. Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-02-07extmod/modssl_axtls: Add SSLContext.load_cert_chain().Felix Dörre
To match the mbedtls implementation. Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-02-07lib/micropython-lib: Update submodule to latest.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-07github/workflows: Initialise micropython-lib submodule for windows CI.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-07github/workflows: Bump setup-msbuild, setup-python, checkout versions.Damien George
Signed-off-by: Damien George <damien@micropython.org>
2024-02-06github/workflows: Move Windows CI from AppVeyor to GitHub Actions.David Lechner
By moving to GitHub actions, all MicroPython CI builds are now on GitHub actions. This allows faster parallel builds and saves time by not building when no relevant files changed. This reveals a few failing tests, so those are temporarily disabled until they can be fixed. Signed-off-by: David Lechner <david@pybricks.com> Signed-off-by: Damien George <damien@micropython.org>