micropython/py
Volodymyr Shymanskyy 51976110e2 tools/mpy_ld.py: Allow linking static libraries.
This commit introduces an additional symbol resolution mechanism to the
natmod linking process.  This allows the build scripts to look for required
symbols into selected libraries that are provided by the compiler
installation (libgcc and libm at the moment).

For example, using soft-float code in natmods, whilst technically possible,
was not an easy process and required some additional work to pull it off.
With this addition all the manual (and error-prone) operations have been
automated and folded into `tools/mpy_ld.py`.

Both newlib and picolibc toolchains are supported, albeit the latter may
require a bit of extra configuration depending on the environment the build
process runs on.  Picolibc's soft-float functions aren't in libm - in fact
the shipped libm is nothing but a stub - but they are inside libc.  This is
usually not a problem as these changes cater for that configuration quirk,
but on certain compilers the include paths used to find libraries in may
not be updated to take Picolibc's library directory into account.  The bare
metal RISC-V compiler shipped with the CI OS image (GCC 10.2.0 on Ubuntu
22.04LTS) happens to exhibit this very problem.

To work around that for CI builds, the Picolibc libraries' path is
hardcoded in the Makefile directives used by the linker, but this can be
changed by setting the PICOLIBC_ROOT environment library when building
natmods.

Signed-off-by: Volodymyr Shymanskyy <vshymanskyi@gmail.com>
Co-authored-by: Alessandro Gatti <a.gatti@frob.it>
2025-03-17 13:03:27 +11:00
..
argcheck.c
asmarm.c py/asmarm: Fix halfword loads with larger offsets. 2025-01-16 12:52:32 +11:00
asmarm.h py/asm: Add ASM_NOT_REG and ASM_NEG_REG macros for unary ops. 2024-03-19 10:31:36 +11:00
asmbase.c py/emitndebug: Add native debug emitter. 2024-06-21 16:21:27 +10:00
asmbase.h py/asmrv32: Add RISC-V RV32IMC native code emitter. 2024-06-21 15:06:07 +10:00
asmrv32.c py/emitinlinerv32: Add inline assembler support for RV32. 2025-01-02 11:49:10 +11:00
asmrv32.h py/emitnative: Emit shorter exception handler entry code on RV32. 2025-01-26 23:42:36 +11:00
asmthumb.c py/misc: Move mp_clz and mp_ctz intrinsics into misc.h. 2024-06-24 14:06:54 +10:00
asmthumb.h py/asm: Add ASM_NOT_REG and ASM_NEG_REG macros for unary ops. 2024-03-19 10:31:36 +11:00
asmx64.c py/asm: Add ASM_NOT_REG and ASM_NEG_REG macros for unary ops. 2024-03-19 10:31:36 +11:00
asmx64.h py/asm: Add ASM_NOT_REG and ASM_NEG_REG macros for unary ops. 2024-03-19 10:31:36 +11:00
asmx86.c py/asm: Add ASM_NOT_REG and ASM_NEG_REG macros for unary ops. 2024-03-19 10:31:36 +11:00
asmx86.h py/asm: Add ASM_NOT_REG and ASM_NEG_REG macros for unary ops. 2024-03-19 10:31:36 +11:00
asmxtensa.c py/asmxtensa: Optimise asm_xtensa_mov_reg_i32_optimised() for tiny ints. 2024-03-19 10:31:36 +11:00
asmxtensa.h py/emitnative: Optimise Viper register offset load/stores on Xtensa. 2025-01-26 23:42:36 +11:00
bc0.h
bc.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
bc.h py/emitglue: Include fun_data_len in mp_raw_code_t only when saving. 2024-02-16 14:17:01 +11:00
binary.c all: Use new mp_obj_new_str_from_cstr() function. 2024-07-04 15:55:03 +10:00
binary.h
builtin.h extmod/modmachine: Use sys.exit as implementation of machine.soft_reset. 2024-07-20 12:18:07 +10:00
builtinevex.c py/objcode: Factor code object out into its own file. 2025-02-11 16:42:14 +11:00
builtinhelp.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
builtinimport.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
compile.c py/objcode: Factor code object out into its own file. 2025-02-11 16:42:14 +11:00
compile.h py/objcode: Factor code object out into its own file. 2025-02-11 16:42:14 +11:00
cstack.c py: Add new cstack API for stack checking, with limit margin macro. 2024-08-14 12:55:45 +10:00
cstack.h py: Add new cstack API for stack checking, with limit margin macro. 2024-08-14 12:55:45 +10:00
dynruntime.h py/dynruntime: Export mp_load_method_maybe and mp_arg_parse_all* funcs. 2024-05-24 13:50:57 +10:00
dynruntime.mk tools/mpy_ld.py: Allow linking static libraries. 2025-03-17 13:03:27 +11:00
emit.h py/emitinlinerv32: Add inline assembler support for RV32. 2025-01-02 11:49:10 +11:00
emitbc.c py: Remove 5 TODOs in emitbc, objrange and repl. 2024-07-18 12:35:42 +10:00
emitcommon.c
emitglue.c py/emitglue: Fix clear cache builtin warning on Clang for AArch32. 2024-12-10 12:04:14 +11:00
emitglue.h py/emitglue: Add explicit cast of proto_fun to uint8_t pointer. 2024-03-04 10:27:07 +11:00
emitinlinerv32.c py/emitinlinerv32: Reduce the footprint of compiled code. 2025-02-27 18:42:28 +01:00
emitinlinethumb.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
emitinlinextensa.c py/emitinlinextensa: Simplify register name lookup. 2025-02-28 13:21:44 +11:00
emitnarm.c
emitnative.c py/emitnative: Load and store words just once for Viper code. 2025-02-07 17:45:10 +11:00
emitndebug.c py/emitndebug: Add native debug emitter. 2024-06-21 16:21:27 +10:00
emitnrv32.c py/asmrv32: Add RISC-V RV32IMC native code emitter. 2024-06-21 15:06:07 +10:00
emitnthumb.c
emitnx64.c
emitnx86.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
emitnxtensa.c
emitnxtensawin.c
formatfloat.c all: Fix various spelling mistakes found by codespell 2.2.6. 2023-10-03 11:24:50 +11:00
formatfloat.h
frozenmod.c
frozenmod.h
gc.c py/gc: Reorder static functions for clarity. 2025-02-03 15:02:02 +11:00
gc.h py/gc: Add "max new split" value in result of gc.mem_free(). 2023-09-15 12:19:13 +10:00
grammar.h
lexer.c py/lexer: Add static assert that token enum values all fit in a byte. 2024-07-18 12:44:44 +10:00
lexer.h py/lexer: Add static assert that token enum values all fit in a byte. 2024-07-18 12:44:44 +10:00
make_root_pointers.py
makecompresseddata.py
makemoduledefs.py py/makemoduledefs.py: Automatically declare delegation attr functions. 2023-06-14 19:03:46 +10:00
makeqstrdata.py py/makeqstrdata.py: Implement MicroPython compatibility. 2025-03-05 16:00:32 +11:00
makeqstrdefs.py py/makeqstrdefs.py: Stop generating temporary intermediate file. 2023-12-14 22:55:08 -08:00
makeversionhdr.py py/makeversionhdr.py: Reinstate MICROPY_GIT_HASH in mpversion.h. 2024-02-19 23:36:25 +11:00
malloc.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
map.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
misc.h py/misc: Add a popcount(uint32_t) implementation. 2025-01-01 10:44:53 +01:00
mkenv.mk esp32: Pass V=1 or BUILD_VERBOSE through to idf.py when building. 2024-12-10 11:28:38 +11:00
mkrules.cmake py/modsys: Add sys.implementation._build entry. 2025-03-05 12:23:40 +11:00
mkrules.mk py/modsys: Add sys.implementation._build entry. 2025-03-05 12:23:40 +11:00
modarray.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
modbuiltins.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
modcmath.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
modcollections.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
moderrno.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
modgc.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
modio.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
modmath.c py/modmath: Add option to work around -inf bug in a port's tgamma. 2024-08-07 14:10:46 +10:00
modmicropython.c py/gc: Allow gc_free from inside a gc_sweep finalizer. 2025-02-03 15:02:02 +11:00
modstruct.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
modsys.c py/modsys: Add sys.implementation._build entry. 2025-03-05 12:23:40 +11:00
modthread.c py: Add new cstack API for stack checking, with limit margin macro. 2024-08-14 12:55:45 +10:00
mpconfig.h extmod/modvfs: Add vfs.rom_ioctl function and its ioctl constants. 2025-03-06 12:52:35 +11:00
mperrno.h all: Rename UMODULE to MODULE in preprocessor/Makefile vars. 2023-06-08 17:54:11 +10:00
mphal.h ports: Fix sys.stdout.buffer.write() return value. 2023-12-22 10:32:46 +11:00
mpprint.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
mpprint.h
mpstate.c
mpstate.h py: Add optional support for recursive mutexes, use for gc mutex. 2025-02-03 15:02:02 +11:00
mpthread.h py: Add optional support for recursive mutexes, use for gc mutex. 2025-02-03 15:02:02 +11:00
mpz.c py/mpz: Skip separators when running out of digits to print. 2024-09-26 23:39:06 +10:00
mpz.h py/objint: Fix int.to_bytes() buffer size checks. 2024-06-24 14:07:00 +10:00
nativeglue.c py/dynruntime: Export mp_load_method_maybe and mp_arg_parse_all* funcs. 2024-05-24 13:50:57 +10:00
nativeglue.h py/dynruntime: Export mp_load_method_maybe and mp_arg_parse_all* funcs. 2024-05-24 13:50:57 +10:00
nlr.c
nlr.h py/nlrrv64: Add RISC-V RV64I NLR implementation. 2024-10-03 12:06:19 +10:00
nlraarch64.c py/nlr: Add "memory" to asm clobbers list in nlr_jump. 2024-03-25 11:52:26 +11:00
nlrmips.c py/nlr: Add "memory" to asm clobbers list in nlr_jump. 2024-03-25 11:52:26 +11:00
nlrpowerpc.c py/nlr: Add "memory" to asm clobbers list in nlr_jump. 2024-03-25 11:52:26 +11:00
nlrrv32.c py/nlrrv32: Add RISC-V RV32I NLR implementation. 2024-06-06 11:56:58 +10:00
nlrrv64.c py/nlrrv64: Add RISC-V RV64I NLR implementation. 2024-10-03 12:06:19 +10:00
nlrsetjmp.c
nlrthumb.c py/nlrthumb: Make non-Thumb2 long-jump workaround opt-in. 2024-04-25 16:06:28 +10:00
nlrx64.c py/nlr: Add "memory" to asm clobbers list in nlr_jump. 2024-03-25 11:52:26 +11:00
nlrx86.c py/nlr: Add "memory" to asm clobbers list in nlr_jump. 2024-03-25 11:52:26 +11:00
nlrxtensa.c py/nlr: Add "memory" to asm clobbers list in nlr_jump. 2024-03-25 11:52:26 +11:00
obj.c py: Add new cstack API for stack checking, with limit margin macro. 2024-08-14 12:55:45 +10:00
obj.h py/objcode: Factor code object out into its own file. 2025-02-11 16:42:14 +11:00
objarray.c py/objarray: Fix buffer overflow in case of memory allocation failure. 2024-06-26 14:12:57 +10:00
objarray.h py/objarray: Add MP_DEFINE_MEMORYVIEW_OBJ convenience macro. 2025-03-06 12:52:35 +11:00
objattrtuple.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objbool.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objboundmeth.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objcell.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objclosure.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objcode.c py/objcode: Factor code object out into its own file. 2025-02-11 16:42:14 +11:00
objcode.h py/objcode: Factor code object out into its own file. 2025-02-11 16:42:14 +11:00
objcomplex.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objdeque.c py/objdeque: Fix buffer overflow in deque_subscr. 2024-11-04 11:21:56 +11:00
objdict.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objenumerate.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objexcept.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objexcept.h
objfilter.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objfloat.c py/objfloat: Workaround non-constant NAN definition on Windows MSVC. 2024-11-28 23:11:24 +11:00
objfun.c py/objfun: Implement function.__code__ and function constructor. 2025-02-11 16:51:50 +11:00
objfun.h py/objfun: Fix C++ compatibility with casting in inline functions. 2024-04-22 10:34:01 +10:00
objgenerator.c py: Add new cstack API for stack checking, with limit margin macro. 2024-08-14 12:55:45 +10:00
objgenerator.h
objgetitemiter.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objint_longlong.c py/objint: Try to convert big-int back to small-int after binary op. 2024-07-01 13:52:59 +10:00
objint_mpz.c py/objint: Try to convert big-int back to small-int after binary op. 2024-07-01 13:52:59 +10:00
objint.c py/parsenum: Throw an exception for invalid int literals like "01". 2025-01-26 22:54:58 +11:00
objint.h py/objint: Fix int.to_bytes() buffer size checks. 2024-06-24 14:07:00 +10:00
objlist.c py: Add new cstack API for stack checking, with limit margin macro. 2024-08-14 12:55:45 +10:00
objlist.h
objmap.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objmodule.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objmodule.h py/makemoduledefs.py: Automatically declare delegation attr functions. 2023-06-14 19:03:46 +10:00
objnamedtuple.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objnamedtuple.h
objnone.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objobject.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objpolyiter.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objproperty.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objrange.c py: Remove 5 TODOs in emitbc, objrange and repl. 2024-07-18 12:35:42 +10:00
objreversed.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objringio.c py/objringio: Add micropython.RingIO() interface for general use. 2024-09-19 18:00:44 +10:00
objset.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objsingleton.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objslice.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objstr.c py/objstr: Support tuples and start/end args in startswith and endswith. 2025-03-02 22:15:31 +11:00
objstr.h py/objstr: Add a macro to define a bytes object at compile time. 2024-03-15 13:37:31 +11:00
objstringio.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objstringio.h
objstrunicode.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objtuple.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
objtuple.h
objtype.c py/objtype: Don't delegate lookup of descriptor methods to __getattr__. 2024-10-16 15:03:30 +11:00
objtype.h
objzip.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
opmethods.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
pairheap.c
pairheap.h
parse.c py/parse: Remove old esp32 compiler workaround. 2024-09-27 00:03:16 +10:00
parse.h
parsenum.c py/parsenum: Reduce code footprint of mp_parse_num_float. 2025-02-28 13:35:12 +11:00
parsenum.h
parsenumbase.c py/parsenumbase: Favor clarity of code over manual optimisation. 2025-01-29 12:39:05 +11:00
parsenumbase.h
persistentcode.c py/persistentcode: Add mp_raw_code_save_fun_to_bytes. 2025-02-11 16:54:02 +11:00
persistentcode.h py/persistentcode: Add mp_raw_code_save_fun_to_bytes. 2025-02-11 16:54:02 +11:00
profile.c py/objcode: Factor code object out into its own file. 2025-02-11 16:42:14 +11:00
profile.h py/objcode: Factor code object out into its own file. 2025-02-11 16:42:14 +11:00
py.cmake py/objcode: Factor code object out into its own file. 2025-02-11 16:42:14 +11:00
py.mk py/objcode: Factor code object out into its own file. 2025-02-11 16:42:14 +11:00
pystack.c
pystack.h
qstr.c py/qstr: Add qstr_from_strn_static() helper function. 2024-12-23 13:04:54 +11:00
qstr.h py/qstr: Add qstr_from_strn_static() helper function. 2024-12-23 13:04:54 +11:00
qstrdefs.h extmod/vfs: Add mp_vfs_mount_romfs_protected() helper. 2025-03-06 12:52:35 +11:00
reader.c py/reader: Provide mp_reader_try_read_rom() function. 2024-12-23 13:04:54 +11:00
reader.h all: Upgrade codespell to v2.4.1. 2025-02-25 16:11:33 +11:00
repl.c py: Remove 5 TODOs in emitbc, objrange and repl. 2024-07-18 12:35:42 +10:00
repl.h
ringbuf.c py/objringio: Add micropython.RingIO() interface for general use. 2024-09-19 18:00:44 +10:00
ringbuf.h py/objringio: Add micropython.RingIO() interface for general use. 2024-09-19 18:00:44 +10:00
runtime0.h py/emitglue: Simplify mp_raw_code_t's kind and scope_flags members. 2024-02-16 12:48:02 +11:00
runtime_utils.c
runtime.c py/runtime: Automatically mount ROMFS as part of mp_init. 2025-03-06 12:52:35 +11:00
runtime.h py: Add new cstack API for stack checking, with limit margin macro. 2024-08-14 12:55:45 +10:00
scheduler.c py/scheduler: Only run callbacks on the main thread if GIL is disabled. 2024-09-19 13:17:01 +10:00
scope.c py/makeqstrdata.py: Ensure that scope names get low qstr values. 2024-03-26 22:52:25 +11:00
scope.h py/emitglue: Include fun_data_len in mp_raw_code_t only when saving. 2024-02-16 14:17:01 +11:00
sequence.c py/sequence: Remove unused len argument from mp_seq_extract_slice. 2024-07-18 12:51:29 +10:00
showbc.c py/emitglue: Include fun_data_len in mp_raw_code_t only when saving. 2024-02-16 14:17:01 +11:00
smallint.c
smallint.h
stackctrl.c py: Add new cstack API for stack checking, with limit margin macro. 2024-08-14 12:55:45 +10:00
stackctrl.h py: Add new cstack API for stack checking, with limit margin macro. 2024-08-14 12:55:45 +10:00
stream.c py/stream: Factor stream implementations. 2024-03-15 18:11:28 +11:00
stream.h py/stream: Factor stream implementations. 2024-03-15 18:11:28 +11:00
unicode.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
unicode.h
usermod.cmake py/usermod.cmake: If USER_C_MODULES is a folder add micropython.cmake. 2024-11-20 17:38:39 +11:00
verbose.mk esp32: Pass V=1 or BUILD_VERBOSE through to idf.py when building. 2024-12-10 11:28:38 +11:00
vm.c py/emitglue: Introduce mp_proto_fun_t as a more general mp_raw_code_t. 2024-02-16 14:17:01 +11:00
vmentrytable.h
vstr.c all: Remove the "STATIC" macro and just use "static" instead. 2024-03-07 14:20:42 +11:00
warning.c