blob: 49a9fa35ccf02fc84d44b2927f105b389bc2098f [file] [log] [blame]
Damien George04b91472014-05-03 23:27:38 +01001/*
Damien Georgec408ed92017-06-26 12:29:20 +10002 * This file is part of the MicroPython project, http://micropython.org/
Damien George04b91472014-05-03 23:27:38 +01003 *
4 * The MIT License (MIT)
5 *
6 * Copyright (c) 2013, 2014 Damien P. George
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a copy
9 * of this software and associated documentation files (the "Software"), to deal
10 * in the Software without restriction, including without limitation the rights
11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 * copies of the Software, and to permit persons to whom the Software is
13 * furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 * THE SOFTWARE.
25 */
Alexander Steffen299bc622017-06-29 23:14:58 +020026#ifndef MICROPY_INCLUDED_PY_MPCONFIG_H
27#define MICROPY_INCLUDED_PY_MPCONFIG_H
Damien George04b91472014-05-03 23:27:38 +010028
Jim Mussared69e34b62023-10-04 11:20:47 +110029// Current version of MicroPython. This is used by sys.implementation.version
30// as well as a fallback to generate MICROPY_GIT_TAG if the git repo or tags
31// are unavailable.
Damien Georgeaba83e62019-01-26 00:44:35 +110032#define MICROPY_VERSION_MAJOR 1
Damien George28901b22025-04-21 17:07:30 +100033#define MICROPY_VERSION_MINOR 26
Damien George294baf52023-04-26 15:42:28 +100034#define MICROPY_VERSION_MICRO 0
Damien George28901b22025-04-21 17:07:30 +100035#define MICROPY_VERSION_PRERELEASE 1
Damien George7cd59c52018-12-15 15:13:33 +110036
Jim Mussared69e34b62023-10-04 11:20:47 +110037// Combined version as a 32-bit number for convenience to allow version
38// comparison. Doesn't include prerelease state.
39// e.g. #if MICROPY_VERSION < MICROPY_MAKE_VERSION(1, 22, 0)
40#define MICROPY_MAKE_VERSION(major, minor, patch) (major << 16 | minor << 8 | patch)
41#define MICROPY_VERSION MICROPY_MAKE_VERSION(MICROPY_VERSION_MAJOR, MICROPY_VERSION_MINOR, MICROPY_VERSION_MICRO)
Damien George7cd59c52018-12-15 15:13:33 +110042
Jim Mussared69e34b62023-10-04 11:20:47 +110043// String version. This is only used directly for platform.platform and
44// os.uname().release. All other version info available in the firmware (e.g.
45// the REPL banner) comes from MICROPY_GIT_TAG.
46#define MICROPY_VERSION_STRING_BASE \
Damien George7cd59c52018-12-15 15:13:33 +110047 MP_STRINGIFY(MICROPY_VERSION_MAJOR) "." \
48 MP_STRINGIFY(MICROPY_VERSION_MINOR) "." \
49 MP_STRINGIFY(MICROPY_VERSION_MICRO)
Jim Mussared69e34b62023-10-04 11:20:47 +110050#if MICROPY_VERSION_PRERELEASE
51#define MICROPY_VERSION_STRING MICROPY_VERSION_STRING_BASE "-preview"
52#else
53#define MICROPY_VERSION_STRING MICROPY_VERSION_STRING_BASE
54#endif
Damien George7cd59c52018-12-15 15:13:33 +110055
Jim Mussared3bf70f12023-10-10 16:50:28 +110056// If this is enabled, then in-progress/breaking changes slated for the 2.x
57// release will be enabled.
58#ifndef MICROPY_PREVIEW_VERSION_2
59#define MICROPY_PREVIEW_VERSION_2 (0)
60#endif
61
Paul Sokolovskyb372bfc2014-01-03 17:15:53 +020062// This file contains default configuration settings for MicroPython.
Paul Sokolovskyb1422de2014-10-29 04:08:49 +020063// You can override any of the options below using mpconfigport.h file
64// located in a directory of your port.
Paul Sokolovskyb372bfc2014-01-03 17:15:53 +020065
Paul Sokolovskyb1422de2014-10-29 04:08:49 +020066// mpconfigport.h is a file containing configuration settings for a
67// particular port. mpconfigport.h is actually a default name for
Ville Skyttäca16c382017-05-29 10:08:14 +030068// such config, and it can be overridden using MP_CONFIGFILE preprocessor
Paul Sokolovskyb1422de2014-10-29 04:08:49 +020069// define (you can do that by passing CFLAGS_EXTRA='-DMP_CONFIGFILE="<file.h>"'
70// argument to make when using standard MicroPython makefiles).
71// This is useful to have more than one config per port, for example,
72// release vs debug configs, etc. Note that if you switch from one config
73// to another, you must rebuild from scratch using "-B" switch to make.
74
Jim Mussared01374d92021-08-14 01:43:15 +100075// Disable all optional features (i.e. minimal port).
76#define MICROPY_CONFIG_ROM_LEVEL_MINIMUM (0)
77// Only enable core features (constrained flash, e.g. STM32L072)
78#define MICROPY_CONFIG_ROM_LEVEL_CORE_FEATURES (10)
79// Enable most common features (small on-device flash, e.g. STM32F411)
80#define MICROPY_CONFIG_ROM_LEVEL_BASIC_FEATURES (20)
81// Enable convenience features (medium on-device flash, e.g. STM32F405)
82#define MICROPY_CONFIG_ROM_LEVEL_EXTRA_FEATURES (30)
83// Enable all common features (large/external flash, rp2, unix)
84#define MICROPY_CONFIG_ROM_LEVEL_FULL_FEATURES (40)
85// Enable everything (e.g. coverage)
86#define MICROPY_CONFIG_ROM_LEVEL_EVERYTHING (50)
87
Jim Mussared605266e2022-08-16 01:28:31 +100088#ifdef MP_CONFIGFILE
89#include MP_CONFIGFILE
90#else
91#include <mpconfigport.h>
92#endif
93
Jim Mussared01374d92021-08-14 01:43:15 +100094// Ports/boards should set this, but default to level=core.
95#ifndef MICROPY_CONFIG_ROM_LEVEL
96#define MICROPY_CONFIG_ROM_LEVEL (MICROPY_CONFIG_ROM_LEVEL_CORE_FEATURES)
97#endif
98
99// Helper macros for "have at least this level".
100#define MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES (MICROPY_CONFIG_ROM_LEVEL >= MICROPY_CONFIG_ROM_LEVEL_CORE_FEATURES)
101#define MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_BASIC_FEATURES (MICROPY_CONFIG_ROM_LEVEL >= MICROPY_CONFIG_ROM_LEVEL_BASIC_FEATURES)
102#define MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES (MICROPY_CONFIG_ROM_LEVEL >= MICROPY_CONFIG_ROM_LEVEL_EXTRA_FEATURES)
103#define MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_FULL_FEATURES (MICROPY_CONFIG_ROM_LEVEL >= MICROPY_CONFIG_ROM_LEVEL_FULL_FEATURES)
104#define MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING (MICROPY_CONFIG_ROM_LEVEL >= MICROPY_CONFIG_ROM_LEVEL_EVERYTHING)
105
Damien George136f6752014-01-07 14:54:15 +0000106// Any options not explicitly set in mpconfigport.h will get default
107// values below.
108
109/*****************************************************************************/
Damien George567184e2015-03-29 14:05:46 +0100110/* Object representation */
111
Damien Georgec408ed92017-06-26 12:29:20 +1000112// A MicroPython object is a machine word having the following form:
Damien George567184e2015-03-29 14:05:46 +0100113// - xxxx...xxx1 : a small int, bits 1 and above are the value
Damien George6f0c83f2020-01-08 23:58:40 +1100114// - xxxx...x010 : a qstr, bits 3 and above are the value
115// - xxxx...x110 : an immediate object, bits 3 and above are the value
Damien George567184e2015-03-29 14:05:46 +0100116// - xxxx...xx00 : a pointer to an mp_obj_base_t (unless a fake object)
117#define MICROPY_OBJ_REPR_A (0)
118
Damien Georgec408ed92017-06-26 12:29:20 +1000119// A MicroPython object is a machine word having the following form:
Damien George567184e2015-03-29 14:05:46 +0100120// - xxxx...xx01 : a small int, bits 2 and above are the value
Damien George6f0c83f2020-01-08 23:58:40 +1100121// - xxxx...x011 : a qstr, bits 3 and above are the value
122// - xxxx...x111 : an immediate object, bits 3 and above are the value
Damien George567184e2015-03-29 14:05:46 +0100123// - xxxx...xxx0 : a pointer to an mp_obj_base_t (unless a fake object)
124#define MICROPY_OBJ_REPR_B (1)
125
Damien George8b8d1892015-11-06 23:25:10 +0000126// A MicroPython object is a machine word having the following form (called R):
Damien George183edef2015-10-17 23:20:57 +0100127// - iiiiiiii iiiiiiii iiiiiiii iiiiiii1 small int with 31-bit signed value
Damien George6f0c83f2020-01-08 23:58:40 +1100128// - 01111111 1qqqqqqq qqqqqqqq qqqq0110 str with 19-bit qstr value
129// - 01111111 10000000 00000000 ssss1110 immediate object with 4-bit value
Damien George183edef2015-10-17 23:20:57 +0100130// - s1111111 10000000 00000000 00000010 +/- inf
131// - s1111111 1xxxxxxx xxxxxxxx xxxxx010 nan, x != 0
132// - seeeeeee efffffff ffffffff ffffff10 30-bit fp, e != 0xff
133// - pppppppp pppppppp pppppppp pppppp00 ptr (4 byte alignment)
Damien George6f0c83f2020-01-08 23:58:40 +1100134// Str, immediate and float stored as O = R + 0x80800000, retrieved as R = O - 0x80800000.
135// This makes strs/immediates easier to encode/decode as they have zeros in the top 9 bits.
Damien George183edef2015-10-17 23:20:57 +0100136// This scheme only works with 32-bit word size and float enabled.
137#define MICROPY_OBJ_REPR_C (2)
138
Damien Georgeb8cfb0d2015-11-27 17:09:11 +0000139// A MicroPython object is a 64-bit word having the following form (called R):
140// - seeeeeee eeeeffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff 64-bit fp, e != 0x7ff
141// - s1111111 11110000 00000000 00000000 00000000 00000000 00000000 00000000 +/- inf
142// - 01111111 11111000 00000000 00000000 00000000 00000000 00000000 00000000 normalised nan
Damien George2759bec2017-12-11 22:39:12 +1100143// - 01111111 11111101 iiiiiiii iiiiiiii iiiiiiii iiiiiiii iiiiiiii iiiiiii1 small int
Damien Georgeb8cfb0d2015-11-27 17:09:11 +0000144// - 01111111 11111110 00000000 00000000 qqqqqqqq qqqqqqqq qqqqqqqq qqqqqqq1 str
Damien George6f0c83f2020-01-08 23:58:40 +1100145// - 01111111 11111111 ss000000 00000000 00000000 00000000 00000000 00000000 immediate object
Damien Georgeb8cfb0d2015-11-27 17:09:11 +0000146// - 01111111 11111100 00000000 00000000 pppppppp pppppppp pppppppp pppppp00 ptr (4 byte alignment)
147// Stored as O = R + 0x8004000000000000, retrieved as R = O - 0x8004000000000000.
148// This makes pointers have all zeros in the top 32 bits.
149// Small-ints and strs have 1 as LSB to make sure they don't look like pointers
150// to the garbage collector.
151#define MICROPY_OBJ_REPR_D (3)
152
Damien George567184e2015-03-29 14:05:46 +0100153#ifndef MICROPY_OBJ_REPR
154#define MICROPY_OBJ_REPR (MICROPY_OBJ_REPR_A)
155#endif
156
Damien Georged96cfd12020-01-09 00:00:27 +1100157// Whether to encode None/False/True as immediate objects instead of pointers to
158// real objects. Reduces code size by a decent amount without hurting
159// performance, for all representations except D on some architectures.
160#ifndef MICROPY_OBJ_IMMEDIATE_OBJS
161#define MICROPY_OBJ_IMMEDIATE_OBJS (MICROPY_OBJ_REPR != MICROPY_OBJ_REPR_D)
162#endif
163
Damien George567184e2015-03-29 14:05:46 +0100164/*****************************************************************************/
Damien George66e18f02014-05-05 13:19:03 +0100165/* Memory allocation policy */
166
Paul Sokolovsky75feece2015-12-03 01:40:52 +0200167// Number of bytes in memory allocation/GC block. Any size allocated will be
168// rounded up to be multiples of this.
Paul Sokolovskyb4eccfd2015-12-03 01:57:50 +0200169#ifndef MICROPY_BYTES_PER_GC_BLOCK
Damien Georgead4656b2021-02-04 16:39:09 +1100170#define MICROPY_BYTES_PER_GC_BLOCK (4 * MP_BYTES_PER_OBJ_WORD)
Paul Sokolovskyb4eccfd2015-12-03 01:57:50 +0200171#endif
Paul Sokolovsky75feece2015-12-03 01:40:52 +0200172
Damien Georgefd40a9c2015-01-01 22:04:46 +0000173// Number of words allocated (in BSS) to the GC stack (minimum is 1)
174#ifndef MICROPY_ALLOC_GC_STACK_SIZE
175#define MICROPY_ALLOC_GC_STACK_SIZE (64)
176#endif
177
Ayke van Laethem31cf5282018-02-23 18:59:31 +0100178// The C-type to use for entries in the GC stack. By default it allows the
179// heap to be as large as the address space, but the bit-width of this type can
180// be reduced to save memory when the heap is small enough. The type must be
181// big enough to index all blocks in the heap, which is set by
182// heap-size-in-bytes / MICROPY_BYTES_PER_GC_BLOCK.
183#ifndef MICROPY_GC_STACK_ENTRY_TYPE
184#define MICROPY_GC_STACK_ENTRY_TYPE size_t
185#endif
186
Damien George5ffe1d82016-08-26 15:35:26 +1000187// Be conservative and always clear to zero newly (re)allocated memory in the GC.
188// This helps eliminate stray pointers that hold on to memory that's no longer
189// used. It decreases performance due to unnecessary memory clearing.
Colin Hogben828df542016-10-31 14:52:11 +0000190// A memory manager which always clears memory can set this to 0.
Damien George5ffe1d82016-08-26 15:35:26 +1000191// TODO Do analysis to understand why some memory is not properly cleared and
192// find a more efficient way to clear it.
193#ifndef MICROPY_GC_CONSERVATIVE_CLEAR
Colin Hogben828df542016-10-31 14:52:11 +0000194#define MICROPY_GC_CONSERVATIVE_CLEAR (MICROPY_ENABLE_GC)
Damien George5ffe1d82016-08-26 15:35:26 +1000195#endif
196
Paul Sokolovsky93e353e2016-07-21 00:37:30 +0300197// Support automatic GC when reaching allocation threshold,
198// configurable by gc.threshold().
199#ifndef MICROPY_GC_ALLOC_THRESHOLD
Jim Mussared01374d92021-08-14 01:43:15 +1000200#define MICROPY_GC_ALLOC_THRESHOLD (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky93e353e2016-07-21 00:37:30 +0300201#endif
202
Damien Georgeade9a052015-06-13 21:53:22 +0100203// Number of bytes to allocate initially when creating new chunks to store
204// interned string data. Smaller numbers lead to more chunks being needed
205// and more wastage at the end of the chunk. Larger numbers lead to wasted
206// space at the end when no more strings need interning.
207#ifndef MICROPY_ALLOC_QSTR_CHUNK_INIT
208#define MICROPY_ALLOC_QSTR_CHUNK_INIT (128)
209#endif
210
Damien Georgee1199ec2014-05-10 17:48:01 +0100211// Initial amount for lexer indentation level
Damien George58ebde42014-05-21 20:32:59 +0100212#ifndef MICROPY_ALLOC_LEXER_INDENT_INIT
213#define MICROPY_ALLOC_LEXER_INDENT_INIT (10)
Damien Georgee1199ec2014-05-10 17:48:01 +0100214#endif
215
216// Increment for lexer indentation level
Damien George58ebde42014-05-21 20:32:59 +0100217#ifndef MICROPY_ALLOC_LEXEL_INDENT_INC
218#define MICROPY_ALLOC_LEXEL_INDENT_INC (8)
Damien Georgee1199ec2014-05-10 17:48:01 +0100219#endif
220
Damien George66e18f02014-05-05 13:19:03 +0100221// Initial amount for parse rule stack
Damien George58ebde42014-05-21 20:32:59 +0100222#ifndef MICROPY_ALLOC_PARSE_RULE_INIT
223#define MICROPY_ALLOC_PARSE_RULE_INIT (64)
Damien George66e18f02014-05-05 13:19:03 +0100224#endif
225
226// Increment for parse rule stack
Damien George58ebde42014-05-21 20:32:59 +0100227#ifndef MICROPY_ALLOC_PARSE_RULE_INC
228#define MICROPY_ALLOC_PARSE_RULE_INC (16)
Damien George66e18f02014-05-05 13:19:03 +0100229#endif
230
231// Initial amount for parse result stack
Damien George58ebde42014-05-21 20:32:59 +0100232#ifndef MICROPY_ALLOC_PARSE_RESULT_INIT
233#define MICROPY_ALLOC_PARSE_RESULT_INIT (32)
Damien George66e18f02014-05-05 13:19:03 +0100234#endif
235
236// Increment for parse result stack
Damien George58ebde42014-05-21 20:32:59 +0100237#ifndef MICROPY_ALLOC_PARSE_RESULT_INC
238#define MICROPY_ALLOC_PARSE_RESULT_INC (16)
Damien George66e18f02014-05-05 13:19:03 +0100239#endif
240
Damien George5042bce2014-05-25 22:06:06 +0100241// Strings this length or less will be interned by the parser
242#ifndef MICROPY_ALLOC_PARSE_INTERN_STRING_LEN
243#define MICROPY_ALLOC_PARSE_INTERN_STRING_LEN (10)
244#endif
245
Damien George58e0f4a2015-09-23 10:50:43 +0100246// Number of bytes to allocate initially when creating new chunks to store
247// parse nodes. Small leads to fragmentation, large leads to excess use.
248#ifndef MICROPY_ALLOC_PARSE_CHUNK_INIT
249#define MICROPY_ALLOC_PARSE_CHUNK_INIT (128)
250#endif
251
Damien George66e18f02014-05-05 13:19:03 +0100252// Initial amount for ids in a scope
Damien George58ebde42014-05-21 20:32:59 +0100253#ifndef MICROPY_ALLOC_SCOPE_ID_INIT
254#define MICROPY_ALLOC_SCOPE_ID_INIT (4)
Damien George66e18f02014-05-05 13:19:03 +0100255#endif
256
257// Increment for ids in a scope
Damien George58ebde42014-05-21 20:32:59 +0100258#ifndef MICROPY_ALLOC_SCOPE_ID_INC
259#define MICROPY_ALLOC_SCOPE_ID_INC (6)
260#endif
261
262// Maximum length of a path in the filesystem
263// So we can allocate a buffer on the stack for path manipulation in import
264#ifndef MICROPY_ALLOC_PATH_MAX
265#define MICROPY_ALLOC_PATH_MAX (512)
Damien George66e18f02014-05-05 13:19:03 +0100266#endif
267
Paul Sokolovsky346aacf2014-11-05 00:27:15 +0200268// Initial size of module dict
269#ifndef MICROPY_MODULE_DICT_SIZE
270#define MICROPY_MODULE_DICT_SIZE (1)
271#endif
272
matejcik1a2ffda2021-03-22 11:20:22 +0100273// Initial size of sys.modules dict
274#ifndef MICROPY_LOADED_MODULES_DICT_SIZE
275#define MICROPY_LOADED_MODULES_DICT_SIZE (3)
276#endif
277
Damien Georged8914522015-02-27 09:54:12 +0000278// Whether realloc/free should be passed allocated memory region size
279// You must enable this if MICROPY_MEM_STATS is enabled
280#ifndef MICROPY_MALLOC_USES_ALLOCATED_SIZE
281#define MICROPY_MALLOC_USES_ALLOCATED_SIZE (0)
282#endif
283
Damien George95836f82015-01-11 22:27:30 +0000284// Number of bytes used to store qstr length
285// Dictates hard limit on maximum Python identifier length, but 1 byte
286// (limit of 255 bytes in an identifier) should be enough for everyone
287#ifndef MICROPY_QSTR_BYTES_IN_LEN
288#define MICROPY_QSTR_BYTES_IN_LEN (1)
289#endif
290
Damien Georgec3bd9412015-07-20 11:03:13 +0000291// Number of bytes used to store qstr hash
292#ifndef MICROPY_QSTR_BYTES_IN_HASH
Jim Mussaredd4190812023-10-31 10:47:45 +1100293#if MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES
Damien Georgec3bd9412015-07-20 11:03:13 +0000294#define MICROPY_QSTR_BYTES_IN_HASH (2)
Jim Mussaredd4190812023-10-31 10:47:45 +1100295#elif MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES
Jim Mussared01374d92021-08-14 01:43:15 +1000296#define MICROPY_QSTR_BYTES_IN_HASH (1)
Jim Mussaredd4190812023-10-31 10:47:45 +1100297#else
298#define MICROPY_QSTR_BYTES_IN_HASH (0)
Jim Mussared01374d92021-08-14 01:43:15 +1000299#endif
Damien Georgec3bd9412015-07-20 11:03:13 +0000300#endif
301
Paul Sokolovsky7f1c9812015-03-28 01:14:45 +0200302// Avoid using C stack when making Python function calls. C stack still
303// may be used if there's no free heap.
Paul Sokolovsky20397572015-03-28 01:14:44 +0200304#ifndef MICROPY_STACKLESS
305#define MICROPY_STACKLESS (0)
306#endif
307
Paul Sokolovsky7f1c9812015-03-28 01:14:45 +0200308// Never use C stack when making Python function calls. This may break
309// testsuite as will subtly change which exception is thrown in case
310// of too deep recursion and other similar cases.
311#ifndef MICROPY_STACKLESS_STRICT
312#define MICROPY_STACKLESS_STRICT (0)
313#endif
314
Paul Sokolovskyf32020e2015-11-25 23:22:31 +0200315// Don't use alloca calls. As alloca() is not part of ANSI C, this
316// workaround option is provided for compilers lacking this de-facto
317// standard function. The way it works is allocating from heap, and
318// relying on garbage collection to free it eventually. This is of
319// course much less optimal than real alloca().
320#if defined(MICROPY_NO_ALLOCA) && MICROPY_NO_ALLOCA
321#undef alloca
322#define alloca(x) m_malloc(x)
323#endif
324
Damien George66e18f02014-05-05 13:19:03 +0100325/*****************************************************************************/
Damien Georgec408ed92017-06-26 12:29:20 +1000326/* MicroPython emitters */
Damien George136f6752014-01-07 14:54:15 +0000327
Damien Georged8c834c2015-11-02 21:55:42 +0000328// Whether to support loading of persistent code
329#ifndef MICROPY_PERSISTENT_CODE_LOAD
330#define MICROPY_PERSISTENT_CODE_LOAD (0)
331#endif
332
Jim Mussaredb2b5bcc2023-08-23 13:30:20 +1000333// Whether to support saving of persistent code, i.e. for mpy-cross to
334// generate .mpy files. Enabling this enables additional metadata on raw code
335// objects which is also required for sys.settrace.
Damien Georged8c834c2015-11-02 21:55:42 +0000336#ifndef MICROPY_PERSISTENT_CODE_SAVE
Jim Mussaredb2b5bcc2023-08-23 13:30:20 +1000337#define MICROPY_PERSISTENT_CODE_SAVE (MICROPY_PY_SYS_SETTRACE)
Damien Georged8c834c2015-11-02 21:55:42 +0000338#endif
339
David CARLIERcb309282021-01-16 20:48:19 +0000340// Whether to support saving persistent code to a file via mp_raw_code_save_file
341#ifndef MICROPY_PERSISTENT_CODE_SAVE_FILE
342#define MICROPY_PERSISTENT_CODE_SAVE_FILE (0)
343#endif
344
Damien Georgea11ba772024-07-17 16:06:12 +1000345// Whether to support converting functions to persistent code (bytes)
346#ifndef MICROPY_PERSISTENT_CODE_SAVE_FUN
Damien Georgec3a18d72025-01-20 22:24:10 +1100347#define MICROPY_PERSISTENT_CODE_SAVE_FUN (MICROPY_PY_MARSHAL)
Damien Georgea11ba772024-07-17 16:06:12 +1000348#endif
349
Damien Georgec8e9c0d2015-11-02 17:27:18 +0000350// Whether generated code can persist independently of the VM/runtime instance
Damien Georged8c834c2015-11-02 21:55:42 +0000351// This is enabled automatically when needed by other features
Damien Georgec8e9c0d2015-11-02 17:27:18 +0000352#ifndef MICROPY_PERSISTENT_CODE
Damien George0a2e9652016-01-31 22:24:16 +0000353#define MICROPY_PERSISTENT_CODE (MICROPY_PERSISTENT_CODE_LOAD || MICROPY_PERSISTENT_CODE_SAVE || MICROPY_MODULE_FROZEN_MPY)
Damien Georgec8e9c0d2015-11-02 17:27:18 +0000354#endif
355
Damien Georgef2040bf2021-10-22 22:22:47 +1100356// Whether bytecode uses a qstr_table to map internal qstr indices in the bytecode
357// to global qstr values in the runtime (behaviour when feature is enabled), or
358// just stores global qstr values directly in the bytecode. This must be enabled
359// if MICROPY_PERSISTENT_CODE is enabled.
360#ifndef MICROPY_EMIT_BYTECODE_USES_QSTR_TABLE
361#define MICROPY_EMIT_BYTECODE_USES_QSTR_TABLE (MICROPY_PERSISTENT_CODE)
362#endif
363
Damien George136f6752014-01-07 14:54:15 +0000364// Whether to emit x64 native code
365#ifndef MICROPY_EMIT_X64
366#define MICROPY_EMIT_X64 (0)
367#endif
368
Damien Georgec90f59e2014-09-06 23:06:36 +0100369// Whether to emit x86 native code
370#ifndef MICROPY_EMIT_X86
371#define MICROPY_EMIT_X86 (0)
372#endif
373
Damien George136f6752014-01-07 14:54:15 +0000374// Whether to emit thumb native code
375#ifndef MICROPY_EMIT_THUMB
376#define MICROPY_EMIT_THUMB (0)
377#endif
378
graham sanderson40d20102020-12-12 13:04:10 -0600379// Whether to emit ARMv7-M instruction support in thumb native code
380#ifndef MICROPY_EMIT_THUMB_ARMV7M
381#define MICROPY_EMIT_THUMB_ARMV7M (1)
382#endif
383
Damien George136f6752014-01-07 14:54:15 +0000384// Whether to enable the thumb inline assembler
385#ifndef MICROPY_EMIT_INLINE_THUMB
386#define MICROPY_EMIT_INLINE_THUMB (0)
387#endif
388
=50089722015-04-14 13:14:57 +0100389// Whether to enable float support in the Thumb2 inline assembler
390#ifndef MICROPY_EMIT_INLINE_THUMB_FLOAT
391#define MICROPY_EMIT_INLINE_THUMB_FLOAT (1)
392#endif
393
Fabian Vogtfe3d16e2014-08-16 22:55:53 +0200394// Whether to emit ARM native code
395#ifndef MICROPY_EMIT_ARM
396#define MICROPY_EMIT_ARM (0)
397#endif
398
Damien George8e5aced2016-12-09 16:39:39 +1100399// Whether to emit Xtensa native code
400#ifndef MICROPY_EMIT_XTENSA
401#define MICROPY_EMIT_XTENSA (0)
402#endif
403
Damien Georgef76b1bf2016-12-09 17:03:33 +1100404// Whether to enable the Xtensa inline assembler
405#ifndef MICROPY_EMIT_INLINE_XTENSA
406#define MICROPY_EMIT_INLINE_XTENSA (0)
407#endif
408
Damien George9adedce2019-09-13 13:15:12 +1000409// Whether to emit Xtensa-Windowed native code
410#ifndef MICROPY_EMIT_XTENSAWIN
411#define MICROPY_EMIT_XTENSAWIN (0)
412#endif
413
Alessandro Gatti8338f662024-06-08 11:00:08 +0200414// Whether to emit RISC-V RV32 native code
415#ifndef MICROPY_EMIT_RV32
416#define MICROPY_EMIT_RV32 (0)
417#endif
418
Alessandro Gatti268acb72024-08-25 16:28:35 +0200419// Whether to enable the RISC-V RV32 inline assembler
420#ifndef MICROPY_EMIT_INLINE_RV32
421#define MICROPY_EMIT_INLINE_RV32 (0)
422#endif
423
Damien George2ac4af62014-08-15 16:45:41 +0100424// Convenience definition for whether any native emitter is enabled
Damien George9dbc7872024-03-07 11:38:27 +1100425#define MICROPY_EMIT_NATIVE (MICROPY_EMIT_X64 || MICROPY_EMIT_X86 || MICROPY_EMIT_THUMB || MICROPY_EMIT_ARM || MICROPY_EMIT_XTENSA || MICROPY_EMIT_XTENSAWIN || MICROPY_EMIT_RV32 || MICROPY_EMIT_NATIVE_DEBUG)
Damien George9adedce2019-09-13 13:15:12 +1000426
Damien George1fb01bd2022-05-10 13:56:24 +1000427// Some architectures cannot read byte-wise from executable memory. In this case
428// the prelude for a native function (which usually sits after the machine code)
429// must be separated and placed somewhere where it can be read byte-wise.
430#define MICROPY_EMIT_NATIVE_PRELUDE_SEPARATE_FROM_MACHINE_CODE (MICROPY_EMIT_XTENSAWIN)
Damien George2ac4af62014-08-15 16:45:41 +0100431
Damien Georgead297a12016-12-09 13:17:49 +1100432// Convenience definition for whether any inline assembler emitter is enabled
Alessandro Gatti268acb72024-08-25 16:28:35 +0200433#define MICROPY_EMIT_INLINE_ASM (MICROPY_EMIT_INLINE_THUMB || MICROPY_EMIT_INLINE_XTENSA || MICROPY_EMIT_INLINE_RV32)
Damien Georgead297a12016-12-09 13:17:49 +1100434
Jun Wub152bbd2019-05-06 00:31:11 -0700435// Convenience definition for whether any native or inline assembler emitter is enabled
436#define MICROPY_EMIT_MACHINE_CODE (MICROPY_EMIT_NATIVE || MICROPY_EMIT_INLINE_ASM)
437
Damien George136f6752014-01-07 14:54:15 +0000438/*****************************************************************************/
Damien George58ebde42014-05-21 20:32:59 +0100439/* Compiler configuration */
440
Damien Georgedd5353a2015-12-18 12:35:44 +0000441// Whether to include the compiler
442#ifndef MICROPY_ENABLE_COMPILER
Jim Mussared01374d92021-08-14 01:43:15 +1000443#define MICROPY_ENABLE_COMPILER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgedd5353a2015-12-18 12:35:44 +0000444#endif
445
Damien Georgeea235202016-02-11 22:30:53 +0000446// Whether the compiler is dynamically configurable (ie at runtime)
Damien Georgea4f1d822019-05-29 21:17:29 +1000447// This will disable the ability to execute native/viper code
Damien Georgeea235202016-02-11 22:30:53 +0000448#ifndef MICROPY_DYNAMIC_COMPILER
449#define MICROPY_DYNAMIC_COMPILER (0)
450#endif
451
Damien George2b8e88c2023-06-24 17:02:58 +1000452// Whether the compiler allows compiling top-level await expressions
453#ifndef MICROPY_COMP_ALLOW_TOP_LEVEL_AWAIT
454#define MICROPY_COMP_ALLOW_TOP_LEVEL_AWAIT (0)
455#endif
456
Damien George64f2b212015-10-08 14:58:15 +0100457// Whether to enable constant folding; eg 1+2 rewritten as 3
458#ifndef MICROPY_COMP_CONST_FOLDING
Jim Mussared01374d92021-08-14 01:43:15 +1000459#define MICROPY_COMP_CONST_FOLDING (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George64f2b212015-10-08 14:58:15 +0100460#endif
461
Damien George35c0cff2022-03-31 14:27:47 +1100462// Whether to compile constant tuples immediately to their respective objects; eg (1, True)
463// Otherwise the tuple will be built at runtime
464#ifndef MICROPY_COMP_CONST_TUPLE
465#define MICROPY_COMP_CONST_TUPLE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
466#endif
467
Damien George07796932019-02-27 00:10:04 +1100468// Whether to enable optimisations for constant literals, eg OrderedDict
469#ifndef MICROPY_COMP_CONST_LITERAL
Jim Mussared01374d92021-08-14 01:43:15 +1000470#define MICROPY_COMP_CONST_LITERAL (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George07796932019-02-27 00:10:04 +1100471#endif
472
Damien Georgeddd1e182015-01-10 14:07:24 +0000473// Whether to enable lookup of constants in modules; eg module.CONST
474#ifndef MICROPY_COMP_MODULE_CONST
Jim Mussared0e236ee2021-09-15 23:18:23 +1000475#define MICROPY_COMP_MODULE_CONST (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgeddd1e182015-01-10 14:07:24 +0000476#endif
477
Damien George58ebde42014-05-21 20:32:59 +0100478// Whether to enable constant optimisation; id = const(value)
479#ifndef MICROPY_COMP_CONST
Jim Mussared01374d92021-08-14 01:43:15 +1000480#define MICROPY_COMP_CONST (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George58ebde42014-05-21 20:32:59 +0100481#endif
482
Damien George42e0c592015-03-14 13:11:35 +0000483// Whether to enable optimisation of: a, b = c, d
484// Costs 124 bytes (Thumb2)
485#ifndef MICROPY_COMP_DOUBLE_TUPLE_ASSIGN
Jim Mussared01374d92021-08-14 01:43:15 +1000486#define MICROPY_COMP_DOUBLE_TUPLE_ASSIGN (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George42e0c592015-03-14 13:11:35 +0000487#endif
488
489// Whether to enable optimisation of: a, b, c = d, e, f
Damien George253f2bd2018-02-04 13:35:21 +1100490// Requires MICROPY_COMP_DOUBLE_TUPLE_ASSIGN and costs 68 bytes (Thumb2)
Damien George42e0c592015-03-14 13:11:35 +0000491#ifndef MICROPY_COMP_TRIPLE_TUPLE_ASSIGN
Jim Mussared0e236ee2021-09-15 23:18:23 +1000492#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George42e0c592015-03-14 13:11:35 +0000493#endif
494
Damien Georgeae54fbf2017-04-22 14:58:01 +1000495// Whether to enable optimisation of: return a if b else c
496// Costs about 80 bytes (Thumb2) and saves 2 bytes of bytecode for each use
497#ifndef MICROPY_COMP_RETURN_IF_EXPR
Jim Mussared0e236ee2021-09-15 23:18:23 +1000498#define MICROPY_COMP_RETURN_IF_EXPR (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgeae54fbf2017-04-22 14:58:01 +1000499#endif
500
Damien George58ebde42014-05-21 20:32:59 +0100501/*****************************************************************************/
Damien George136f6752014-01-07 14:54:15 +0000502/* Internal debugging stuff */
503
504// Whether to collect memory allocation stats
505#ifndef MICROPY_MEM_STATS
506#define MICROPY_MEM_STATS (0)
507#endif
508
Damien Georgeda2d2b62018-08-02 14:04:44 +1000509// The mp_print_t printer used for debugging output
510#ifndef MICROPY_DEBUG_PRINTER
511#define MICROPY_DEBUG_PRINTER (&mp_plat_print)
512#endif
513
Damien Georgecbd2f742014-01-19 11:48:48 +0000514// Whether to build functions that print debugging info:
Damien George3417bc22014-05-10 10:36:38 +0100515// mp_bytecode_print
Damien Georgecbd2f742014-01-19 11:48:48 +0000516// mp_parse_node_print
517#ifndef MICROPY_DEBUG_PRINTERS
518#define MICROPY_DEBUG_PRINTERS (0)
Damien Georged3ebe482014-01-07 15:20:33 +0000519#endif
520
Stefan Naumannace9fb52017-07-24 18:55:14 +0200521// Whether to enable all debugging outputs (it will be extremely verbose)
522#ifndef MICROPY_DEBUG_VERBOSE
523#define MICROPY_DEBUG_VERBOSE (0)
524#endif
525
Damien George02cc2882019-03-08 15:48:20 +1100526// Whether to enable debugging versions of MP_OBJ_NULL/STOP_ITERATION/SENTINEL
527#ifndef MICROPY_DEBUG_MP_OBJ_SENTINELS
528#define MICROPY_DEBUG_MP_OBJ_SENTINELS (0)
529#endif
530
Damien George843dcd42020-09-30 23:34:42 +1000531// Whether to print parse rule names (rather than integers) in mp_parse_node_print
532#ifndef MICROPY_DEBUG_PARSE_RULE_NAME
533#define MICROPY_DEBUG_PARSE_RULE_NAME (0)
534#endif
535
Damien George6d199342019-01-04 17:09:41 +1100536// Whether to enable a simple VM stack overflow check
537#ifndef MICROPY_DEBUG_VM_STACK_OVERFLOW
538#define MICROPY_DEBUG_VM_STACK_OVERFLOW (0)
539#endif
540
Jeff Epler84071592021-08-27 09:02:03 -0500541// Whether to enable extra instrumentation for valgrind
542#ifndef MICROPY_DEBUG_VALGRIND
543#define MICROPY_DEBUG_VALGRIND (0)
544#endif
545
Damien George136f6752014-01-07 14:54:15 +0000546/*****************************************************************************/
Damien Georgeee3fd462014-05-24 23:03:12 +0100547/* Optimisations */
548
549// Whether to use computed gotos in the VM, or a switch
Jim Mussaredb51e7e92021-08-19 17:49:33 +1000550// Computed gotos are roughly 10% faster, and increase VM code size by a little,
551// e.g. ~1kiB on Cortex M4.
Damien George44f0a4d2017-09-18 23:53:33 +1000552// Note: enabling this will use the gcc-specific extensions of ranged designated
553// initialisers and addresses of labels, which are not part of the C99 standard.
Damien Georgeee3fd462014-05-24 23:03:12 +0100554#ifndef MICROPY_OPT_COMPUTED_GOTO
555#define MICROPY_OPT_COMPUTED_GOTO (0)
556#endif
557
Jim Mussared7b89ad82021-08-19 22:46:40 +1000558// Optimise the fast path for loading attributes from instance types. Increases
559// Thumb2 code size by about 48 bytes.
560#ifndef MICROPY_OPT_LOAD_ATTR_FAST_PATH
Jim Mussared0e236ee2021-09-15 23:18:23 +1000561#define MICROPY_OPT_LOAD_ATTR_FAST_PATH (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Jim Mussared7b89ad82021-08-19 22:46:40 +1000562#endif
563
Jim Mussared11ef8f22021-08-18 14:52:48 +1000564// Use extra RAM to cache map lookups by remembering the likely location of
565// the index. Avoids the hash computation on unordered maps, and avoids the
566// linear search on ordered (especially in-ROM) maps. Can provide a +10-15%
567// performance improvement on benchmarks involving lots of attribute access
568// or dictionary lookup.
569#ifndef MICROPY_OPT_MAP_LOOKUP_CACHE
Jim Mussared0e236ee2021-09-15 23:18:23 +1000570#define MICROPY_OPT_MAP_LOOKUP_CACHE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Jim Mussared11ef8f22021-08-18 14:52:48 +1000571#endif
572
573// How much RAM (in bytes) to use for the map lookup cache.
574#ifndef MICROPY_OPT_MAP_LOOKUP_CACHE_SIZE
575#define MICROPY_OPT_MAP_LOOKUP_CACHE_SIZE (128)
576#endif
577
Doug Currie2e2e15c2016-01-30 22:35:58 -0500578// Whether to use fast versions of bitwise operations (and, or, xor) when the
579// arguments are both positive. Increases Thumb2 code size by about 250 bytes.
580#ifndef MICROPY_OPT_MPZ_BITWISE
Jim Mussared0e236ee2021-09-15 23:18:23 +1000581#define MICROPY_OPT_MPZ_BITWISE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Doug Currie2e2e15c2016-01-30 22:35:58 -0500582#endif
583
Christopher Swenson8c656752018-08-27 10:32:21 +1000584
585// Whether math.factorial is large, fast and recursive (1) or small and slow (0).
586#ifndef MICROPY_OPT_MATH_FACTORIAL
Jim Mussared0e236ee2021-09-15 23:18:23 +1000587#define MICROPY_OPT_MATH_FACTORIAL (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Christopher Swenson8c656752018-08-27 10:32:21 +1000588#endif
589
Damien Georgeee3fd462014-05-24 23:03:12 +0100590/*****************************************************************************/
591/* Python internal features */
Damien George136f6752014-01-07 14:54:15 +0000592
J. Neuschäfer7b050b32023-04-02 19:58:42 +0200593// Use a special long jump in nlrthumb.c, which may be necessary if nlr.o and
594// nlrthumb.o are linked far apart from each other.
595#ifndef MICROPY_NLR_THUMB_USE_LONG_JUMP
596#define MICROPY_NLR_THUMB_USE_LONG_JUMP (0)
597#endif
598
Damien George20993682018-02-20 18:00:44 +1100599// Whether to enable import of external modules
600// When disabled, only importing of built-in modules is supported
601// When enabled, a port must implement mp_import_stat (among other things)
602#ifndef MICROPY_ENABLE_EXTERNAL_IMPORT
Jim Mussared01374d92021-08-14 01:43:15 +1000603#define MICROPY_ENABLE_EXTERNAL_IMPORT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George20993682018-02-20 18:00:44 +1100604#endif
605
Damien George6b239c22016-11-16 16:04:57 +1100606// Whether to use the POSIX reader for importing files
607#ifndef MICROPY_READER_POSIX
608#define MICROPY_READER_POSIX (0)
609#endif
610
Damien Georgedcb9ea72017-01-27 15:10:09 +1100611// Whether to use the VFS reader for importing files
612#ifndef MICROPY_READER_VFS
613#define MICROPY_READER_VFS (0)
614#endif
615
Sean Burtone33bc592018-12-13 12:10:35 +0000616// Whether any readers have been defined
617#ifndef MICROPY_HAS_FILE_READER
618#define MICROPY_HAS_FILE_READER (MICROPY_READER_POSIX || MICROPY_READER_VFS)
619#endif
620
Damien George40d84302016-02-15 22:46:21 +0000621// Hook for the VM at the start of the opcode loop (can contain variable
622// definitions usable by the other hook functions)
623#ifndef MICROPY_VM_HOOK_INIT
624#define MICROPY_VM_HOOK_INIT
625#endif
626
627// Hook for the VM during the opcode loop (but only after jump opcodes)
628#ifndef MICROPY_VM_HOOK_LOOP
629#define MICROPY_VM_HOOK_LOOP
630#endif
631
632// Hook for the VM just before return opcode is finished being interpreted
633#ifndef MICROPY_VM_HOOK_RETURN
634#define MICROPY_VM_HOOK_RETURN
635#endif
636
Damien George916c3fd2021-04-25 22:24:49 +1000637// Hook for mp_sched_schedule when a function gets scheduled on sched_queue
638// (this macro executes within an atomic section)
639#ifndef MICROPY_SCHED_HOOK_SCHEDULED
640#define MICROPY_SCHED_HOOK_SCHEDULED
641#endif
642
Damien Georged3ebe482014-01-07 15:20:33 +0000643// Whether to include the garbage collector
644#ifndef MICROPY_ENABLE_GC
645#define MICROPY_ENABLE_GC (0)
646#endif
647
Ayke van Laethembcc827d2018-01-24 02:09:58 +0100648// Whether the garbage-collected heap can be split over multiple memory areas.
649#ifndef MICROPY_GC_SPLIT_HEAP
650#define MICROPY_GC_SPLIT_HEAP (0)
651#endif
652
Angus Gratton519c24d2023-08-02 16:49:44 +1000653// Whether regions should be added/removed from the split heap as needed.
654#ifndef MICROPY_GC_SPLIT_HEAP_AUTO
655#define MICROPY_GC_SPLIT_HEAP_AUTO (0)
656#endif
657
Laurens Valkfe120482021-10-26 10:47:04 +0200658// Hook to run code during time consuming garbage collector operations
David Lechner468ed212023-03-15 16:48:16 -0500659// *i* is the loop index variable (e.g. can be used to run every x loops)
Laurens Valkfe120482021-10-26 10:47:04 +0200660#ifndef MICROPY_GC_HOOK_LOOP
David Lechner468ed212023-03-15 16:48:16 -0500661#define MICROPY_GC_HOOK_LOOP(i)
Laurens Valkfe120482021-10-26 10:47:04 +0200662#endif
663
Damien Georgefca57012022-05-04 12:12:11 +1000664// Whether to provide m_tracked_calloc, m_tracked_free functions
665#ifndef MICROPY_TRACKED_ALLOC
666#define MICROPY_TRACKED_ALLOC (0)
667#endif
668
Damien George12bab722014-04-05 20:35:48 +0100669// Whether to enable finalisers in the garbage collector (ie call __del__)
Damien George7860c2a2014-11-05 21:16:41 +0000670#ifndef MICROPY_ENABLE_FINALISER
Jim Mussared0e236ee2021-09-15 23:18:23 +1000671#define MICROPY_ENABLE_FINALISER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George12bab722014-04-05 20:35:48 +0100672#endif
673
Damien George02d830c2017-11-26 23:28:40 +1100674// Whether to enable a separate allocator for the Python stack.
675// If enabled then the code must call mp_pystack_init before mp_init.
676#ifndef MICROPY_ENABLE_PYSTACK
677#define MICROPY_ENABLE_PYSTACK (0)
678#endif
679
680// Number of bytes that memory returned by mp_pystack_alloc will be aligned by.
681#ifndef MICROPY_PYSTACK_ALIGN
682#define MICROPY_PYSTACK_ALIGN (8)
683#endif
684
Paul Sokolovsky23668692014-06-25 03:03:34 +0300685// Whether to check C stack usage. C stack used for calling Python functions,
686// etc. Not checking means segfault on overflow.
687#ifndef MICROPY_STACK_CHECK
Jim Mussared0e236ee2021-09-15 23:18:23 +1000688#define MICROPY_STACK_CHECK (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky23668692014-06-25 03:03:34 +0300689#endif
690
Angus Gratton86f2c282024-08-06 15:51:22 +1000691// Additional margin between the places in the runtime where Python stack is
692// checked and the actual end of the C stack. Needs to be large enough to avoid
693// overflows from function calls made between checks.
694#ifndef MICROPY_STACK_CHECK_MARGIN
695#define MICROPY_STACK_CHECK_MARGIN (0)
696#endif
697
Dave Hylands5b7fd202014-07-01 23:46:53 -0700698// Whether to have an emergency exception buffer
699#ifndef MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF
700#define MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF (0)
701#endif
702#if MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF
Damien George69661f32020-02-27 15:36:53 +1100703#ifndef MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE
704#define MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE (0) // 0 - implies dynamic allocation
705#endif
Dave Hylands5b7fd202014-07-01 23:46:53 -0700706#endif
707
Damien Georgebbb4b982017-04-10 17:19:36 +1000708// Whether to provide the mp_kbd_exception object, and micropython.kbd_intr function
Damien George7f1da0a2016-12-15 13:00:19 +1100709#ifndef MICROPY_KBD_EXCEPTION
Jim Mussared0e236ee2021-09-15 23:18:23 +1000710#define MICROPY_KBD_EXCEPTION (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George7f1da0a2016-12-15 13:00:19 +1100711#endif
712
Paul Sokolovsky1c9210b2015-12-23 00:06:37 +0200713// Prefer to raise KeyboardInterrupt asynchronously (from signal or interrupt
714// handler) - if supported by a particular port.
715#ifndef MICROPY_ASYNC_KBD_INTR
716#define MICROPY_ASYNC_KBD_INTR (0)
717#endif
718
Damien George136f6752014-01-07 14:54:15 +0000719// Whether to include REPL helper function
Damien George58ebde42014-05-21 20:32:59 +0100720#ifndef MICROPY_HELPER_REPL
Jim Mussared0e236ee2021-09-15 23:18:23 +1000721#define MICROPY_HELPER_REPL (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George136f6752014-01-07 14:54:15 +0000722#endif
723
Yonatan Goldschmidt61d2b402019-12-25 09:27:38 +0200724// Allow enabling debug prints after each REPL line
725#ifndef MICROPY_REPL_INFO
Damien Georgec62351f2021-11-01 15:18:22 +1100726#define MICROPY_REPL_INFO (0)
Yonatan Goldschmidt61d2b402019-12-25 09:27:38 +0200727#endif
728
Tom Soulanille7d588b02015-07-09 16:32:36 -0700729// Whether to include emacs-style readline behavior in REPL
730#ifndef MICROPY_REPL_EMACS_KEYS
Jim Mussared0e236ee2021-09-15 23:18:23 +1000731#define MICROPY_REPL_EMACS_KEYS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Tom Soulanille7d588b02015-07-09 16:32:36 -0700732#endif
733
Yonatan Goldschmidt853aaa02019-12-14 23:42:03 +0200734// Whether to include emacs-style word movement/kill readline behavior in REPL.
735// This adds Alt+F, Alt+B, Alt+D and Alt+Backspace for forward-word, backward-word, forward-kill-word
736// and backward-kill-word, respectively.
737#ifndef MICROPY_REPL_EMACS_WORDS_MOVE
Jim Mussared3e5b1be2022-08-16 01:41:03 +1000738#define MICROPY_REPL_EMACS_WORDS_MOVE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Yonatan Goldschmidt853aaa02019-12-14 23:42:03 +0200739#endif
740
741// Whether to include extra convenience keys for word movement/kill in readline REPL.
742// This adds Ctrl+Right, Ctrl+Left and Ctrl+W for forward-word, backward-word and backward-kill-word
743// respectively. Ctrl+Delete is not implemented because it's a very different escape sequence.
744// Depends on MICROPY_REPL_EMACS_WORDS_MOVE.
745#ifndef MICROPY_REPL_EMACS_EXTRA_WORDS_MOVE
Jim Mussared3e5b1be2022-08-16 01:41:03 +1000746#define MICROPY_REPL_EMACS_EXTRA_WORDS_MOVE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Yonatan Goldschmidt853aaa02019-12-14 23:42:03 +0200747#endif
748
Damien George0af73012015-08-20 10:34:16 +0100749// Whether to implement auto-indent in REPL
750#ifndef MICROPY_REPL_AUTO_INDENT
Jim Mussared0e236ee2021-09-15 23:18:23 +1000751#define MICROPY_REPL_AUTO_INDENT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George0af73012015-08-20 10:34:16 +0100752#endif
753
Paul Sokolovsky87bc8e22015-01-15 10:46:27 +0200754// Whether port requires event-driven REPL functions
755#ifndef MICROPY_REPL_EVENT_DRIVEN
756#define MICROPY_REPL_EVENT_DRIVEN (0)
757#endif
758
David Lechner81dbea12022-07-01 14:06:10 -0500759// The number of items to keep in the readline history.
760#ifndef MICROPY_READLINE_HISTORY_SIZE
761#define MICROPY_READLINE_HISTORY_SIZE (8)
762#endif
763
Damien Georged3ebe482014-01-07 15:20:33 +0000764// Whether to include lexer helper function for unix
Damien George58ebde42014-05-21 20:32:59 +0100765#ifndef MICROPY_HELPER_LEXER_UNIX
766#define MICROPY_HELPER_LEXER_UNIX (0)
Damien Georged3ebe482014-01-07 15:20:33 +0000767#endif
768
Paul Sokolovsky48b35722014-01-12 17:30:48 +0200769// Long int implementation
770#define MICROPY_LONGINT_IMPL_NONE (0)
771#define MICROPY_LONGINT_IMPL_LONGLONG (1)
Damien George438c88d2014-02-22 19:25:23 +0000772#define MICROPY_LONGINT_IMPL_MPZ (2)
Paul Sokolovsky48b35722014-01-12 17:30:48 +0200773
774#ifndef MICROPY_LONGINT_IMPL
775#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_NONE)
776#endif
777
778#if MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_LONGLONG
779typedef long long mp_longint_impl_t;
780#endif
781
Damien George62ad1892014-01-29 21:51:51 +0000782// Whether to include information in the byte code to determine source
783// line number (increases RAM usage, but doesn't slow byte code execution)
784#ifndef MICROPY_ENABLE_SOURCE_LINE
Jim Mussared0e236ee2021-09-15 23:18:23 +1000785#define MICROPY_ENABLE_SOURCE_LINE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George62ad1892014-01-29 21:51:51 +0000786#endif
787
Damien George1463c1f2014-04-25 23:52:57 +0100788// Whether to include doc strings (increases RAM usage)
789#ifndef MICROPY_ENABLE_DOC_STRING
790#define MICROPY_ENABLE_DOC_STRING (0)
791#endif
792
Damien Georged4b706c2021-04-22 12:13:58 +1000793// Exception messages are removed (requires disabling MICROPY_ROM_TEXT_COMPRESSION)
794#define MICROPY_ERROR_REPORTING_NONE (0)
Damien George1e9a92f2014-11-06 17:36:16 +0000795// Exception messages are short static strings
Paul Sokolovsky1f85d622014-05-01 01:35:38 +0300796#define MICROPY_ERROR_REPORTING_TERSE (1)
797// Exception messages provide basic error details
798#define MICROPY_ERROR_REPORTING_NORMAL (2)
799// Exception messages provide full info, e.g. object names
800#define MICROPY_ERROR_REPORTING_DETAILED (3)
801
802#ifndef MICROPY_ERROR_REPORTING
Jim Mussared01374d92021-08-14 01:43:15 +1000803#if MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_FULL_FEATURES
804#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_DETAILED)
805#elif MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES
Paul Sokolovsky1f85d622014-05-01 01:35:38 +0300806#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_NORMAL)
Jim Mussared01374d92021-08-14 01:43:15 +1000807#else
808#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_TERSE)
809#endif
Paul Sokolovsky1f85d622014-05-01 01:35:38 +0300810#endif
811
Paul Sokolovsky8a8c1fc2015-01-01 09:29:28 +0200812// Whether issue warnings during compiling/execution
813#ifndef MICROPY_WARNINGS
814#define MICROPY_WARNINGS (0)
815#endif
816
Paul Sokolovsky2f5d1132018-12-21 14:20:55 +0300817// Whether to support warning categories
818#ifndef MICROPY_WARNINGS_CATEGORY
819#define MICROPY_WARNINGS_CATEGORY (0)
820#endif
821
David Lechner62849b72017-09-24 20:15:48 -0500822// This macro is used when printing runtime warnings and errors
823#ifndef MICROPY_ERROR_PRINTER
824#define MICROPY_ERROR_PRINTER (&mp_plat_print)
825#endif
826
Damien George0c36da02014-03-08 15:24:39 +0000827// Float and complex implementation
828#define MICROPY_FLOAT_IMPL_NONE (0)
829#define MICROPY_FLOAT_IMPL_FLOAT (1)
830#define MICROPY_FLOAT_IMPL_DOUBLE (2)
831
832#ifndef MICROPY_FLOAT_IMPL
833#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_NONE)
834#endif
835
836#if MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_FLOAT
Damien Georgefb510b32014-06-01 13:32:54 +0100837#define MICROPY_PY_BUILTINS_FLOAT (1)
Damien George561844f2016-11-03 12:33:01 +1100838#define MICROPY_FLOAT_CONST(x) x##F
Damien George0c36da02014-03-08 15:24:39 +0000839#define MICROPY_FLOAT_C_FUN(fun) fun##f
840typedef float mp_float_t;
841#elif MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_DOUBLE
Damien Georgefb510b32014-06-01 13:32:54 +0100842#define MICROPY_PY_BUILTINS_FLOAT (1)
Damien George561844f2016-11-03 12:33:01 +1100843#define MICROPY_FLOAT_CONST(x) x
Damien George0c36da02014-03-08 15:24:39 +0000844#define MICROPY_FLOAT_C_FUN(fun) fun
845typedef double mp_float_t;
846#else
Damien Georgefb510b32014-06-01 13:32:54 +0100847#define MICROPY_PY_BUILTINS_FLOAT (0)
Damien George136f6752014-01-07 14:54:15 +0000848#endif
849
Paul Sokolovsky3b6f7b92014-06-20 01:48:35 +0300850#ifndef MICROPY_PY_BUILTINS_COMPLEX
851#define MICROPY_PY_BUILTINS_COMPLEX (MICROPY_PY_BUILTINS_FLOAT)
852#endif
853
Matthias Urlichse520fa22023-10-25 19:17:47 +0200854// Whether to use the native _Float16 for 16-bit float support
855#ifndef MICROPY_FLOAT_USE_NATIVE_FLT16
856#ifdef __FLT16_MAX__
857#define MICROPY_FLOAT_USE_NATIVE_FLT16 (1)
858#else
859#define MICROPY_FLOAT_USE_NATIVE_FLT16 (0)
860#endif
861#endif
862
Damien Georgea73501b2017-04-06 17:27:33 +1000863// Whether to provide a high-quality hash for float and complex numbers.
864// Otherwise the default is a very simple but correct hashing function.
865#ifndef MICROPY_FLOAT_HIGH_QUALITY_HASH
Jim Mussared3e5b1be2022-08-16 01:41:03 +1000866#define MICROPY_FLOAT_HIGH_QUALITY_HASH (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Damien Georgea73501b2017-04-06 17:27:33 +1000867#endif
868
Paul Sokolovskydcac8802014-01-16 19:19:50 +0200869// Enable features which improve CPython compatibility
870// but may lead to more code size/memory usage.
871// TODO: Originally intended as generic category to not
872// add bunch of once-off options. May need refactoring later
873#ifndef MICROPY_CPYTHON_COMPAT
Jim Mussared01374d92021-08-14 01:43:15 +1000874#define MICROPY_CPYTHON_COMPAT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovskydcac8802014-01-16 19:19:50 +0200875#endif
876
Paul Sokolovsky9a973972017-04-02 21:20:07 +0300877// Perform full checks as done by CPython. Disabling this
878// may produce incorrect results, if incorrect data is fed,
879// but should not lead to MicroPython crashes or similar
880// grave issues (in other words, only user app should be,
881// affected, not system).
882#ifndef MICROPY_FULL_CHECKS
Jim Mussared01374d92021-08-14 01:43:15 +1000883#define MICROPY_FULL_CHECKS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky9a973972017-04-02 21:20:07 +0300884#endif
885
Paul Sokolovsky0ef015b2014-05-07 02:23:46 +0300886// Whether POSIX-semantics non-blocking streams are supported
887#ifndef MICROPY_STREAMS_NON_BLOCK
Jim Mussared0e236ee2021-09-15 23:18:23 +1000888#define MICROPY_STREAMS_NON_BLOCK (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky0ef015b2014-05-07 02:23:46 +0300889#endif
890
Paul Sokolovsky61e77a42016-07-30 20:05:56 +0300891// Whether to provide stream functions with POSIX-like signatures
892// (useful for porting existing libraries to MicroPython).
893#ifndef MICROPY_STREAMS_POSIX_API
894#define MICROPY_STREAMS_POSIX_API (0)
895#endif
896
Jim Mussared13c817e2023-06-05 15:52:57 +1000897// Whether modules can use MP_REGISTER_MODULE_DELEGATION() to delegate failed
898// attribute lookups to a custom handler function.
Damien George3356b5e2021-07-27 00:38:21 +1000899#ifndef MICROPY_MODULE_ATTR_DELEGATION
Jim Mussared7d2ee8a2023-06-05 22:38:36 +1000900#define MICROPY_MODULE_ATTR_DELEGATION (MICROPY_PY_SYS_ATTR_DELEGATION || MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George3356b5e2021-07-27 00:38:21 +1000901#endif
902
Jim Mussared6a8114e2023-05-12 17:07:24 +1000903// Whether to call __init__ when importing builtin modules for the first time.
904// Modules using this need to handle the possibility that __init__ might be
905// called multiple times.
Damien George3c9c3682015-09-15 14:56:13 +0100906#ifndef MICROPY_MODULE_BUILTIN_INIT
Jim Mussared0e236ee2021-09-15 23:18:23 +1000907#define MICROPY_MODULE_BUILTIN_INIT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George3c9c3682015-09-15 14:56:13 +0100908#endif
909
Jim Mussareded90f302023-05-10 13:22:54 +1000910// Whether to allow built-in modules to have sub-packages (by making the
911// sub-package a member of their locals dict). Sub-packages should not be
912// registered with MP_REGISTER_MODULE, instead they should be added as
913// members of the parent's globals dict. To match CPython behavior,
914// their __name__ should be "foo.bar"(i.e. QSTR_foo_dot_bar) which will
915// require an entry in qstrdefs, although it does also work to just call
916// it "bar". Also, because subpackages can be accessed without being
917// imported (e.g. as foo.bar after `import foo`), they should not
918// have __init__ methods. Instead, the top-level package's __init__ should
919// initialise all sub-packages.
920#ifndef MICROPY_MODULE_BUILTIN_SUBPACKAGES
921#define MICROPY_MODULE_BUILTIN_SUBPACKAGES (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
922#endif
923
Paul m. p. P454cca62018-10-22 18:34:29 +0200924// Whether to support module-level __getattr__ (see PEP 562)
925#ifndef MICROPY_MODULE_GETATTR
Jim Mussared01374d92021-08-14 01:43:15 +1000926#define MICROPY_MODULE_GETATTR (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul m. p. P454cca62018-10-22 18:34:29 +0200927#endif
928
Jim Mussareda7fa18c2020-02-26 15:24:09 +1100929// Whether to enable importing foo.py with __name__ set to '__main__'
930// Used by the unix port for the -m flag.
931#ifndef MICROPY_MODULE_OVERRIDE_MAIN_IMPORT
932#define MICROPY_MODULE_OVERRIDE_MAIN_IMPORT (0)
933#endif
934
Damien George0a2e9652016-01-31 22:24:16 +0000935// Whether frozen modules are supported in the form of strings
936#ifndef MICROPY_MODULE_FROZEN_STR
937#define MICROPY_MODULE_FROZEN_STR (0)
938#endif
939
940// Whether frozen modules are supported in the form of .mpy files
941#ifndef MICROPY_MODULE_FROZEN_MPY
942#define MICROPY_MODULE_FROZEN_MPY (0)
943#endif
944
945// Convenience macro for whether frozen modules are supported
Paul Sokolovsky640e0b22015-01-20 11:52:12 +0200946#ifndef MICROPY_MODULE_FROZEN
Damien George0a2e9652016-01-31 22:24:16 +0000947#define MICROPY_MODULE_FROZEN (MICROPY_MODULE_FROZEN_STR || MICROPY_MODULE_FROZEN_MPY)
Paul Sokolovsky640e0b22015-01-20 11:52:12 +0200948#endif
949
Damien George78d702c2014-12-09 16:19:48 +0000950// Whether you can override builtins in the builtins module
951#ifndef MICROPY_CAN_OVERRIDE_BUILTINS
Jim Mussared0e236ee2021-09-15 23:18:23 +1000952#define MICROPY_CAN_OVERRIDE_BUILTINS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George78d702c2014-12-09 16:19:48 +0000953#endif
954
Damien George06593fb2015-06-19 12:49:10 +0000955// Whether to check that the "self" argument of a builtin method has the
956// correct type. Such an explicit check is only needed if a builtin
957// method escapes to Python land without a first argument, eg
958// list.append([], 1). Without this check such calls will have undefined
959// behaviour (usually segfault) if the first argument is the wrong type.
960#ifndef MICROPY_BUILTIN_METHOD_CHECK_SELF_ARG
Jim Mussared01374d92021-08-14 01:43:15 +1000961#define MICROPY_BUILTIN_METHOD_CHECK_SELF_ARG (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George06593fb2015-06-19 12:49:10 +0000962#endif
963
Damien George3f56fd62016-05-10 10:54:06 +0100964// Whether to use internally defined errno's (otherwise system provided ones)
965#ifndef MICROPY_USE_INTERNAL_ERRNO
966#define MICROPY_USE_INTERNAL_ERRNO (0)
967#endif
968
Delio Brignolie2ac8bb2016-08-21 11:33:37 +0200969// Whether to use internally defined *printf() functions (otherwise external ones)
970#ifndef MICROPY_USE_INTERNAL_PRINTF
971#define MICROPY_USE_INTERNAL_PRINTF (1)
972#endif
973
Damien George78dc2db2023-03-09 13:56:23 +1100974// The mp_print_t printer used for printf output when MICROPY_USE_INTERNAL_PRINTF is enabled
975#ifndef MICROPY_INTERNAL_PRINTF_PRINTER
976#define MICROPY_INTERNAL_PRINTF_PRINTER (&mp_plat_print)
977#endif
978
Damien Georged54208a2022-12-16 17:31:21 +1100979// Whether to support mp_sched_vm_abort to asynchronously abort to the top level.
980#ifndef MICROPY_ENABLE_VM_ABORT
981#define MICROPY_ENABLE_VM_ABORT (0)
982#endif
983
Damien George6e74d242017-02-16 18:05:06 +1100984// Support for internal scheduler
985#ifndef MICROPY_ENABLE_SCHEDULER
Jim Mussared0e236ee2021-09-15 23:18:23 +1000986#define MICROPY_ENABLE_SCHEDULER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George6e74d242017-02-16 18:05:06 +1100987#endif
988
Damien George75506e42022-03-23 17:13:03 +1100989// Whether the scheduler supports scheduling static nodes with C callbacks
990#ifndef MICROPY_SCHEDULER_STATIC_NODES
991#define MICROPY_SCHEDULER_STATIC_NODES (0)
992#endif
993
Damien George6e74d242017-02-16 18:05:06 +1100994// Maximum number of entries in the scheduler
995#ifndef MICROPY_SCHEDULER_DEPTH
996#define MICROPY_SCHEDULER_DEPTH (4)
997#endif
998
Damien Georgedcb9ea72017-01-27 15:10:09 +1100999// Support for generic VFS sub-system
1000#ifndef MICROPY_VFS
1001#define MICROPY_VFS (0)
1002#endif
1003
Damien George8b6bd432024-11-15 11:16:04 +11001004// Whether to include support for writable filesystems.
1005#ifndef MICROPY_VFS_WRITABLE
1006#define MICROPY_VFS_WRITABLE (1)
1007#endif
1008
Damien George89e6c582024-11-15 12:57:34 +11001009// Whether to enable the mp_vfs_rom_ioctl C function, and vfs.rom_ioctl Python function
1010#ifndef MICROPY_VFS_ROM_IOCTL
1011#define MICROPY_VFS_ROM_IOCTL (MICROPY_VFS_ROM)
1012#endif
1013
Damien George8d82b0e2018-06-06 13:11:33 +10001014// Support for VFS POSIX component, to mount a POSIX filesystem within VFS
Jim Mussared89a0fef2022-09-13 14:57:24 +10001015#ifndef MICROPY_VFS_POSIX
Damien George8d82b0e2018-06-06 13:11:33 +10001016#define MICROPY_VFS_POSIX (0)
1017#endif
1018
Damien Georgea8b9e712018-06-06 14:31:29 +10001019// Support for VFS FAT component, to mount a FAT filesystem within VFS
Jim Mussared89a0fef2022-09-13 14:57:24 +10001020#ifndef MICROPY_VFS_FAT
Damien Georgea8b9e712018-06-06 14:31:29 +10001021#define MICROPY_VFS_FAT (0)
1022#endif
1023
Jim Mussared89a0fef2022-09-13 14:57:24 +10001024// Support for VFS LittleFS v1 component, to mount a LFSv1 filesystem within VFS
1025#ifndef MICROPY_VFS_LFS1
1026#define MICROPY_VFS_LFS1 (0)
1027#endif
1028
1029// Support for VFS LittleFS v2 component, to mount a LFSv2 filesystem within VFS
1030#ifndef MICROPY_VFS_LFS2
1031#define MICROPY_VFS_LFS2 (0)
1032#endif
1033
Damien George50637ff2022-03-04 10:52:35 +11001034// Support for ROMFS.
1035#ifndef MICROPY_VFS_ROM
1036#define MICROPY_VFS_ROM (0)
1037#endif
1038
Damien Georgeee3fd462014-05-24 23:03:12 +01001039/*****************************************************************************/
1040/* Fine control over Python builtins, classes, modules, etc */
1041
Damien Georgeda154fd2017-04-01 23:52:24 +11001042// Whether to support multiple inheritance of Python classes. Multiple
1043// inheritance makes some C functions inherently recursive, and adds a bit of
1044// code overhead.
1045#ifndef MICROPY_MULTIPLE_INHERITANCE
Jim Mussared01374d92021-08-14 01:43:15 +10001046#define MICROPY_MULTIPLE_INHERITANCE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeda154fd2017-04-01 23:52:24 +11001047#endif
1048
stijn3cc17c62015-02-14 18:44:31 +01001049// Whether to implement attributes on functions
1050#ifndef MICROPY_PY_FUNCTION_ATTRS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001051#define MICROPY_PY_FUNCTION_ATTRS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
stijn3cc17c62015-02-14 18:44:31 +01001052#endif
1053
Damien Georgeceb8ba62025-01-20 22:23:48 +11001054// Whether to implement the __code__ attribute on functions, and function constructor
1055#ifndef MICROPY_PY_FUNCTION_ATTRS_CODE
1056#define MICROPY_PY_FUNCTION_ATTRS_CODE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_FULL_FEATURES)
1057#endif
1058
Damien George36c10522018-05-25 17:09:54 +10001059// Whether to support the descriptors __get__, __set__, __delete__
1060// This costs some code size and makes load/store/delete of instance
1061// attributes slower for the classes that use this feature
stijn28fa84b2015-02-14 18:43:54 +01001062#ifndef MICROPY_PY_DESCRIPTORS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001063#define MICROPY_PY_DESCRIPTORS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
stijn28fa84b2015-02-14 18:43:54 +01001064#endif
1065
dmazzella18e65692017-01-03 11:00:12 +01001066// Whether to support class __delattr__ and __setattr__ methods
Damien George36c10522018-05-25 17:09:54 +10001067// This costs some code size and makes store/delete of instance
1068// attributes slower for the classes that use this feature
dmazzella18e65692017-01-03 11:00:12 +01001069#ifndef MICROPY_PY_DELATTR_SETATTR
Jim Mussared0e236ee2021-09-15 23:18:23 +10001070#define MICROPY_PY_DELATTR_SETATTR (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
dmazzella18e65692017-01-03 11:00:12 +01001071#endif
1072
pohmelie81ebba72016-01-27 23:23:11 +03001073// Support for async/await/async for/async with
1074#ifndef MICROPY_PY_ASYNC_AWAIT
Jim Mussared01374d92021-08-14 01:43:15 +10001075#define MICROPY_PY_ASYNC_AWAIT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
pohmelie81ebba72016-01-27 23:23:11 +03001076#endif
1077
Jim Mussared692d36d2021-08-13 01:44:08 +10001078// Support for literal string interpolation, f-strings (see PEP 498, Python 3.6+)
1079#ifndef MICROPY_PY_FSTRINGS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001080#define MICROPY_PY_FSTRINGS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Jim Mussared692d36d2021-08-13 01:44:08 +10001081#endif
1082
Damien George17839502020-06-16 21:42:44 +10001083// Support for assignment expressions with := (see PEP 572, Python 3.8+)
1084#ifndef MICROPY_PY_ASSIGN_EXPR
Jim Mussared01374d92021-08-14 01:43:15 +10001085#define MICROPY_PY_ASSIGN_EXPR (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George17839502020-06-16 21:42:44 +10001086#endif
1087
Paul Sokolovsky63644012017-10-21 12:13:44 +03001088// Non-standard .pend_throw() method for generators, allowing for
1089// Future-like behavior with respect to exception handling: an
1090// exception set with .pend_throw() will activate on the next call
1091// to generator's .send() or .__next__(). (This is useful to implement
1092// async schedulers.)
1093#ifndef MICROPY_PY_GENERATOR_PEND_THROW
Jim Mussared01374d92021-08-14 01:43:15 +10001094#define MICROPY_PY_GENERATOR_PEND_THROW (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky63644012017-10-21 12:13:44 +03001095#endif
1096
Paul Sokolovskya1b442b2016-07-22 00:46:24 +03001097// Issue a warning when comparing str and bytes objects
Paul Sokolovsky707cae72016-07-22 00:34:34 +03001098#ifndef MICROPY_PY_STR_BYTES_CMP_WARN
1099#define MICROPY_PY_STR_BYTES_CMP_WARN (0)
1100#endif
1101
Jim Mussared28aaab92021-07-13 18:01:12 +10001102// Add bytes.hex and bytes.fromhex
1103#ifndef MICROPY_PY_BUILTINS_BYTES_HEX
1104#define MICROPY_PY_BUILTINS_BYTES_HEX (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1105#endif
1106
Paul Sokolovsky12bc13e2014-06-13 01:05:19 +03001107// Whether str object is proper unicode
1108#ifndef MICROPY_PY_BUILTINS_STR_UNICODE
Jim Mussared0e236ee2021-09-15 23:18:23 +10001109#define MICROPY_PY_BUILTINS_STR_UNICODE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George8546ce12014-06-28 10:29:22 +01001110#endif
Damien Georgeb3a50f02014-06-28 10:27:15 +01001111
tll68c28172017-06-24 08:38:32 +08001112// Whether to check for valid UTF-8 when converting bytes to str
1113#ifndef MICROPY_PY_BUILTINS_STR_UNICODE_CHECK
1114#define MICROPY_PY_BUILTINS_STR_UNICODE_CHECK (MICROPY_PY_BUILTINS_STR_UNICODE)
1115#endif
1116
Paul Sokolovsky1b5abfc2016-05-22 00:13:44 +03001117// Whether str.center() method provided
1118#ifndef MICROPY_PY_BUILTINS_STR_CENTER
Jim Mussared0e236ee2021-09-15 23:18:23 +10001119#define MICROPY_PY_BUILTINS_STR_CENTER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky1b5abfc2016-05-22 00:13:44 +03001120#endif
1121
Paul Sokolovsky5a91fce2018-08-05 23:56:19 +03001122// Whether str.count() method provided
1123#ifndef MICROPY_PY_BUILTINS_STR_COUNT
Jim Mussared01374d92021-08-14 01:43:15 +10001124#define MICROPY_PY_BUILTINS_STR_COUNT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky5a91fce2018-08-05 23:56:19 +03001125#endif
1126
Paul Sokolovsky2da5d412018-08-15 15:17:41 +03001127// Whether str % (...) formatting operator provided
1128#ifndef MICROPY_PY_BUILTINS_STR_OP_MODULO
Jim Mussared01374d92021-08-14 01:43:15 +10001129#define MICROPY_PY_BUILTINS_STR_OP_MODULO (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky2da5d412018-08-15 15:17:41 +03001130#endif
1131
Paul Sokolovsky56eb25f2016-08-07 06:46:55 +03001132// Whether str.partition()/str.rpartition() method provided
1133#ifndef MICROPY_PY_BUILTINS_STR_PARTITION
Jim Mussared0e236ee2021-09-15 23:18:23 +10001134#define MICROPY_PY_BUILTINS_STR_PARTITION (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky56eb25f2016-08-07 06:46:55 +03001135#endif
1136
Paul Sokolovskyac2f7a72015-04-04 00:09:23 +03001137// Whether str.splitlines() method provided
1138#ifndef MICROPY_PY_BUILTINS_STR_SPLITLINES
Jim Mussared0e236ee2021-09-15 23:18:23 +10001139#define MICROPY_PY_BUILTINS_STR_SPLITLINES (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskyac2f7a72015-04-04 00:09:23 +03001140#endif
1141
Paul Sokolovskycb78f862014-06-27 20:39:09 +03001142// Whether to support bytearray object
1143#ifndef MICROPY_PY_BUILTINS_BYTEARRAY
Jim Mussared01374d92021-08-14 01:43:15 +10001144#define MICROPY_PY_BUILTINS_BYTEARRAY (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky12bc13e2014-06-13 01:05:19 +03001145#endif
1146
Damien George62e821c2025-01-19 23:30:59 +11001147// Whether to support code objects, and how many features they have
1148#define MICROPY_PY_BUILTINS_CODE_NONE (0)
1149#define MICROPY_PY_BUILTINS_CODE_MINIMUM (1)
1150#define MICROPY_PY_BUILTINS_CODE_BASIC (2)
1151#define MICROPY_PY_BUILTINS_CODE_FULL (3)
1152#ifndef MICROPY_PY_BUILTINS_CODE
Damien Georgeceb8ba62025-01-20 22:23:48 +11001153#define MICROPY_PY_BUILTINS_CODE (MICROPY_PY_SYS_SETTRACE ? MICROPY_PY_BUILTINS_CODE_FULL : (MICROPY_PY_FUNCTION_ATTRS_CODE ? MICROPY_PY_BUILTINS_CODE_BASIC : (MICROPY_PY_BUILTINS_COMPILE ? MICROPY_PY_BUILTINS_CODE_MINIMUM : MICROPY_PY_BUILTINS_CODE_NONE)))
Damien George62e821c2025-01-19 23:30:59 +11001154#endif
1155
Paul Sokolovskyfbb83352018-08-06 01:25:41 +03001156// Whether to support dict.fromkeys() class method
1157#ifndef MICROPY_PY_BUILTINS_DICT_FROMKEYS
Jim Mussared01374d92021-08-14 01:43:15 +10001158#define MICROPY_PY_BUILTINS_DICT_FROMKEYS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovskyfbb83352018-08-06 01:25:41 +03001159#endif
1160
Damien Georgedd4f4532014-10-23 13:34:35 +01001161// Whether to support memoryview object
1162#ifndef MICROPY_PY_BUILTINS_MEMORYVIEW
Jim Mussared0e236ee2021-09-15 23:18:23 +10001163#define MICROPY_PY_BUILTINS_MEMORYVIEW (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgedd4f4532014-10-23 13:34:35 +01001164#endif
1165
stijn90fae912019-05-08 16:16:17 +02001166// Whether to support memoryview.itemsize attribute
1167#ifndef MICROPY_PY_BUILTINS_MEMORYVIEW_ITEMSIZE
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001168#define MICROPY_PY_BUILTINS_MEMORYVIEW_ITEMSIZE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
stijn90fae912019-05-08 16:16:17 +02001169#endif
1170
Damien George3ebd4d02014-06-01 13:46:47 +01001171// Whether to support set object
1172#ifndef MICROPY_PY_BUILTINS_SET
Jim Mussared01374d92021-08-14 01:43:15 +10001173#define MICROPY_PY_BUILTINS_SET (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George3ebd4d02014-06-01 13:46:47 +01001174#endif
1175
Damien Georgefb510b32014-06-01 13:32:54 +01001176// Whether to support slice subscript operators and slice object
1177#ifndef MICROPY_PY_BUILTINS_SLICE
Jim Mussared01374d92021-08-14 01:43:15 +10001178#define MICROPY_PY_BUILTINS_SLICE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001179#endif
1180
Tom Soulanilleaeb62f92015-09-11 14:31:32 -07001181// Whether to support slice attribute read access,
1182// i.e. slice.start, slice.stop, slice.step
1183#ifndef MICROPY_PY_BUILTINS_SLICE_ATTRS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001184#define MICROPY_PY_BUILTINS_SLICE_ATTRS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Tom Soulanilleaeb62f92015-09-11 14:31:32 -07001185#endif
1186
Nicko van Someren4c939552019-11-16 17:07:11 -07001187// Whether to support the .indices(len) method on slice objects
1188#ifndef MICROPY_PY_BUILTINS_SLICE_INDICES
Jim Mussared0e236ee2021-09-15 23:18:23 +10001189#define MICROPY_PY_BUILTINS_SLICE_INDICES (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Nicko van Someren4c939552019-11-16 17:07:11 -07001190#endif
1191
Damien Georgeee3fd462014-05-24 23:03:12 +01001192// Whether to support frozenset object
Damien Georgefb510b32014-06-01 13:32:54 +01001193#ifndef MICROPY_PY_BUILTINS_FROZENSET
Jim Mussared0e236ee2021-09-15 23:18:23 +10001194#define MICROPY_PY_BUILTINS_FROZENSET (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001195#endif
1196
Damien Georgefb510b32014-06-01 13:32:54 +01001197// Whether to support property object
1198#ifndef MICROPY_PY_BUILTINS_PROPERTY
Jim Mussared01374d92021-08-14 01:43:15 +10001199#define MICROPY_PY_BUILTINS_PROPERTY (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001200#endif
1201
Peter D. Grayb2a237d2015-03-06 14:48:14 -05001202// Whether to implement the start/stop/step attributes (readback) on
1203// the "range" builtin type. Rarely used, and costs ~60 bytes (x86).
1204#ifndef MICROPY_PY_BUILTINS_RANGE_ATTRS
Jim Mussared01374d92021-08-14 01:43:15 +10001205#define MICROPY_PY_BUILTINS_RANGE_ATTRS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Peter D. Grayb2a237d2015-03-06 14:48:14 -05001206#endif
1207
Damien Georged77da832018-02-14 23:17:06 +11001208// Whether to support binary ops [only (in)equality is defined] between range
1209// objects. With this option disabled all range objects that are not exactly
1210// the same object will compare as not-equal. With it enabled the semantics
1211// match CPython and ranges are equal if they yield the same sequence of items.
1212#ifndef MICROPY_PY_BUILTINS_RANGE_BINOP
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001213#define MICROPY_PY_BUILTINS_RANGE_BINOP (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Damien Georged77da832018-02-14 23:17:06 +11001214#endif
1215
Damien Georgecf490a72023-10-03 11:24:50 +11001216// Support for calling next() with second argument
stijn42863832019-01-03 15:19:42 +01001217#ifndef MICROPY_PY_BUILTINS_NEXT2
Damien George56e90cb2025-03-11 13:14:46 +11001218#define MICROPY_PY_BUILTINS_NEXT2 (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_BASIC_FEATURES)
stijn42863832019-01-03 15:19:42 +01001219#endif
1220
Jan Klusacekb318ebf2018-01-09 22:47:35 +01001221// Whether to support rounding of integers (incl bignum); eg round(123,-1)=120
1222#ifndef MICROPY_PY_BUILTINS_ROUND_INT
Jim Mussared0e236ee2021-09-15 23:18:23 +10001223#define MICROPY_PY_BUILTINS_ROUND_INT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Jan Klusacekb318ebf2018-01-09 22:47:35 +01001224#endif
1225
Paul Sokolovsky0e80f342017-10-27 22:29:15 +03001226// Whether to support complete set of special methods for user
1227// classes, or only the most used ones. "Inplace" methods are
1228// controlled by MICROPY_PY_ALL_INPLACE_SPECIAL_METHODS below.
1229// "Reverse" methods are controlled by
1230// MICROPY_PY_REVERSE_SPECIAL_METHODS below.
Paul Sokolovsky98c4bc32015-01-30 01:42:49 +02001231#ifndef MICROPY_PY_ALL_SPECIAL_METHODS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001232#define MICROPY_PY_ALL_SPECIAL_METHODS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky98c4bc32015-01-30 01:42:49 +02001233#endif
1234
Damien Georgecf490a72023-10-03 11:24:50 +11001235// Whether to support all inplace arithmetic operation methods
Paul Sokolovsky0e80f342017-10-27 22:29:15 +03001236// (__imul__, etc.)
1237#ifndef MICROPY_PY_ALL_INPLACE_SPECIAL_METHODS
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001238#define MICROPY_PY_ALL_INPLACE_SPECIAL_METHODS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Paul Sokolovsky0e80f342017-10-27 22:29:15 +03001239#endif
1240
Damien Georgecf490a72023-10-03 11:24:50 +11001241// Whether to support reverse arithmetic operation methods
Paul Sokolovsky0e80f342017-10-27 22:29:15 +03001242// (__radd__, etc.). Additionally gated by
1243// MICROPY_PY_ALL_SPECIAL_METHODS.
Paul Sokolovskyeb84a832017-09-10 17:05:20 +03001244#ifndef MICROPY_PY_REVERSE_SPECIAL_METHODS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001245#define MICROPY_PY_REVERSE_SPECIAL_METHODS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskyeb84a832017-09-10 17:05:20 +03001246#endif
1247
Damien Georgec9fc6202014-10-25 21:59:14 +01001248// Whether to support compile function
1249#ifndef MICROPY_PY_BUILTINS_COMPILE
Jim Mussared0e236ee2021-09-15 23:18:23 +10001250#define MICROPY_PY_BUILTINS_COMPILE (MICROPY_ENABLE_COMPILER && MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgec9fc6202014-10-25 21:59:14 +01001251#endif
1252
Paul Sokolovskye2d44e32015-04-06 23:50:37 +03001253// Whether to support enumerate function(type)
1254#ifndef MICROPY_PY_BUILTINS_ENUMERATE
Jim Mussared01374d92021-08-14 01:43:15 +10001255#define MICROPY_PY_BUILTINS_ENUMERATE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovskye2d44e32015-04-06 23:50:37 +03001256#endif
1257
Damien Georgedd5353a2015-12-18 12:35:44 +00001258// Whether to support eval and exec functions
1259// By default they are supported if the compiler is enabled
1260#ifndef MICROPY_PY_BUILTINS_EVAL_EXEC
1261#define MICROPY_PY_BUILTINS_EVAL_EXEC (MICROPY_ENABLE_COMPILER)
1262#endif
1263
Damien George2a3e2b92014-12-19 13:36:17 +00001264// Whether to support the Python 2 execfile function
1265#ifndef MICROPY_PY_BUILTINS_EXECFILE
Jim Mussared0e236ee2021-09-15 23:18:23 +10001266#define MICROPY_PY_BUILTINS_EXECFILE (MICROPY_ENABLE_COMPILER && MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George2a3e2b92014-12-19 13:36:17 +00001267#endif
1268
Paul Sokolovsky22ff3972015-08-20 01:01:56 +03001269// Whether to support filter function(type)
1270#ifndef MICROPY_PY_BUILTINS_FILTER
Jim Mussared01374d92021-08-14 01:43:15 +10001271#define MICROPY_PY_BUILTINS_FILTER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky22ff3972015-08-20 01:01:56 +03001272#endif
1273
Paul Sokolovsky282ca092015-04-07 00:16:51 +03001274// Whether to support reversed function(type)
1275#ifndef MICROPY_PY_BUILTINS_REVERSED
Jim Mussared01374d92021-08-14 01:43:15 +10001276#define MICROPY_PY_BUILTINS_REVERSED (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky282ca092015-04-07 00:16:51 +03001277#endif
1278
Paul Sokolovsky5ab5ac52015-05-04 19:45:53 +03001279// Whether to define "NotImplemented" special constant
1280#ifndef MICROPY_PY_BUILTINS_NOTIMPLEMENTED
Jim Mussared0e236ee2021-09-15 23:18:23 +10001281#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky5ab5ac52015-05-04 19:45:53 +03001282#endif
1283
Damien Georgebc763022017-06-01 15:32:23 +10001284// Whether to provide the built-in input() function. The implementation of this
Damien George136369d2021-07-09 14:19:15 +10001285// uses shared/readline, so can only be enabled if the port uses this readline.
Damien Georgebc763022017-06-01 15:32:23 +10001286#ifndef MICROPY_PY_BUILTINS_INPUT
Jim Mussared0e236ee2021-09-15 23:18:23 +10001287#define MICROPY_PY_BUILTINS_INPUT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgebc763022017-06-01 15:32:23 +10001288#endif
1289
pohmelie354e6882015-12-07 15:35:48 +03001290// Whether to support min/max functions
1291#ifndef MICROPY_PY_BUILTINS_MIN_MAX
Jim Mussared01374d92021-08-14 01:43:15 +10001292#define MICROPY_PY_BUILTINS_MIN_MAX (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
pohmelie354e6882015-12-07 15:35:48 +03001293#endif
1294
Damien Georgea19b5a02017-02-03 12:35:48 +11001295// Support for calls to pow() with 3 integer arguments
1296#ifndef MICROPY_PY_BUILTINS_POW3
Jim Mussared0e236ee2021-09-15 23:18:23 +10001297#define MICROPY_PY_BUILTINS_POW3 (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgea19b5a02017-02-03 12:35:48 +11001298#endif
1299
Damien George9f04dfb2017-01-21 23:17:51 +11001300// Whether to provide the help function
1301#ifndef MICROPY_PY_BUILTINS_HELP
Jim Mussared0e236ee2021-09-15 23:18:23 +10001302#define MICROPY_PY_BUILTINS_HELP (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George9f04dfb2017-01-21 23:17:51 +11001303#endif
1304
1305// Use this to configure the help text shown for help(). It should be a
1306// variable with the type "const char*". A sensible default is provided.
1307#ifndef MICROPY_PY_BUILTINS_HELP_TEXT
1308#define MICROPY_PY_BUILTINS_HELP_TEXT mp_help_default_text
1309#endif
1310
Damien Georgef5172af2017-01-22 12:12:54 +11001311// Add the ability to list the available modules when executing help('modules')
1312#ifndef MICROPY_PY_BUILTINS_HELP_MODULES
Jim Mussared0e236ee2021-09-15 23:18:23 +10001313#define MICROPY_PY_BUILTINS_HELP_MODULES (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgef5172af2017-01-22 12:12:54 +11001314#endif
1315
Paul Sokolovskyd0f5e612014-07-25 11:00:15 +03001316// Whether to set __file__ for imported modules
1317#ifndef MICROPY_PY___FILE__
Jim Mussared01374d92021-08-14 01:43:15 +10001318#define MICROPY_PY___FILE__ (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovskyd0f5e612014-07-25 11:00:15 +03001319#endif
1320
Damien George89deec02015-01-09 20:12:54 +00001321// Whether to provide mem-info related functions in micropython module
1322#ifndef MICROPY_PY_MICROPYTHON_MEM_INFO
Jim Mussared0e236ee2021-09-15 23:18:23 +10001323#define MICROPY_PY_MICROPYTHON_MEM_INFO (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George89deec02015-01-09 20:12:54 +00001324#endif
1325
Damien George7e2a4882018-02-20 18:30:22 +11001326// Whether to provide "micropython.stack_use" function
1327#ifndef MICROPY_PY_MICROPYTHON_STACK_USE
1328#define MICROPY_PY_MICROPYTHON_STACK_USE (MICROPY_PY_MICROPYTHON_MEM_INFO)
1329#endif
1330
Andrew Leech86bfabe2019-06-28 16:35:51 +10001331// Whether to provide the "micropython.heap_locked" function
1332#ifndef MICROPY_PY_MICROPYTHON_HEAP_LOCKED
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001333#define MICROPY_PY_MICROPYTHON_HEAP_LOCKED (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Andrew Leech86bfabe2019-06-28 16:35:51 +10001334#endif
1335
Andrew Leech7e146802022-09-26 11:02:31 +10001336// Support for micropython.RingIO()
1337#ifndef MICROPY_PY_MICROPYTHON_RINGIO
1338#define MICROPY_PY_MICROPYTHON_RINGIO (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1339#endif
1340
Paul Sokolovskycb78f862014-06-27 20:39:09 +03001341// Whether to provide "array" module. Note that large chunk of the
1342// underlying code is shared with "bytearray" builtin type, so to
1343// get real savings, it should be disabled too.
1344#ifndef MICROPY_PY_ARRAY
Jim Mussared01374d92021-08-14 01:43:15 +10001345#define MICROPY_PY_ARRAY (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovskycb78f862014-06-27 20:39:09 +03001346#endif
1347
Paul Sokolovskycefcbb22015-02-27 22:16:05 +02001348// Whether to support slice assignments for array (and bytearray).
1349// This is rarely used, but adds ~0.5K of code.
1350#ifndef MICROPY_PY_ARRAY_SLICE_ASSIGN
Jim Mussared0e236ee2021-09-15 23:18:23 +10001351#define MICROPY_PY_ARRAY_SLICE_ASSIGN (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskycefcbb22015-02-27 22:16:05 +02001352#endif
1353
Damien George5aa311d2015-04-21 14:14:24 +00001354// Whether to support attrtuple type (MicroPython extension)
1355// It provides space-efficient tuples with attribute access
1356#ifndef MICROPY_PY_ATTRTUPLE
Jim Mussared01374d92021-08-14 01:43:15 +10001357#define MICROPY_PY_ATTRTUPLE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George5aa311d2015-04-21 14:14:24 +00001358#endif
1359
Damien Georgeee3fd462014-05-24 23:03:12 +01001360// Whether to provide "collections" module
1361#ifndef MICROPY_PY_COLLECTIONS
Jim Mussared01374d92021-08-14 01:43:15 +10001362#define MICROPY_PY_COLLECTIONS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001363#endif
1364
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001365// Whether to provide "collections.deque" type
Paul Sokolovsky970eedc2018-02-06 00:06:42 +02001366#ifndef MICROPY_PY_COLLECTIONS_DEQUE
Jim Mussared0e236ee2021-09-15 23:18:23 +10001367#define MICROPY_PY_COLLECTIONS_DEQUE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky970eedc2018-02-06 00:06:42 +02001368#endif
1369
Dash Peters7dff38f2023-02-11 18:49:15 -08001370// Whether "collections.deque" supports iteration
1371#ifndef MICROPY_PY_COLLECTIONS_DEQUE_ITER
1372#define MICROPY_PY_COLLECTIONS_DEQUE_ITER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1373#endif
1374
1375// Whether "collections.deque" supports subscription
1376#ifndef MICROPY_PY_COLLECTIONS_DEQUE_SUBSCR
1377#define MICROPY_PY_COLLECTIONS_DEQUE_SUBSCR (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1378#endif
1379
Paul Sokolovsky0ef01d02015-03-18 01:25:04 +02001380// Whether to provide "collections.OrderedDict" type
1381#ifndef MICROPY_PY_COLLECTIONS_ORDEREDDICT
Jim Mussared0e236ee2021-09-15 23:18:23 +10001382#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky0ef01d02015-03-18 01:25:04 +02001383#endif
1384
stijn79ed58f2017-11-06 12:21:53 +01001385// Whether to provide the _asdict function for namedtuple
1386#ifndef MICROPY_PY_COLLECTIONS_NAMEDTUPLE__ASDICT
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001387#define MICROPY_PY_COLLECTIONS_NAMEDTUPLE__ASDICT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
stijn79ed58f2017-11-06 12:21:53 +01001388#endif
1389
Damien Georgec3a18d72025-01-20 22:24:10 +11001390// Whether to provide "marshal" module
1391#ifndef MICROPY_PY_MARSHAL
1392#define MICROPY_PY_MARSHAL (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
1393#endif
1394
Damien Georgeee3fd462014-05-24 23:03:12 +01001395// Whether to provide "math" module
1396#ifndef MICROPY_PY_MATH
Jim Mussared01374d92021-08-14 01:43:15 +10001397#define MICROPY_PY_MATH (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001398#endif
1399
stijndd696722019-11-20 13:38:33 +01001400// Whether to provide all math module constants (Python 3.5+), or just pi and e.
1401#ifndef MICROPY_PY_MATH_CONSTANTS
1402#define MICROPY_PY_MATH_CONSTANTS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1403#endif
1404
Damien George5cbeace2015-02-22 14:48:18 +00001405// Whether to provide special math functions: math.{erf,erfc,gamma,lgamma}
1406#ifndef MICROPY_PY_MATH_SPECIAL_FUNCTIONS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001407#define MICROPY_PY_MATH_SPECIAL_FUNCTIONS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George5cbeace2015-02-22 14:48:18 +00001408#endif
1409
Christopher Swenson8c656752018-08-27 10:32:21 +10001410// Whether to provide math.factorial function
1411#ifndef MICROPY_PY_MATH_FACTORIAL
Jim Mussared0e236ee2021-09-15 23:18:23 +10001412#define MICROPY_PY_MATH_FACTORIAL (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Christopher Swenson8c656752018-08-27 10:32:21 +10001413#endif
1414
stijnaf5c9982019-07-02 10:28:44 +02001415// Whether to provide math.isclose function
1416#ifndef MICROPY_PY_MATH_ISCLOSE
Jim Mussared0e236ee2021-09-15 23:18:23 +10001417#define MICROPY_PY_MATH_ISCLOSE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
stijnaf5c9982019-07-02 10:28:44 +02001418#endif
1419
stijn81db22f2020-05-17 12:29:25 +02001420// Whether to provide fix for atan2 Inf handling.
1421#ifndef MICROPY_PY_MATH_ATAN2_FIX_INFNAN
1422#define MICROPY_PY_MATH_ATAN2_FIX_INFNAN (0)
1423#endif
1424
1425// Whether to provide fix for fmod Inf handling.
1426#ifndef MICROPY_PY_MATH_FMOD_FIX_INFNAN
1427#define MICROPY_PY_MATH_FMOD_FIX_INFNAN (0)
1428#endif
1429
1430// Whether to provide fix for modf negative zero handling.
1431#ifndef MICROPY_PY_MATH_MODF_FIX_NEGZERO
1432#define MICROPY_PY_MATH_MODF_FIX_NEGZERO (0)
1433#endif
1434
stijn2e54d9d2020-09-08 15:22:34 +02001435// Whether to provide fix for pow(1, NaN) and pow(NaN, 0), which both should be 1 not NaN.
1436#ifndef MICROPY_PY_MATH_POW_FIX_NAN
1437#define MICROPY_PY_MATH_POW_FIX_NAN (0)
1438#endif
1439
Angus Grattonb0c89372024-08-06 09:59:22 +10001440// Whether to provide fix for gamma(-inf) to raise ValueError
1441#ifndef MICROPY_PY_MATH_GAMMA_FIX_NEGINF
1442#define MICROPY_PY_MATH_GAMMA_FIX_NEGINF (0)
1443#endif
1444
Damien Georgeee3fd462014-05-24 23:03:12 +01001445// Whether to provide "cmath" module
1446#ifndef MICROPY_PY_CMATH
Jim Mussared0e236ee2021-09-15 23:18:23 +10001447#define MICROPY_PY_CMATH (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001448#endif
1449
Laurens Valkf724d902022-11-29 10:38:57 +01001450// Whether to provide "micropython" module
1451#ifndef MICROPY_PY_MICROPYTHON
Laurens Valk632d43e2022-11-29 12:31:09 +01001452#define MICROPY_PY_MICROPYTHON (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Laurens Valkf724d902022-11-29 10:38:57 +01001453#endif
1454
Damien Georgeee3fd462014-05-24 23:03:12 +01001455// Whether to provide "gc" module
1456#ifndef MICROPY_PY_GC
Jim Mussared01374d92021-08-14 01:43:15 +10001457#define MICROPY_PY_GC (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001458#endif
1459
Paul Sokolovsky755a55f2014-06-05 22:48:02 +03001460// Whether to return number of collected objects from gc.collect()
1461#ifndef MICROPY_PY_GC_COLLECT_RETVAL
1462#define MICROPY_PY_GC_COLLECT_RETVAL (0)
1463#endif
1464
Damien Georgeee3fd462014-05-24 23:03:12 +01001465// Whether to provide "io" module
1466#ifndef MICROPY_PY_IO
Jim Mussared01374d92021-08-14 01:43:15 +10001467#define MICROPY_PY_IO (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001468#endif
1469
Damien Georgeaf0932a2018-06-04 15:54:26 +10001470// Whether to provide "io.IOBase" class to support user streams
1471#ifndef MICROPY_PY_IO_IOBASE
Damien Georged01a9812025-05-07 13:49:12 +10001472#define MICROPY_PY_IO_IOBASE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeaf0932a2018-06-04 15:54:26 +10001473#endif
1474
Damien Georgeee3fd462014-05-24 23:03:12 +01001475// Whether to provide "io.BytesIO" class
1476#ifndef MICROPY_PY_IO_BYTESIO
1477#define MICROPY_PY_IO_BYTESIO (1)
1478#endif
1479
Paul Sokolovsky5d93dfb2016-03-25 01:10:49 +02001480// Whether to provide "io.BufferedWriter" class
1481#ifndef MICROPY_PY_IO_BUFFEREDWRITER
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001482#define MICROPY_PY_IO_BUFFEREDWRITER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Paul Sokolovsky5d93dfb2016-03-25 01:10:49 +02001483#endif
1484
Damien Georgeee3fd462014-05-24 23:03:12 +01001485// Whether to provide "struct" module
1486#ifndef MICROPY_PY_STRUCT
Jim Mussared01374d92021-08-14 01:43:15 +10001487#define MICROPY_PY_STRUCT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001488#endif
1489
1490// Whether to provide "sys" module
1491#ifndef MICROPY_PY_SYS
Jim Mussared01374d92021-08-14 01:43:15 +10001492#define MICROPY_PY_SYS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001493#endif
1494
Damien Georgede43b502021-12-17 23:35:32 +11001495// Whether to initialise "sys.path" and "sys.argv" to their defaults in mp_init()
1496#ifndef MICROPY_PY_SYS_PATH_ARGV_DEFAULTS
Damien Georgefe9ffff2021-12-19 08:55:40 +11001497#define MICROPY_PY_SYS_PATH_ARGV_DEFAULTS (MICROPY_PY_SYS)
Damien Georgede43b502021-12-17 23:35:32 +11001498#endif
1499
Paul Sokolovsky4e0eeeb2014-07-03 16:50:11 +03001500// Whether to provide "sys.maxsize" constant
1501#ifndef MICROPY_PY_SYS_MAXSIZE
Jim Mussared0e236ee2021-09-15 23:18:23 +10001502#define MICROPY_PY_SYS_MAXSIZE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky4e0eeeb2014-07-03 16:50:11 +03001503#endif
1504
Paul Sokolovsky1a1d11f2015-12-05 00:09:10 +02001505// Whether to provide "sys.modules" dictionary
1506#ifndef MICROPY_PY_SYS_MODULES
1507#define MICROPY_PY_SYS_MODULES (1)
1508#endif
1509
Paul Sokolovsky8b85d142015-04-25 03:17:41 +03001510// Whether to provide "sys.exc_info" function
1511// Avoid enabling this, this function is Python2 heritage
1512#ifndef MICROPY_PY_SYS_EXC_INFO
1513#define MICROPY_PY_SYS_EXC_INFO (0)
1514#endif
1515
Jim Mussared0e8dfaf2022-10-07 02:13:58 +11001516// Whether to provide "sys.executable", which is the absolute path to the
1517// micropython binary
1518// Intended for use on the "OS" ports (e.g. Unix)
1519#ifndef MICROPY_PY_SYS_EXECUTABLE
1520#define MICROPY_PY_SYS_EXECUTABLE (0)
1521#endif
1522
stijn85c02162023-12-04 15:54:59 +01001523// Whether to provide "sys.intern"
1524#ifndef MICROPY_PY_SYS_INTERN
1525#define MICROPY_PY_SYS_INTERN (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
1526#endif
1527
Damien Georgeee3fd462014-05-24 23:03:12 +01001528// Whether to provide "sys.exit" function
1529#ifndef MICROPY_PY_SYS_EXIT
Paul Sokolovsky403c9302016-12-14 21:10:22 +03001530#define MICROPY_PY_SYS_EXIT (1)
Damien Georgeee3fd462014-05-24 23:03:12 +01001531#endif
1532
Milan Rossacb364702019-08-05 15:06:41 +02001533// Whether to provide "sys.atexit" function (MicroPython extension)
1534#ifndef MICROPY_PY_SYS_ATEXIT
1535#define MICROPY_PY_SYS_ATEXIT (0)
1536#endif
1537
Jim Mussared5e509752023-06-05 16:52:29 +10001538// Whether to provide the "sys.path" attribute (which forces module delegation
1539// and mutable sys attributes to be enabled).
1540// If MICROPY_PY_SYS_PATH_ARGV_DEFAULTS is enabled, this is initialised in
1541// mp_init to an empty list. Otherwise the port must initialise it using
1542// `mp_sys_path = mp_obj_new_list(...)`.
1543#ifndef MICROPY_PY_SYS_PATH
1544#define MICROPY_PY_SYS_PATH (1)
1545#endif
1546
1547// Whether to provide the "sys.argv" attribute.
1548// If MICROPY_PY_SYS_PATH_ARGV_DEFAULTS is enabled, this is initialised in
1549// mp_init to an empty list. Otherwise the port must initialise it using
1550// `mp_obj_list_init(MP_OBJ_TO_PTR(mp_sys_argv), ...);`
1551#ifndef MICROPY_PY_SYS_ARGV
1552#define MICROPY_PY_SYS_ARGV (1)
1553#endif
1554
Damien Georgeac229312021-07-27 00:43:35 +10001555// Whether to provide sys.{ps1,ps2} mutable attributes, to control REPL prompts
1556#ifndef MICROPY_PY_SYS_PS1_PS2
1557#define MICROPY_PY_SYS_PS1_PS2 (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1558#endif
1559
Milan Rossa310b3d12019-08-14 16:09:36 +02001560// Whether to provide "sys.settrace" function
1561#ifndef MICROPY_PY_SYS_SETTRACE
1562#define MICROPY_PY_SYS_SETTRACE (0)
1563#endif
1564
Paul Sokolovskybfc20922017-08-11 09:42:39 +03001565// Whether to provide "sys.getsizeof" function
1566#ifndef MICROPY_PY_SYS_GETSIZEOF
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001567#define MICROPY_PY_SYS_GETSIZEOF (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Paul Sokolovskybfc20922017-08-11 09:42:39 +03001568#endif
1569
Damien Georgeee3fd462014-05-24 23:03:12 +01001570// Whether to provide sys.{stdin,stdout,stderr} objects
1571#ifndef MICROPY_PY_SYS_STDFILES
Jim Mussared0e236ee2021-09-15 23:18:23 +10001572#define MICROPY_PY_SYS_STDFILES (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George3bb8bd82014-04-14 21:20:30 +01001573#endif
1574
Damien George3c4b5d42015-05-13 23:49:21 +01001575// Whether to provide sys.{stdin,stdout,stderr}.buffer object
1576// This is implemented per-port
1577#ifndef MICROPY_PY_SYS_STDIO_BUFFER
Jim Mussared0e236ee2021-09-15 23:18:23 +10001578#define MICROPY_PY_SYS_STDIO_BUFFER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George3c4b5d42015-05-13 23:49:21 +01001579#endif
Paul Sokolovsky82158472014-06-28 03:03:47 +03001580
Damien Georgecac939d2021-07-27 00:41:27 +10001581// Whether to provide sys.tracebacklimit mutable attribute
1582#ifndef MICROPY_PY_SYS_TRACEBACKLIMIT
1583#define MICROPY_PY_SYS_TRACEBACKLIMIT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
1584#endif
1585
Damien Georgebc181552021-07-27 00:39:04 +10001586// Whether the sys module supports attribute delegation
1587// This is enabled automatically when needed by other features
1588#ifndef MICROPY_PY_SYS_ATTR_DELEGATION
Jim Mussared5e509752023-06-05 16:52:29 +10001589#define MICROPY_PY_SYS_ATTR_DELEGATION (MICROPY_PY_SYS_PATH || MICROPY_PY_SYS_PS1_PS2 || MICROPY_PY_SYS_TRACEBACKLIMIT)
Damien Georgebc181552021-07-27 00:39:04 +10001590#endif
1591
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001592// Whether to provide "errno" module
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001593#ifndef MICROPY_PY_ERRNO
1594#define MICROPY_PY_ERRNO (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George596a3fe2016-05-10 10:54:25 +01001595#endif
1596
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001597// Whether to provide the errno.errorcode dict
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001598#ifndef MICROPY_PY_ERRNO_ERRORCODE
1599#define MICROPY_PY_ERRNO_ERRORCODE (1)
Damien Georgef5634062017-02-22 12:53:42 +11001600#endif
1601
Damien Georgeef710282023-08-01 12:39:39 +10001602// Whether to provide "select" module
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001603#ifndef MICROPY_PY_SELECT
1604#define MICROPY_PY_SELECT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky8f5bc3f2016-11-20 23:49:45 +03001605#endif
1606
Damien Georgeef710282023-08-01 12:39:39 +10001607// Whether to enable POSIX optimisations in the "select" module (requires system poll)
1608#ifndef MICROPY_PY_SELECT_POSIX_OPTIMISATIONS
1609#define MICROPY_PY_SELECT_POSIX_OPTIMISATIONS (0)
1610#endif
1611
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001612// Whether to enable the select() function in the "select" module (baremetal
David Lechner87585042021-07-06 18:08:18 -05001613// implementation). This is present for compatibility but can be disabled to
1614// save space.
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001615#ifndef MICROPY_PY_SELECT_SELECT
1616#define MICROPY_PY_SELECT_SELECT (1)
David Lechner87585042021-07-06 18:08:18 -05001617#endif
1618
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001619// Whether to provide the "time" module
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001620#ifndef MICROPY_PY_TIME
1621#define MICROPY_PY_TIME (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_BASIC_FEATURES)
Damien George99555532023-03-10 12:16:00 +11001622#endif
1623
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001624// Whether to provide time.gmtime/localtime/mktime functions
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001625#ifndef MICROPY_PY_TIME_GMTIME_LOCALTIME_MKTIME
1626#define MICROPY_PY_TIME_GMTIME_LOCALTIME_MKTIME (0)
Damien George99555532023-03-10 12:16:00 +11001627#endif
1628
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001629// Whether to provide time.time/time_ns functions
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001630#ifndef MICROPY_PY_TIME_TIME_TIME_NS
1631#define MICROPY_PY_TIME_TIME_TIME_NS (0)
Paul Sokolovskya9728442016-10-14 20:13:02 +03001632#endif
1633
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001634// Period of values returned by time.ticks_ms(), ticks_us(), ticks_cpu()
Paul Sokolovsky76146b32016-10-30 03:02:07 +03001635// functions. Should be power of two. All functions above use the same
1636// period, so if underlying hardware/API has different periods, the
1637// minimum of them should be used. The value below is the maximum value
1638// this parameter can take (corresponding to 30 bit tick values on 32-bit
1639// system).
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001640#ifndef MICROPY_PY_TIME_TICKS_PERIOD
1641#define MICROPY_PY_TIME_TICKS_PERIOD (MP_SMALL_INT_POSITIVE_MASK + 1)
Paul Sokolovsky76146b32016-10-30 03:02:07 +03001642#endif
1643
Damien George27cc0772016-04-22 22:52:33 +00001644// Whether to provide "_thread" module
1645#ifndef MICROPY_PY_THREAD
1646#define MICROPY_PY_THREAD (0)
1647#endif
1648
Damien George4cec63a2016-05-26 10:42:53 +00001649// Whether to make the VM/runtime thread-safe using a global lock
1650// If not enabled then thread safety must be provided at the Python level
1651#ifndef MICROPY_PY_THREAD_GIL
1652#define MICROPY_PY_THREAD_GIL (MICROPY_PY_THREAD)
1653#endif
1654
Damien Georgef6c22a02017-02-06 10:50:43 +11001655// Number of VM jump-loops to do before releasing the GIL.
1656// Set this to 0 to disable the divisor.
1657#ifndef MICROPY_PY_THREAD_GIL_VM_DIVISOR
1658#define MICROPY_PY_THREAD_GIL_VM_DIVISOR (32)
1659#endif
1660
Angus Gratton4bcbe882024-12-10 14:50:42 +11001661// Is a recursive mutex type in use?
1662#ifndef MICROPY_PY_THREAD_RECURSIVE_MUTEX
1663#define MICROPY_PY_THREAD_RECURSIVE_MUTEX (MICROPY_PY_THREAD && !MICROPY_PY_THREAD_GIL)
1664#endif
1665
Paul Sokolovsky82158472014-06-28 03:03:47 +03001666// Extended modules
Paul Sokolovsky510296f2014-08-08 22:51:40 +03001667
Jim Mussared2fbc08c2023-06-08 15:51:50 +10001668#ifndef MICROPY_PY_ASYNCIO
1669#define MICROPY_PY_ASYNCIO (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgebc009fd2020-03-12 16:46:20 +11001670#endif
1671
Damien George8ac9c8f2024-06-19 17:27:31 +10001672#ifndef MICROPY_PY_ASYNCIO_TASK_QUEUE_PUSH_CALLBACK
1673#define MICROPY_PY_ASYNCIO_TASK_QUEUE_PUSH_CALLBACK (0)
1674#endif
1675
Paul Sokolovsky82158472014-06-28 03:03:47 +03001676#ifndef MICROPY_PY_UCTYPES
Jim Mussared0e236ee2021-09-15 23:18:23 +10001677#define MICROPY_PY_UCTYPES (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky82158472014-06-28 03:03:47 +03001678#endif
1679
Paul Sokolovsky38151f32018-10-06 23:34:58 +03001680// Whether to provide SHORT, INT, LONG, etc. types in addition to
1681// exact-bitness types like INT16, INT32, etc.
1682#ifndef MICROPY_PY_UCTYPES_NATIVE_C_TYPES
1683#define MICROPY_PY_UCTYPES_NATIVE_C_TYPES (1)
1684#endif
1685
Jim Mussared35339242023-06-26 13:52:10 +10001686// Whether to provide "deflate" module (decompression-only by default)
1687#ifndef MICROPY_PY_DEFLATE
1688#define MICROPY_PY_DEFLATE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1689#endif
1690
1691// Whether to provide compression support in "deflate" module
1692#ifndef MICROPY_PY_DEFLATE_COMPRESS
1693#define MICROPY_PY_DEFLATE_COMPRESS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_FULL_FEATURES)
1694#endif
1695
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001696#ifndef MICROPY_PY_JSON
1697#define MICROPY_PY_JSON (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George612045f2014-09-17 22:56:34 +01001698#endif
1699
Peter Zügerffc854f2021-02-03 09:24:25 +01001700// Whether to support the "separators" argument to dump, dumps
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001701#ifndef MICROPY_PY_JSON_SEPARATORS
1702#define MICROPY_PY_JSON_SEPARATORS (1)
Peter Zügerffc854f2021-02-03 09:24:25 +01001703#endif
1704
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001705#ifndef MICROPY_PY_OS
1706#define MICROPY_PY_OS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George926b5542022-03-03 17:59:30 +11001707#endif
1708
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001709#ifndef MICROPY_PY_OS_STATVFS
1710#define MICROPY_PY_OS_STATVFS (MICROPY_PY_OS)
Damien George0149cd62022-03-09 12:45:06 +11001711#endif
1712
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001713#ifndef MICROPY_PY_RE
1714#define MICROPY_PY_RE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskyc71e0452014-09-12 18:48:07 +03001715#endif
1716
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001717#ifndef MICROPY_PY_RE_DEBUG
1718#define MICROPY_PY_RE_DEBUG (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Damien George7d851a22019-08-17 23:50:19 +10001719#endif
1720
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001721#ifndef MICROPY_PY_RE_MATCH_GROUPS
1722#define MICROPY_PY_RE_MATCH_GROUPS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Damien George1f864602018-05-24 13:07:42 +10001723#endif
1724
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001725#ifndef MICROPY_PY_RE_MATCH_SPAN_START_END
1726#define MICROPY_PY_RE_MATCH_SPAN_START_END (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Damien George1e9b8712018-05-24 13:08:15 +10001727#endif
1728
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001729#ifndef MICROPY_PY_RE_SUB
1730#define MICROPY_PY_RE_SUB (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgee30a5fc2018-05-24 13:08:51 +10001731#endif
1732
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001733#ifndef MICROPY_PY_HEAPQ
1734#define MICROPY_PY_HEAPQ (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgef5d69792014-10-22 17:37:18 +00001735#endif
1736
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001737#ifndef MICROPY_PY_HASHLIB
1738#define MICROPY_PY_HASHLIB (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskyf4b19c82014-11-22 01:19:13 +02001739#endif
1740
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001741#ifndef MICROPY_PY_HASHLIB_MD5
1742#define MICROPY_PY_HASHLIB_MD5 (0)
Paul Sokolovsky5fe37302018-08-19 11:58:22 +03001743#endif
1744
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001745#ifndef MICROPY_PY_HASHLIB_SHA1
1746#define MICROPY_PY_HASHLIB_SHA1 (0)
Yonatan Goldschmidt66303542018-06-09 02:48:29 +03001747#endif
1748
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001749#ifndef MICROPY_PY_HASHLIB_SHA256
1750#define MICROPY_PY_HASHLIB_SHA256 (1)
Yonatan Goldschmidt66303542018-06-09 02:48:29 +03001751#endif
1752
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001753#ifndef MICROPY_PY_CRYPTOLIB
1754#define MICROPY_PY_CRYPTOLIB (0)
Paul Sokolovsky567bc2d2018-01-07 15:13:56 +02001755#endif
1756
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001757// Depends on MICROPY_PY_CRYPTOLIB
1758#ifndef MICROPY_PY_CRYPTOLIB_CTR
1759#define MICROPY_PY_CRYPTOLIB_CTR (0)
Yonatan Goldschmidtef984362019-04-23 12:39:05 +03001760#endif
1761
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001762#ifndef MICROPY_PY_CRYPTOLIB_CONSTS
1763#define MICROPY_PY_CRYPTOLIB_CONSTS (0)
Yonatan Goldschmidt473fe452018-06-15 17:07:47 +03001764#endif
1765
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001766#ifndef MICROPY_PY_BINASCII
1767#define MICROPY_PY_BINASCII (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskybfdc2052014-11-29 06:19:30 +02001768#endif
1769
Jim Mussared35339242023-06-26 13:52:10 +10001770// Depends on MICROPY_PY_DEFLATE
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001771#ifndef MICROPY_PY_BINASCII_CRC32
1772#define MICROPY_PY_BINASCII_CRC32 (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskyc4283672016-08-24 18:28:43 +03001773#endif
1774
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001775#ifndef MICROPY_PY_RANDOM
1776#define MICROPY_PY_RANDOM (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskya58a91e2016-01-17 12:10:28 +02001777#endif
1778
Damien Georgea53af6c2016-01-22 16:19:32 +00001779// Whether to include: randrange, randint, choice, random, uniform
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001780#ifndef MICROPY_PY_RANDOM_EXTRA_FUNCS
1781#define MICROPY_PY_RANDOM_EXTRA_FUNCS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgea53af6c2016-01-22 16:19:32 +00001782#endif
1783
Paul Sokolovsky01162182015-05-03 20:25:40 +03001784#ifndef MICROPY_PY_MACHINE
1785#define MICROPY_PY_MACHINE (0)
1786#endif
1787
Damien Georgebfc3dde2024-03-14 11:09:14 +11001788// Whether to include: reset, reset_cause
1789#ifndef MICROPY_PY_MACHINE_RESET
1790#define MICROPY_PY_MACHINE_RESET (0)
1791#endif
1792
robert-hh2be45dd2024-07-06 09:18:22 +02001793// Maximum number of arguments for machine.freq()
1794#ifndef MICROPY_PY_MACHINE_FREQ_NUM_ARGS_MAX
1795#define MICROPY_PY_MACHINE_FREQ_NUM_ARGS_MAX (1)
1796#endif
1797
Jim Mussared870000f2021-08-10 01:09:04 +10001798// Whether to include: bitstream
1799#ifndef MICROPY_PY_MACHINE_BITSTREAM
1800#define MICROPY_PY_MACHINE_BITSTREAM (0)
1801#endif
1802
Damien George33168082016-05-31 14:25:19 +01001803// Whether to include: time_pulse_us
1804#ifndef MICROPY_PY_MACHINE_PULSE
1805#define MICROPY_PY_MACHINE_PULSE (0)
1806#endif
1807
Damien Georgedd134e42024-03-14 11:01:33 +11001808// Whether to provide the "machine.mem8/16/32" objects
1809#ifndef MICROPY_PY_MACHINE_MEMX
1810#define MICROPY_PY_MACHINE_MEMX (MICROPY_PY_MACHINE)
1811#endif
1812
Damien George23ccbcf2024-03-14 10:58:41 +11001813// Whether to provide the "machine.Signal" class
1814#ifndef MICROPY_PY_MACHINE_SIGNAL
1815#define MICROPY_PY_MACHINE_SIGNAL (MICROPY_PY_MACHINE)
1816#endif
1817
Damien Georged0837122016-04-12 13:42:35 +01001818#ifndef MICROPY_PY_MACHINE_I2C
1819#define MICROPY_PY_MACHINE_I2C (0)
1820#endif
1821
Damien George4a1ae992022-06-01 11:57:20 +10001822// Whether the low-level I2C transfer function supports a separate write as the first transfer
1823#ifndef MICROPY_PY_MACHINE_I2C_TRANSFER_WRITE1
1824#define MICROPY_PY_MACHINE_I2C_TRANSFER_WRITE1 (0)
1825#endif
1826
Damien George122d9012021-09-02 12:37:00 +10001827// Whether to provide the "machine.SoftI2C" class
1828#ifndef MICROPY_PY_MACHINE_SOFTI2C
1829#define MICROPY_PY_MACHINE_SOFTI2C (0)
1830#endif
1831
Damien George0823c1b2016-09-01 15:07:20 +10001832#ifndef MICROPY_PY_MACHINE_SPI
1833#define MICROPY_PY_MACHINE_SPI (0)
1834#endif
1835
Damien Georgeafe06342021-09-02 12:39:28 +10001836// Whether to provide the "machine.SoftSPI" class
1837#ifndef MICROPY_PY_MACHINE_SOFTSPI
1838#define MICROPY_PY_MACHINE_SOFTSPI (0)
1839#endif
1840
robert-hhee103602023-05-15 11:17:27 +02001841// Values of SPI.MSB and SPI.LSB constants
1842#ifndef MICROPY_PY_MACHINE_SPI_MSB
1843#define MICROPY_PY_MACHINE_SPI_MSB (0)
1844#define MICROPY_PY_MACHINE_SPI_LSB (1)
1845#endif
1846
Damien Georgecd35b8a2022-10-27 14:32:43 +11001847// Whether to provide the "machine.Timer" class
1848#ifndef MICROPY_PY_MACHINE_TIMER
1849#define MICROPY_PY_MACHINE_TIMER (0)
1850#endif
1851
Damien Georgeaab005c2022-04-04 23:07:35 +10001852// The default backlog value for socket.listen(backlog)
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001853#ifndef MICROPY_PY_SOCKET_LISTEN_BACKLOG_DEFAULT
1854#define MICROPY_PY_SOCKET_LISTEN_BACKLOG_DEFAULT (2)
Damien Georgeaab005c2022-04-04 23:07:35 +10001855#endif
1856
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001857#ifndef MICROPY_PY_SSL
1858#define MICROPY_PY_SSL (0)
Damien George772058a2022-01-07 23:59:17 +11001859#endif
1860
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001861// Whether to add finaliser code to ssl objects
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001862#ifndef MICROPY_PY_SSL_FINALISER
Jim Mussaredf3eccb12023-08-23 13:37:06 +10001863#define MICROPY_PY_SSL_FINALISER (MICROPY_ENABLE_FINALISER)
Paul Sokolovskyaaa88672015-10-06 18:10:00 +03001864#endif
1865
iabdalkader2644f572024-10-16 14:08:43 +02001866// Whether to add a root pointer for the current ssl object
1867#ifndef MICROPY_PY_SSL_MBEDTLS_NEED_ACTIVE_CONTEXT
1868#define MICROPY_PY_SSL_MBEDTLS_NEED_ACTIVE_CONTEXT (MICROPY_PY_SSL_ECDSA_SIGN_ALT)
1869#endif
1870
Damien Georgee7020462023-10-13 14:53:02 +11001871// Whether to provide the "vfs" module
1872#ifndef MICROPY_PY_VFS
robert-hh8fdcc252024-02-22 20:50:03 +01001873#define MICROPY_PY_VFS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES && MICROPY_VFS)
Damien Georgee7020462023-10-13 14:53:02 +11001874#endif
1875
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001876#ifndef MICROPY_PY_WEBSOCKET
1877#define MICROPY_PY_WEBSOCKET (0)
Paul Sokolovsky24342dd2016-03-24 19:14:12 +02001878#endif
1879
Damien George53ad6812016-04-08 11:08:37 +01001880#ifndef MICROPY_PY_FRAMEBUF
Jim Mussared0e236ee2021-09-15 23:18:23 +10001881#define MICROPY_PY_FRAMEBUF (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George53ad6812016-04-08 11:08:37 +01001882#endif
1883
Paul Sokolovsky737bd9c2016-07-02 14:57:42 +03001884#ifndef MICROPY_PY_BTREE
1885#define MICROPY_PY_BTREE (0)
1886#endif
1887
Damien Georged41f6dd2021-09-02 12:39:50 +10001888// Whether to provide the low-level "_onewire" module
1889#ifndef MICROPY_PY_ONEWIRE
1890#define MICROPY_PY_ONEWIRE (0)
1891#endif
1892
Jim Mussared975a6872023-07-21 13:39:36 +10001893// Whether to provide the "platform" module
1894#ifndef MICROPY_PY_PLATFORM
1895#define MICROPY_PY_PLATFORM (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1896#endif
1897
Damien George58ebde42014-05-21 20:32:59 +01001898/*****************************************************************************/
1899/* Hooks for a port to add builtins */
1900
Yonatan Goldschmidt343401c2019-02-03 21:24:16 +02001901// Additional builtin function definitions - see modbuiltins.c:mp_module_builtins_globals_table for format.
Damien George58ebde42014-05-21 20:32:59 +01001902#ifndef MICROPY_PORT_BUILTINS
1903#define MICROPY_PORT_BUILTINS
Paul Sokolovsky910843e2014-02-14 12:02:34 +02001904#endif
Damien Georgecaac5422014-03-25 14:18:18 +00001905
stijn22cf0942022-01-05 16:04:58 +01001906// Additional builtin function definitions for extension by command-line, boards or variants.
1907// See modbuiltins.c:mp_module_builtins_globals_table for format.
1908#ifndef MICROPY_PORT_EXTRA_BUILTINS
1909#define MICROPY_PORT_EXTRA_BUILTINS
1910#endif
1911
Damien George57e99eb2014-04-10 22:42:11 +01001912// Additional constant definitions for the compiler - see compile.c:mp_constants_table.
Damien George58ebde42014-05-21 20:32:59 +01001913#ifndef MICROPY_PORT_CONSTANTS
1914#define MICROPY_PORT_CONSTANTS
Damien George57e99eb2014-04-10 22:42:11 +01001915#endif
1916
Damien George136f6752014-01-07 14:54:15 +00001917/*****************************************************************************/
Damien George8fb5c8f2020-02-07 12:07:50 +11001918/* Hooks for a port to wrap functions with attributes */
1919
Damien George84125682021-09-24 12:49:51 +10001920#ifndef MICROPY_WRAP_MP_BINARY_OP
1921#define MICROPY_WRAP_MP_BINARY_OP(f) f
1922#endif
1923
1924#ifndef MICROPY_WRAP_MP_EXECUTE_BYTECODE
1925#define MICROPY_WRAP_MP_EXECUTE_BYTECODE(f) f
1926#endif
1927
1928#ifndef MICROPY_WRAP_MP_LOAD_GLOBAL
1929#define MICROPY_WRAP_MP_LOAD_GLOBAL(f) f
1930#endif
1931
1932#ifndef MICROPY_WRAP_MP_LOAD_NAME
1933#define MICROPY_WRAP_MP_LOAD_NAME(f) f
1934#endif
1935
1936#ifndef MICROPY_WRAP_MP_MAP_LOOKUP
1937#define MICROPY_WRAP_MP_MAP_LOOKUP(f) f
1938#endif
1939
1940#ifndef MICROPY_WRAP_MP_OBJ_GET_TYPE
1941#define MICROPY_WRAP_MP_OBJ_GET_TYPE(f) f
1942#endif
1943
Damien George7cbf8262021-04-28 10:52:19 +10001944#ifndef MICROPY_WRAP_MP_SCHED_EXCEPTION
1945#define MICROPY_WRAP_MP_SCHED_EXCEPTION(f) f
1946#endif
1947
Damien Georgee9e9c762021-04-28 10:57:34 +10001948#ifndef MICROPY_WRAP_MP_SCHED_KEYBOARD_INTERRUPT
1949#define MICROPY_WRAP_MP_SCHED_KEYBOARD_INTERRUPT(f) f
Damien George8fb5c8f2020-02-07 12:07:50 +11001950#endif
1951
Damien George544c3082020-04-23 16:18:14 +10001952#ifndef MICROPY_WRAP_MP_SCHED_SCHEDULE
1953#define MICROPY_WRAP_MP_SCHED_SCHEDULE(f) f
1954#endif
1955
Damien Georged54208a2022-12-16 17:31:21 +11001956#ifndef MICROPY_WRAP_MP_SCHED_VM_ABORT
1957#define MICROPY_WRAP_MP_SCHED_VM_ABORT(f) f
1958#endif
1959
Damien George8fb5c8f2020-02-07 12:07:50 +11001960/*****************************************************************************/
Damien George136f6752014-01-07 14:54:15 +00001961/* Miscellaneous settings */
1962
Damien George28631532015-02-08 13:42:00 +00001963// All uPy objects in ROM must be aligned on at least a 4 byte boundary
1964// so that the small-int/qstr/pointer distinction can be made. For machines
1965// that don't do this (eg 16-bit CPU), define the following macro to something
1966// like __attribute__((aligned(4))).
1967#ifndef MICROPY_OBJ_BASE_ALIGNMENT
1968#define MICROPY_OBJ_BASE_ALIGNMENT
1969#endif
1970
Damien George40047822022-04-21 16:30:23 +10001971// String used for the banner, and sys.version additional information
1972#ifndef MICROPY_BANNER_NAME_AND_VERSION
Jim Mussared3bf70f12023-10-10 16:50:28 +11001973#if MICROPY_PREVIEW_VERSION_2
1974#define MICROPY_BANNER_NAME_AND_VERSION "MicroPython (with v2.0 preview) " MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE
1975#else
Damien George40047822022-04-21 16:30:23 +10001976#define MICROPY_BANNER_NAME_AND_VERSION "MicroPython " MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE
1977#endif
Jim Mussared3bf70f12023-10-10 16:50:28 +11001978#endif
Damien George40047822022-04-21 16:30:23 +10001979
Damien George402df832022-04-26 17:28:39 +10001980// String used for the second part of the banner, and sys.implementation._machine
1981#ifndef MICROPY_BANNER_MACHINE
1982#ifdef MICROPY_HW_BOARD_NAME
1983#define MICROPY_BANNER_MACHINE MICROPY_HW_BOARD_NAME " with " MICROPY_HW_MCU_NAME
1984#else
1985#define MICROPY_BANNER_MACHINE MICROPY_PY_SYS_PLATFORM " [" MICROPY_PLATFORM_COMPILER "] version"
1986#endif
1987#endif
1988
Damien Georgead4656b2021-02-04 16:39:09 +11001989// Number of bytes in an object word: mp_obj_t, mp_uint_t, mp_uint_t
1990#ifndef MP_BYTES_PER_OBJ_WORD
1991#define MP_BYTES_PER_OBJ_WORD (sizeof(mp_uint_t))
Damien George4c307bf2017-04-01 11:39:38 +11001992#endif
1993
Damien George7e956fa2021-02-04 15:32:59 +11001994// Number of bits in a byte
1995#ifndef MP_BITS_PER_BYTE
1996#define MP_BITS_PER_BYTE (8)
Yonatan Goldschmidt1c849d62019-12-01 01:10:12 +02001997#endif
Damien George40f3c022014-07-03 13:25:24 +01001998// mp_int_t value with most significant bit set
Damien Georgec8911902021-02-04 16:39:46 +11001999#define MP_OBJ_WORD_MSBIT_HIGH (((mp_uint_t)1) << (MP_BYTES_PER_OBJ_WORD * MP_BITS_PER_BYTE - 1))
Paul Sokolovskyfc5aac82014-01-12 16:10:19 +02002000
Damien Georgea9bcd512014-10-06 13:44:59 +00002001// Make sure both MP_ENDIANNESS_LITTLE and MP_ENDIANNESS_BIG are
2002// defined and that they are the opposite of each other.
2003#if defined(MP_ENDIANNESS_LITTLE)
2004#define MP_ENDIANNESS_BIG (!MP_ENDIANNESS_LITTLE)
2005#elif defined(MP_ENDIANNESS_BIG)
2006#define MP_ENDIANNESS_LITTLE (!MP_ENDIANNESS_BIG)
2007#else
Damien George69661f32020-02-27 15:36:53 +11002008// Endianness not defined by port so try to autodetect it.
Damien Georgea9bcd512014-10-06 13:44:59 +00002009 #if defined(__BYTE_ORDER__)
2010 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
2011 #define MP_ENDIANNESS_LITTLE (1)
Damien George96303762018-05-07 13:36:52 +10002012 #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
Damien Georgea9bcd512014-10-06 13:44:59 +00002013 #define MP_ENDIANNESS_LITTLE (0)
2014 #endif
Damien Georgea9bcd512014-10-06 13:44:59 +00002015 #else
Damien George4e4772b2015-05-30 23:12:30 +01002016 #include <endian.h>
2017 #if defined(__BYTE_ORDER)
2018 #if __BYTE_ORDER == __LITTLE_ENDIAN
2019 #define MP_ENDIANNESS_LITTLE (1)
Damien George96303762018-05-07 13:36:52 +10002020 #elif __BYTE_ORDER == __BIG_ENDIAN
Damien George4e4772b2015-05-30 23:12:30 +01002021 #define MP_ENDIANNESS_LITTLE (0)
2022 #endif
Damien George4e4772b2015-05-30 23:12:30 +01002023 #endif
Damien Georgea9bcd512014-10-06 13:44:59 +00002024 #endif
Damien George96303762018-05-07 13:36:52 +10002025 #ifndef MP_ENDIANNESS_LITTLE
2026 #error endianness not defined and cannot detect it
2027 #endif
Damien Georgea9bcd512014-10-06 13:44:59 +00002028 #define MP_ENDIANNESS_BIG (!MP_ENDIANNESS_LITTLE)
Andrew Schellercc837372014-04-14 02:39:56 +01002029#endif
Paul Sokolovsky2da81fa2014-04-11 03:44:00 +03002030
Damien George3c658a42014-08-24 16:28:17 +01002031// Make a pointer to RAM callable (eg set lower bit for Thumb code)
2032// (This scheme won't work if we want to mix Thumb and normal ARM code.)
2033#ifndef MICROPY_MAKE_POINTER_CALLABLE
2034#define MICROPY_MAKE_POINTER_CALLABLE(p) (p)
2035#endif
2036
Damien George5b22bde2024-09-25 14:06:00 +10002037// Whether native text/BSS/rodata memory loaded from .mpy files is explicitly tracked
2038// so that the GC cannot reclaim it.
2039//
2040// In general a port should let these options have their defaults, but the defaults here
2041// can be overridden if needed by defining both MICROPY_PERSISTENT_CODE_TRACK_FUN_DATA
2042// and MICROPY_PERSISTENT_CODE_TRACK_BSS_RODATA.
2043#ifndef MICROPY_PERSISTENT_CODE_TRACK_FUN_DATA
2044#if MICROPY_EMIT_MACHINE_CODE && MICROPY_PERSISTENT_CODE_LOAD
2045// Pointer tracking is required when loading native code is enabled.
2046#if defined(MP_PLAT_ALLOC_EXEC) || defined(MP_PLAT_COMMIT_EXEC)
2047// If a port defined a custom allocator or commit function for native text, then the
2048// text does not need to be tracked (its allocation is managed by the port). But the
2049// BSS/rodata must be tracked (if there is any) because if there are any pointers to it
2050// in the function data, they aren't traced by the GC.
2051#define MICROPY_PERSISTENT_CODE_TRACK_FUN_DATA (0)
2052#define MICROPY_PERSISTENT_CODE_TRACK_BSS_RODATA (1)
2053#else
2054// If a port uses the default allocator (the GC heap) then all native text is allocated
2055// on the GC heap. But it's not guaranteed that a pointer to the head of the block of
2056// native text (which may contain multiple native functions) will be retained for the GC
2057// to trace. This is because native functions can start inside the big block of text
2058// and so it's possible that the only GC-reachable pointers are pointers inside.
2059// Therefore the big block is explicitly tracked. If there is any BSS/rodata memory,
2060// then it does not need to be explicitly tracked because a pointer to it is stored into
2061// the function text via `mp_native_relocate()`.
2062#define MICROPY_PERSISTENT_CODE_TRACK_FUN_DATA (1)
2063#define MICROPY_PERSISTENT_CODE_TRACK_BSS_RODATA (0)
2064#endif
2065#else // MICROPY_EMIT_MACHINE_CODE && MICROPY_PERSISTENT_CODE_LOAD
2066// Pointer tracking not needed when loading native code is disabled.
2067#define MICROPY_PERSISTENT_CODE_TRACK_FUN_DATA (0)
2068#define MICROPY_PERSISTENT_CODE_TRACK_BSS_RODATA (0)
2069#endif
Fabian Vogtb7235b82014-09-03 16:59:33 +02002070#endif
2071
Damien George5b22bde2024-09-25 14:06:00 +10002072// If these macros are defined then the memory allocated by them does not need to be
2073// traced by the GC. But if they are left undefined then the GC heap will be used as
2074// the allocator and the memory must be traced by the GC. See also above logic for
2075// enabling MICROPY_PERSISTENT_CODE_TRACK_FUN_DATA and
2076// MICROPY_PERSISTENT_CODE_TRACK_BSS_RODATA.
2077#ifndef MP_PLAT_ALLOC_EXEC
2078#define MP_PLAT_ALLOC_EXEC(min_size, ptr, size) do { *ptr = m_new(byte, min_size); *size = min_size; } while (0)
Fabian Vogtb7235b82014-09-03 16:59:33 +02002079#define MP_PLAT_FREE_EXEC(ptr, size) m_del(byte, ptr, size)
2080#endif
2081
Angus Gratton519c24d2023-08-02 16:49:44 +10002082// Allocating new heap area at runtime requires port to be able to allocate from system heap
2083#if MICROPY_GC_SPLIT_HEAP_AUTO
2084#ifndef MP_PLAT_ALLOC_HEAP
2085#define MP_PLAT_ALLOC_HEAP(size) malloc(size)
2086#endif
2087#ifndef MP_PLAT_FREE_HEAP
2088#define MP_PLAT_FREE_HEAP(ptr) free(ptr)
2089#endif
2090#endif
2091
Damien George7f9d1d62015-04-09 23:56:15 +01002092// This macro is used to do all output (except when MICROPY_PY_IO is defined)
2093#ifndef MP_PLAT_PRINT_STRN
Damien George4300c7d2015-10-15 00:05:55 +01002094#define MP_PLAT_PRINT_STRN(str, len) mp_hal_stdout_tx_strn_cooked(str, len)
Damien George7f9d1d62015-04-09 23:56:15 +01002095#endif
2096
Paul Sokolovsky722e5622014-09-06 19:17:23 +03002097#ifndef MP_SSIZE_MAX
2098#define MP_SSIZE_MAX SSIZE_MAX
2099#endif
2100
Damien George40f3c022014-07-03 13:25:24 +01002101// printf format spec to use for mp_int_t and friends
Damien George136f6752014-01-07 14:54:15 +00002102#ifndef INT_FMT
stijn3baf6b52015-11-20 15:59:06 +01002103#if defined(__LP64__)
Damien George40f3c022014-07-03 13:25:24 +01002104// Archs where mp_int_t == long, long != int
Paul Sokolovskyc90c0f62014-01-04 01:57:00 +02002105#define UINT_FMT "%lu"
2106#define INT_FMT "%ld"
stijn3baf6b52015-11-20 15:59:06 +01002107#elif defined(_WIN64)
stijn0a4eb4d2015-12-18 10:20:33 +01002108#define UINT_FMT "%llu"
2109#define INT_FMT "%lld"
Paul Sokolovskyc90c0f62014-01-04 01:57:00 +02002110#else
Damien George40f3c022014-07-03 13:25:24 +01002111// Archs where mp_int_t == int
Paul Sokolovskyc90c0f62014-01-04 01:57:00 +02002112#define UINT_FMT "%u"
2113#define INT_FMT "%d"
2114#endif
stijn84fa3312020-04-16 09:13:57 +02002115#endif // INT_FMT
Paul Sokolovskye9085912014-04-30 05:35:18 +03002116
2117// Modifier for function which doesn't return
Alessandro Gattif47e2142025-01-15 16:25:55 +01002118#ifndef MP_NORETURN
2119#define MP_NORETURN __attribute__((noreturn))
2120#endif
2121
2122#if !MICROPY_PREVIEW_VERSION_2
2123#define NORETURN MP_NORETURN
stijn01d6be42014-05-05 12:18:27 +02002124#endif
mux5c8db482014-06-21 17:24:55 +02002125
2126// Modifier for weak functions
2127#ifndef MP_WEAK
2128#define MP_WEAK __attribute__((weak))
2129#endif
Paul Sokolovsky361909e2014-12-29 00:51:06 +02002130
Paul Sokolovsky0f5bf1a2016-06-15 23:52:00 +03002131// Modifier for functions which should be never inlined
2132#ifndef MP_NOINLINE
2133#define MP_NOINLINE __attribute__((noinline))
2134#endif
2135
Paul Sokolovsky1bc29112016-08-07 22:36:05 +03002136// Modifier for functions which should be always inlined
2137#ifndef MP_ALWAYSINLINE
2138#define MP_ALWAYSINLINE __attribute__((always_inline))
2139#endif
2140
Paul Sokolovsky361909e2014-12-29 00:51:06 +02002141// Condition is likely to be true, to help branch prediction
2142#ifndef MP_LIKELY
2143#define MP_LIKELY(x) __builtin_expect((x), 1)
2144#endif
2145
2146// Condition is likely to be false, to help branch prediction
2147#ifndef MP_UNLIKELY
2148#define MP_UNLIKELY(x) __builtin_expect((x), 0)
2149#endif
Damien George9ddbe292014-12-29 01:02:19 +00002150
Damien George0c80cb32019-08-19 15:50:02 +10002151// To annotate that code is unreachable
2152#ifndef MP_UNREACHABLE
2153#if defined(__GNUC__)
2154#define MP_UNREACHABLE __builtin_unreachable();
2155#else
2156#define MP_UNREACHABLE for (;;);
2157#endif
2158#endif
2159
Emil Renner Berthingccd92332019-11-28 12:47:21 +01002160// Explicitly annotate switch case fall throughs
2161#if defined(__GNUC__) && __GNUC__ >= 7
2162#define MP_FALLTHROUGH __attribute__((fallthrough));
2163#else
2164#define MP_FALLTHROUGH
2165#endif
2166
Paul Sokolovsky1b146e92017-11-08 19:45:18 +02002167#ifndef MP_HTOBE16
2168#if MP_ENDIANNESS_LITTLE
Damien Georgefeb25772020-03-20 21:47:07 +11002169#define MP_HTOBE16(x) ((uint16_t)((((x) & 0xff) << 8) | (((x) >> 8) & 0xff)))
Damien George69661f32020-02-27 15:36:53 +11002170#define MP_BE16TOH(x) MP_HTOBE16(x)
Paul Sokolovsky1b146e92017-11-08 19:45:18 +02002171#else
Damien George69661f32020-02-27 15:36:53 +11002172#define MP_HTOBE16(x) (x)
2173#define MP_BE16TOH(x) (x)
Paul Sokolovsky1b146e92017-11-08 19:45:18 +02002174#endif
2175#endif
2176
2177#ifndef MP_HTOBE32
2178#if MP_ENDIANNESS_LITTLE
Damien Georgefeb25772020-03-20 21:47:07 +11002179#define MP_HTOBE32(x) ((uint32_t)((((x) & 0xff) << 24) | (((x) & 0xff00) << 8) | (((x) >> 8) & 0xff00) | (((x) >> 24) & 0xff)))
Damien George69661f32020-02-27 15:36:53 +11002180#define MP_BE32TOH(x) MP_HTOBE32(x)
Paul Sokolovsky1b146e92017-11-08 19:45:18 +02002181#else
Damien George69661f32020-02-27 15:36:53 +11002182#define MP_HTOBE32(x) (x)
2183#define MP_BE32TOH(x) (x)
Paul Sokolovsky1b146e92017-11-08 19:45:18 +02002184#endif
2185#endif
2186
Paul Sokolovsky2f5d1132018-12-21 14:20:55 +03002187// Warning categories are by default implemented as strings, though
2188// hook is left for a port to define them as something else.
2189#if MICROPY_WARNINGS_CATEGORY
Damien George69661f32020-02-27 15:36:53 +11002190#ifndef MP_WARN_CAT
2191#define MP_WARN_CAT(x) #x
2192#endif
Paul Sokolovsky2f5d1132018-12-21 14:20:55 +03002193#else
Damien George69661f32020-02-27 15:36:53 +11002194#undef MP_WARN_CAT
2195#define MP_WARN_CAT(x) (NULL)
Paul Sokolovsky2f5d1132018-12-21 14:20:55 +03002196#endif
2197
Alexander Steffen299bc622017-06-29 23:14:58 +02002198#endif // MICROPY_INCLUDED_PY_MPCONFIG_H