If a non-string buffer was passed to execfile, then it would be passed as a non-null-terminated char* to mp_lexer_new_from_file. This changes mp_lexer_new_from_file to take a qstr instead (as in almost all cases a qstr will be created from this input anyway to set the `__file__` attribute on the module). This now makes execfile require a string (not generic buffer) argument, which is probably a good fix to make anyway. Fixes issue #12522. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared <firstname.lastname@example.org>
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:
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
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
@viper annotations, then you must
-march to match the target architecture.
./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