circuitpython/mpy-cross
Yoctopuce dev 69ead7d98e py/parse: Add support for math module constants and float folding.
Add a new MICROPY_COMP_CONST_FLOAT feature, enabled by in mpy-cross and
when compiling with MICROPY_CONFIG_ROM_LEVEL_CORE_FEATURES.  The new
feature leverages the code of MICROPY_COMP_CONST_FOLDING to support folding
of floating point constants.

If MICROPY_COMP_MODULE_CONST is defined as well, math module constants are
made available at compile time. For example:

    _DEG_TO_GRADIANT = const(math.pi / 180)
    _INVALID_VALUE = const(math.nan)

A few corner cases had to be handled:
- The float const folding code should not fold expressions resulting into
  complex results, as the mpy parser for complex immediates has
  limitations.
- The constant generation code must distinguish between -0.0 and 0.0, which
  are different even if C consider them as ==.

This change removes previous limitations on the use of `const()`
expressions that would result in floating point number, so the test cases
of micropython/const_error have to be updated.

Additional test cases have been added to cover the new repr() code (from a
previous commit).  A few other simple test cases have been added to handle
the use of floats in `const()` expressions, but the float folding code
itself is also tested when running general float test cases, as float
expressions often get resolved at compile-time (with this change).

Signed-off-by: Yoctopuce dev <dev@yoctopuce.com>
2025-08-01 13:35:44 +10:00
..
mpy_cross mpy-cross: Add RISC-V RV32IMC support in MPY files. 2024-06-21 15:06:29 +10:00
gccollect.c all: Update to point to files in new shared/ directory. 2021-07-12 17:08:10 +10:00
main.c mpy-cross/main: Document emit=host option in help. 2025-06-04 12:07:30 +10:00
Makefile extmod: Make extmod.mk self-contained. 2022-10-11 23:31:49 +11:00
mpconfigport.h py/parse: Add support for math module constants and float folding. 2025-08-01 13:35:44 +10:00
mphalport.h mpy-cross: Make build independent of extmod directory. 2018-07-10 14:11:28 +10:00
mpy-cross.vcxproj all: Keep msvc build output in build/ directories. 2022-12-13 17:18:53 +11:00
qstrdefsport.h mpy-cross: Add new component, a cross compiler for MicroPython bytecode. 2016-02-25 10:12:21 +00:00
README.md all: Remove MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE. 2021-09-16 16:04:03 +10:00

MicroPython cross compiler

This directory contains the MicroPython cross compiler, which runs under any Unix-like system and compiles .py scripts into .mpy files.

Build it as usual:

$ make

The compiler is called mpy-cross. Invoke it as:

$ ./mpy-cross foo.py

This will create a file foo.mpy which can then be copied to a place accessible by the target MicroPython runtime (eg onto a pyboard's filesystem), and then imported like any other Python module using import foo.

Different target runtimes may require a different format of the compiled bytecode, and such options can be passed to the cross compiler.

If the Python code contains @native or @viper annotations, then you must specify -march to match the target architecture.

Run ./mpy-cross -h to get a full list of options.

The optimisation level is 0 by default. Optimisation levels are detailed in https://docs.micropython.org/en/latest/library/micropython.html#micropython.opt_level