blob: ed5ccccb6a52a8bbacd2431e0bf972f0d8946374 [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
Alessandro Gatti1006ed62025-01-25 09:33:41 +0100409// Whether to support uncommon Xtensa inline assembler opcodes
410#ifndef MICROPY_EMIT_INLINE_XTENSA_UNCOMMON_OPCODES
411#define MICROPY_EMIT_INLINE_XTENSA_UNCOMMON_OPCODES (0)
412#endif
413
Damien George9adedce2019-09-13 13:15:12 +1000414// Whether to emit Xtensa-Windowed native code
415#ifndef MICROPY_EMIT_XTENSAWIN
416#define MICROPY_EMIT_XTENSAWIN (0)
417#endif
418
Alessandro Gatti8338f662024-06-08 11:00:08 +0200419// Whether to emit RISC-V RV32 native code
420#ifndef MICROPY_EMIT_RV32
421#define MICROPY_EMIT_RV32 (0)
422#endif
423
Alessandro Gatti268acb72024-08-25 16:28:35 +0200424// Whether to enable the RISC-V RV32 inline assembler
425#ifndef MICROPY_EMIT_INLINE_RV32
426#define MICROPY_EMIT_INLINE_RV32 (0)
427#endif
428
Alessandro Gatti2ab06b62025-06-26 21:56:26 +0200429// Whether to enable the human-readable native instructions emitter
430#ifndef MICROPY_EMIT_NATIVE_DEBUG
431#define MICROPY_EMIT_NATIVE_DEBUG (0)
432#endif
433
Damien George2ac4af62014-08-15 16:45:41 +0100434// Convenience definition for whether any native emitter is enabled
Damien George9dbc7872024-03-07 11:38:27 +1100435#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 +1000436
Damien George1fb01bd2022-05-10 13:56:24 +1000437// Some architectures cannot read byte-wise from executable memory. In this case
438// the prelude for a native function (which usually sits after the machine code)
439// must be separated and placed somewhere where it can be read byte-wise.
440#define MICROPY_EMIT_NATIVE_PRELUDE_SEPARATE_FROM_MACHINE_CODE (MICROPY_EMIT_XTENSAWIN)
Damien George2ac4af62014-08-15 16:45:41 +0100441
Damien Georgead297a12016-12-09 13:17:49 +1100442// Convenience definition for whether any inline assembler emitter is enabled
Alessandro Gatti268acb72024-08-25 16:28:35 +0200443#define MICROPY_EMIT_INLINE_ASM (MICROPY_EMIT_INLINE_THUMB || MICROPY_EMIT_INLINE_XTENSA || MICROPY_EMIT_INLINE_RV32)
Damien Georgead297a12016-12-09 13:17:49 +1100444
Jun Wub152bbd2019-05-06 00:31:11 -0700445// Convenience definition for whether any native or inline assembler emitter is enabled
446#define MICROPY_EMIT_MACHINE_CODE (MICROPY_EMIT_NATIVE || MICROPY_EMIT_INLINE_ASM)
447
Damien George136f6752014-01-07 14:54:15 +0000448/*****************************************************************************/
Damien George58ebde42014-05-21 20:32:59 +0100449/* Compiler configuration */
450
Damien Georgedd5353a2015-12-18 12:35:44 +0000451// Whether to include the compiler
452#ifndef MICROPY_ENABLE_COMPILER
Jim Mussared01374d92021-08-14 01:43:15 +1000453#define MICROPY_ENABLE_COMPILER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgedd5353a2015-12-18 12:35:44 +0000454#endif
455
Damien Georgeea235202016-02-11 22:30:53 +0000456// Whether the compiler is dynamically configurable (ie at runtime)
Damien Georgea4f1d822019-05-29 21:17:29 +1000457// This will disable the ability to execute native/viper code
Damien Georgeea235202016-02-11 22:30:53 +0000458#ifndef MICROPY_DYNAMIC_COMPILER
459#define MICROPY_DYNAMIC_COMPILER (0)
460#endif
461
Damien George2b8e88c2023-06-24 17:02:58 +1000462// Whether the compiler allows compiling top-level await expressions
463#ifndef MICROPY_COMP_ALLOW_TOP_LEVEL_AWAIT
464#define MICROPY_COMP_ALLOW_TOP_LEVEL_AWAIT (0)
465#endif
466
Damien George64f2b212015-10-08 14:58:15 +0100467// Whether to enable constant folding; eg 1+2 rewritten as 3
468#ifndef MICROPY_COMP_CONST_FOLDING
Jim Mussared01374d92021-08-14 01:43:15 +1000469#define MICROPY_COMP_CONST_FOLDING (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George64f2b212015-10-08 14:58:15 +0100470#endif
471
Damien George35c0cff2022-03-31 14:27:47 +1100472// Whether to compile constant tuples immediately to their respective objects; eg (1, True)
473// Otherwise the tuple will be built at runtime
474#ifndef MICROPY_COMP_CONST_TUPLE
475#define MICROPY_COMP_CONST_TUPLE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
476#endif
477
Damien George07796932019-02-27 00:10:04 +1100478// Whether to enable optimisations for constant literals, eg OrderedDict
479#ifndef MICROPY_COMP_CONST_LITERAL
Jim Mussared01374d92021-08-14 01:43:15 +1000480#define MICROPY_COMP_CONST_LITERAL (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George07796932019-02-27 00:10:04 +1100481#endif
482
Damien Georgeddd1e182015-01-10 14:07:24 +0000483// Whether to enable lookup of constants in modules; eg module.CONST
484#ifndef MICROPY_COMP_MODULE_CONST
Jim Mussared0e236ee2021-09-15 23:18:23 +1000485#define MICROPY_COMP_MODULE_CONST (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgeddd1e182015-01-10 14:07:24 +0000486#endif
487
Damien George58ebde42014-05-21 20:32:59 +0100488// Whether to enable constant optimisation; id = const(value)
489#ifndef MICROPY_COMP_CONST
Jim Mussared01374d92021-08-14 01:43:15 +1000490#define MICROPY_COMP_CONST (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George58ebde42014-05-21 20:32:59 +0100491#endif
492
Yoctopuce dev69ead7d2025-01-28 00:26:08 +0100493// Whether to enable float constant folding like 1.2+3.4 (when MICROPY_COMP_CONST_FOLDING is also enabled)
494// and constant optimisation like id = const(1.2) (when MICROPY_COMP_CONST is also enabled)
495// and constant lookup like math.inf (when MICROPY_COMP_MODULE_CONST is also enabled)
496#ifndef MICROPY_COMP_CONST_FLOAT
497#define MICROPY_COMP_CONST_FLOAT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
498#endif
499
Damien George42e0c592015-03-14 13:11:35 +0000500// Whether to enable optimisation of: a, b = c, d
501// Costs 124 bytes (Thumb2)
502#ifndef MICROPY_COMP_DOUBLE_TUPLE_ASSIGN
Jim Mussared01374d92021-08-14 01:43:15 +1000503#define MICROPY_COMP_DOUBLE_TUPLE_ASSIGN (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George42e0c592015-03-14 13:11:35 +0000504#endif
505
506// Whether to enable optimisation of: a, b, c = d, e, f
Damien George253f2bd2018-02-04 13:35:21 +1100507// Requires MICROPY_COMP_DOUBLE_TUPLE_ASSIGN and costs 68 bytes (Thumb2)
Damien George42e0c592015-03-14 13:11:35 +0000508#ifndef MICROPY_COMP_TRIPLE_TUPLE_ASSIGN
Jim Mussared0e236ee2021-09-15 23:18:23 +1000509#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George42e0c592015-03-14 13:11:35 +0000510#endif
511
Damien Georgeae54fbf2017-04-22 14:58:01 +1000512// Whether to enable optimisation of: return a if b else c
513// Costs about 80 bytes (Thumb2) and saves 2 bytes of bytecode for each use
514#ifndef MICROPY_COMP_RETURN_IF_EXPR
Jim Mussared0e236ee2021-09-15 23:18:23 +1000515#define MICROPY_COMP_RETURN_IF_EXPR (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgeae54fbf2017-04-22 14:58:01 +1000516#endif
517
Damien George58ebde42014-05-21 20:32:59 +0100518/*****************************************************************************/
Damien George136f6752014-01-07 14:54:15 +0000519/* Internal debugging stuff */
520
521// Whether to collect memory allocation stats
522#ifndef MICROPY_MEM_STATS
523#define MICROPY_MEM_STATS (0)
524#endif
525
Damien Georgeda2d2b62018-08-02 14:04:44 +1000526// The mp_print_t printer used for debugging output
527#ifndef MICROPY_DEBUG_PRINTER
528#define MICROPY_DEBUG_PRINTER (&mp_plat_print)
529#endif
530
Damien Georgecbd2f742014-01-19 11:48:48 +0000531// Whether to build functions that print debugging info:
Damien George3417bc22014-05-10 10:36:38 +0100532// mp_bytecode_print
Damien Georgecbd2f742014-01-19 11:48:48 +0000533// mp_parse_node_print
534#ifndef MICROPY_DEBUG_PRINTERS
535#define MICROPY_DEBUG_PRINTERS (0)
Damien Georged3ebe482014-01-07 15:20:33 +0000536#endif
537
Stefan Naumannace9fb52017-07-24 18:55:14 +0200538// Whether to enable all debugging outputs (it will be extremely verbose)
539#ifndef MICROPY_DEBUG_VERBOSE
540#define MICROPY_DEBUG_VERBOSE (0)
541#endif
542
Damien George02cc2882019-03-08 15:48:20 +1100543// Whether to enable debugging versions of MP_OBJ_NULL/STOP_ITERATION/SENTINEL
544#ifndef MICROPY_DEBUG_MP_OBJ_SENTINELS
545#define MICROPY_DEBUG_MP_OBJ_SENTINELS (0)
546#endif
547
Damien George843dcd42020-09-30 23:34:42 +1000548// Whether to print parse rule names (rather than integers) in mp_parse_node_print
549#ifndef MICROPY_DEBUG_PARSE_RULE_NAME
550#define MICROPY_DEBUG_PARSE_RULE_NAME (0)
551#endif
552
Damien George6d199342019-01-04 17:09:41 +1100553// Whether to enable a simple VM stack overflow check
554#ifndef MICROPY_DEBUG_VM_STACK_OVERFLOW
555#define MICROPY_DEBUG_VM_STACK_OVERFLOW (0)
556#endif
557
Jeff Epler84071592021-08-27 09:02:03 -0500558// Whether to enable extra instrumentation for valgrind
559#ifndef MICROPY_DEBUG_VALGRIND
560#define MICROPY_DEBUG_VALGRIND (0)
561#endif
562
Damien George136f6752014-01-07 14:54:15 +0000563/*****************************************************************************/
Damien Georgeee3fd462014-05-24 23:03:12 +0100564/* Optimisations */
565
566// Whether to use computed gotos in the VM, or a switch
Jim Mussaredb51e7e92021-08-19 17:49:33 +1000567// Computed gotos are roughly 10% faster, and increase VM code size by a little,
568// e.g. ~1kiB on Cortex M4.
Damien George44f0a4d2017-09-18 23:53:33 +1000569// Note: enabling this will use the gcc-specific extensions of ranged designated
570// initialisers and addresses of labels, which are not part of the C99 standard.
Damien Georgeee3fd462014-05-24 23:03:12 +0100571#ifndef MICROPY_OPT_COMPUTED_GOTO
572#define MICROPY_OPT_COMPUTED_GOTO (0)
573#endif
574
Jim Mussared7b89ad82021-08-19 22:46:40 +1000575// Optimise the fast path for loading attributes from instance types. Increases
576// Thumb2 code size by about 48 bytes.
577#ifndef MICROPY_OPT_LOAD_ATTR_FAST_PATH
Jim Mussared0e236ee2021-09-15 23:18:23 +1000578#define MICROPY_OPT_LOAD_ATTR_FAST_PATH (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Jim Mussared7b89ad82021-08-19 22:46:40 +1000579#endif
580
Jim Mussared11ef8f22021-08-18 14:52:48 +1000581// Use extra RAM to cache map lookups by remembering the likely location of
582// the index. Avoids the hash computation on unordered maps, and avoids the
583// linear search on ordered (especially in-ROM) maps. Can provide a +10-15%
584// performance improvement on benchmarks involving lots of attribute access
585// or dictionary lookup.
586#ifndef MICROPY_OPT_MAP_LOOKUP_CACHE
Jim Mussared0e236ee2021-09-15 23:18:23 +1000587#define MICROPY_OPT_MAP_LOOKUP_CACHE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Jim Mussared11ef8f22021-08-18 14:52:48 +1000588#endif
589
590// How much RAM (in bytes) to use for the map lookup cache.
591#ifndef MICROPY_OPT_MAP_LOOKUP_CACHE_SIZE
592#define MICROPY_OPT_MAP_LOOKUP_CACHE_SIZE (128)
593#endif
594
Doug Currie2e2e15c2016-01-30 22:35:58 -0500595// Whether to use fast versions of bitwise operations (and, or, xor) when the
596// arguments are both positive. Increases Thumb2 code size by about 250 bytes.
597#ifndef MICROPY_OPT_MPZ_BITWISE
Jim Mussared0e236ee2021-09-15 23:18:23 +1000598#define MICROPY_OPT_MPZ_BITWISE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Doug Currie2e2e15c2016-01-30 22:35:58 -0500599#endif
600
Christopher Swenson8c656752018-08-27 10:32:21 +1000601
602// Whether math.factorial is large, fast and recursive (1) or small and slow (0).
603#ifndef MICROPY_OPT_MATH_FACTORIAL
Jim Mussared0e236ee2021-09-15 23:18:23 +1000604#define MICROPY_OPT_MATH_FACTORIAL (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Christopher Swenson8c656752018-08-27 10:32:21 +1000605#endif
606
Damien Georgeee3fd462014-05-24 23:03:12 +0100607/*****************************************************************************/
608/* Python internal features */
Damien George136f6752014-01-07 14:54:15 +0000609
J. Neuschäfer7b050b32023-04-02 19:58:42 +0200610// Use a special long jump in nlrthumb.c, which may be necessary if nlr.o and
611// nlrthumb.o are linked far apart from each other.
612#ifndef MICROPY_NLR_THUMB_USE_LONG_JUMP
613#define MICROPY_NLR_THUMB_USE_LONG_JUMP (0)
614#endif
615
Damien George20993682018-02-20 18:00:44 +1100616// Whether to enable import of external modules
617// When disabled, only importing of built-in modules is supported
618// When enabled, a port must implement mp_import_stat (among other things)
619#ifndef MICROPY_ENABLE_EXTERNAL_IMPORT
Jim Mussared01374d92021-08-14 01:43:15 +1000620#define MICROPY_ENABLE_EXTERNAL_IMPORT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George20993682018-02-20 18:00:44 +1100621#endif
622
Damien George6b239c22016-11-16 16:04:57 +1100623// Whether to use the POSIX reader for importing files
624#ifndef MICROPY_READER_POSIX
625#define MICROPY_READER_POSIX (0)
626#endif
627
Damien Georgedcb9ea72017-01-27 15:10:09 +1100628// Whether to use the VFS reader for importing files
629#ifndef MICROPY_READER_VFS
630#define MICROPY_READER_VFS (0)
631#endif
632
Sean Burtone33bc592018-12-13 12:10:35 +0000633// Whether any readers have been defined
634#ifndef MICROPY_HAS_FILE_READER
635#define MICROPY_HAS_FILE_READER (MICROPY_READER_POSIX || MICROPY_READER_VFS)
636#endif
637
Damien George40d84302016-02-15 22:46:21 +0000638// Hook for the VM at the start of the opcode loop (can contain variable
639// definitions usable by the other hook functions)
640#ifndef MICROPY_VM_HOOK_INIT
641#define MICROPY_VM_HOOK_INIT
642#endif
643
644// Hook for the VM during the opcode loop (but only after jump opcodes)
645#ifndef MICROPY_VM_HOOK_LOOP
646#define MICROPY_VM_HOOK_LOOP
647#endif
648
649// Hook for the VM just before return opcode is finished being interpreted
650#ifndef MICROPY_VM_HOOK_RETURN
651#define MICROPY_VM_HOOK_RETURN
652#endif
653
Damien George916c3fd2021-04-25 22:24:49 +1000654// Hook for mp_sched_schedule when a function gets scheduled on sched_queue
655// (this macro executes within an atomic section)
656#ifndef MICROPY_SCHED_HOOK_SCHEDULED
657#define MICROPY_SCHED_HOOK_SCHEDULED
658#endif
659
Damien Georged3ebe482014-01-07 15:20:33 +0000660// Whether to include the garbage collector
661#ifndef MICROPY_ENABLE_GC
662#define MICROPY_ENABLE_GC (0)
663#endif
664
Ayke van Laethembcc827d2018-01-24 02:09:58 +0100665// Whether the garbage-collected heap can be split over multiple memory areas.
666#ifndef MICROPY_GC_SPLIT_HEAP
667#define MICROPY_GC_SPLIT_HEAP (0)
668#endif
669
Angus Gratton519c24d2023-08-02 16:49:44 +1000670// Whether regions should be added/removed from the split heap as needed.
671#ifndef MICROPY_GC_SPLIT_HEAP_AUTO
672#define MICROPY_GC_SPLIT_HEAP_AUTO (0)
673#endif
674
Laurens Valkfe120482021-10-26 10:47:04 +0200675// Hook to run code during time consuming garbage collector operations
David Lechner468ed212023-03-15 16:48:16 -0500676// *i* is the loop index variable (e.g. can be used to run every x loops)
Laurens Valkfe120482021-10-26 10:47:04 +0200677#ifndef MICROPY_GC_HOOK_LOOP
David Lechner468ed212023-03-15 16:48:16 -0500678#define MICROPY_GC_HOOK_LOOP(i)
Laurens Valkfe120482021-10-26 10:47:04 +0200679#endif
680
Damien Georgefca57012022-05-04 12:12:11 +1000681// Whether to provide m_tracked_calloc, m_tracked_free functions
682#ifndef MICROPY_TRACKED_ALLOC
683#define MICROPY_TRACKED_ALLOC (0)
684#endif
685
Damien George12bab722014-04-05 20:35:48 +0100686// Whether to enable finalisers in the garbage collector (ie call __del__)
Damien George7860c2a2014-11-05 21:16:41 +0000687#ifndef MICROPY_ENABLE_FINALISER
Jim Mussared0e236ee2021-09-15 23:18:23 +1000688#define MICROPY_ENABLE_FINALISER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George12bab722014-04-05 20:35:48 +0100689#endif
690
Damien George02d830c2017-11-26 23:28:40 +1100691// Whether to enable a separate allocator for the Python stack.
692// If enabled then the code must call mp_pystack_init before mp_init.
693#ifndef MICROPY_ENABLE_PYSTACK
694#define MICROPY_ENABLE_PYSTACK (0)
695#endif
696
697// Number of bytes that memory returned by mp_pystack_alloc will be aligned by.
698#ifndef MICROPY_PYSTACK_ALIGN
699#define MICROPY_PYSTACK_ALIGN (8)
700#endif
701
Paul Sokolovsky23668692014-06-25 03:03:34 +0300702// Whether to check C stack usage. C stack used for calling Python functions,
703// etc. Not checking means segfault on overflow.
704#ifndef MICROPY_STACK_CHECK
Jim Mussared0e236ee2021-09-15 23:18:23 +1000705#define MICROPY_STACK_CHECK (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky23668692014-06-25 03:03:34 +0300706#endif
707
Angus Gratton86f2c282024-08-06 15:51:22 +1000708// Additional margin between the places in the runtime where Python stack is
709// checked and the actual end of the C stack. Needs to be large enough to avoid
710// overflows from function calls made between checks.
711#ifndef MICROPY_STACK_CHECK_MARGIN
712#define MICROPY_STACK_CHECK_MARGIN (0)
713#endif
714
Dave Hylands5b7fd202014-07-01 23:46:53 -0700715// Whether to have an emergency exception buffer
716#ifndef MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF
717#define MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF (0)
718#endif
719#if MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF
Damien George69661f32020-02-27 15:36:53 +1100720#ifndef MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE
721#define MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE (0) // 0 - implies dynamic allocation
722#endif
Dave Hylands5b7fd202014-07-01 23:46:53 -0700723#endif
724
Damien Georgebbb4b982017-04-10 17:19:36 +1000725// Whether to provide the mp_kbd_exception object, and micropython.kbd_intr function
Damien George7f1da0a2016-12-15 13:00:19 +1100726#ifndef MICROPY_KBD_EXCEPTION
Jim Mussared0e236ee2021-09-15 23:18:23 +1000727#define MICROPY_KBD_EXCEPTION (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George7f1da0a2016-12-15 13:00:19 +1100728#endif
729
Paul Sokolovsky1c9210b2015-12-23 00:06:37 +0200730// Prefer to raise KeyboardInterrupt asynchronously (from signal or interrupt
731// handler) - if supported by a particular port.
732#ifndef MICROPY_ASYNC_KBD_INTR
733#define MICROPY_ASYNC_KBD_INTR (0)
734#endif
735
Damien George136f6752014-01-07 14:54:15 +0000736// Whether to include REPL helper function
Damien George58ebde42014-05-21 20:32:59 +0100737#ifndef MICROPY_HELPER_REPL
Jim Mussared0e236ee2021-09-15 23:18:23 +1000738#define MICROPY_HELPER_REPL (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George136f6752014-01-07 14:54:15 +0000739#endif
740
Yonatan Goldschmidt61d2b402019-12-25 09:27:38 +0200741// Allow enabling debug prints after each REPL line
742#ifndef MICROPY_REPL_INFO
Damien Georgec62351f2021-11-01 15:18:22 +1100743#define MICROPY_REPL_INFO (0)
Yonatan Goldschmidt61d2b402019-12-25 09:27:38 +0200744#endif
745
Tom Soulanille7d588b02015-07-09 16:32:36 -0700746// Whether to include emacs-style readline behavior in REPL
747#ifndef MICROPY_REPL_EMACS_KEYS
Jim Mussared0e236ee2021-09-15 23:18:23 +1000748#define MICROPY_REPL_EMACS_KEYS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Tom Soulanille7d588b02015-07-09 16:32:36 -0700749#endif
750
Yonatan Goldschmidt853aaa02019-12-14 23:42:03 +0200751// Whether to include emacs-style word movement/kill readline behavior in REPL.
752// This adds Alt+F, Alt+B, Alt+D and Alt+Backspace for forward-word, backward-word, forward-kill-word
753// and backward-kill-word, respectively.
754#ifndef MICROPY_REPL_EMACS_WORDS_MOVE
Jim Mussared3e5b1be2022-08-16 01:41:03 +1000755#define MICROPY_REPL_EMACS_WORDS_MOVE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Yonatan Goldschmidt853aaa02019-12-14 23:42:03 +0200756#endif
757
758// Whether to include extra convenience keys for word movement/kill in readline REPL.
759// This adds Ctrl+Right, Ctrl+Left and Ctrl+W for forward-word, backward-word and backward-kill-word
760// respectively. Ctrl+Delete is not implemented because it's a very different escape sequence.
761// Depends on MICROPY_REPL_EMACS_WORDS_MOVE.
762#ifndef MICROPY_REPL_EMACS_EXTRA_WORDS_MOVE
Jim Mussared3e5b1be2022-08-16 01:41:03 +1000763#define MICROPY_REPL_EMACS_EXTRA_WORDS_MOVE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Yonatan Goldschmidt853aaa02019-12-14 23:42:03 +0200764#endif
765
Damien George0af73012015-08-20 10:34:16 +0100766// Whether to implement auto-indent in REPL
767#ifndef MICROPY_REPL_AUTO_INDENT
Jim Mussared0e236ee2021-09-15 23:18:23 +1000768#define MICROPY_REPL_AUTO_INDENT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George0af73012015-08-20 10:34:16 +0100769#endif
770
Paul Sokolovsky87bc8e22015-01-15 10:46:27 +0200771// Whether port requires event-driven REPL functions
772#ifndef MICROPY_REPL_EVENT_DRIVEN
773#define MICROPY_REPL_EVENT_DRIVEN (0)
774#endif
775
David Lechner81dbea12022-07-01 14:06:10 -0500776// The number of items to keep in the readline history.
777#ifndef MICROPY_READLINE_HISTORY_SIZE
778#define MICROPY_READLINE_HISTORY_SIZE (8)
779#endif
780
Damien Georged3ebe482014-01-07 15:20:33 +0000781// Whether to include lexer helper function for unix
Damien George58ebde42014-05-21 20:32:59 +0100782#ifndef MICROPY_HELPER_LEXER_UNIX
783#define MICROPY_HELPER_LEXER_UNIX (0)
Damien Georged3ebe482014-01-07 15:20:33 +0000784#endif
785
Paul Sokolovsky48b35722014-01-12 17:30:48 +0200786// Long int implementation
787#define MICROPY_LONGINT_IMPL_NONE (0)
788#define MICROPY_LONGINT_IMPL_LONGLONG (1)
Damien George438c88d2014-02-22 19:25:23 +0000789#define MICROPY_LONGINT_IMPL_MPZ (2)
Paul Sokolovsky48b35722014-01-12 17:30:48 +0200790
791#ifndef MICROPY_LONGINT_IMPL
792#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_NONE)
793#endif
794
795#if MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_LONGLONG
796typedef long long mp_longint_impl_t;
797#endif
798
Damien George62ad1892014-01-29 21:51:51 +0000799// Whether to include information in the byte code to determine source
800// line number (increases RAM usage, but doesn't slow byte code execution)
801#ifndef MICROPY_ENABLE_SOURCE_LINE
Jim Mussared0e236ee2021-09-15 23:18:23 +1000802#define MICROPY_ENABLE_SOURCE_LINE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George62ad1892014-01-29 21:51:51 +0000803#endif
804
Damien George1463c1f2014-04-25 23:52:57 +0100805// Whether to include doc strings (increases RAM usage)
806#ifndef MICROPY_ENABLE_DOC_STRING
807#define MICROPY_ENABLE_DOC_STRING (0)
808#endif
809
Damien Georged4b706c2021-04-22 12:13:58 +1000810// Exception messages are removed (requires disabling MICROPY_ROM_TEXT_COMPRESSION)
811#define MICROPY_ERROR_REPORTING_NONE (0)
Damien George1e9a92f2014-11-06 17:36:16 +0000812// Exception messages are short static strings
Paul Sokolovsky1f85d622014-05-01 01:35:38 +0300813#define MICROPY_ERROR_REPORTING_TERSE (1)
814// Exception messages provide basic error details
815#define MICROPY_ERROR_REPORTING_NORMAL (2)
816// Exception messages provide full info, e.g. object names
817#define MICROPY_ERROR_REPORTING_DETAILED (3)
818
819#ifndef MICROPY_ERROR_REPORTING
Jim Mussared01374d92021-08-14 01:43:15 +1000820#if MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_FULL_FEATURES
821#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_DETAILED)
822#elif MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES
Paul Sokolovsky1f85d622014-05-01 01:35:38 +0300823#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_NORMAL)
Jim Mussared01374d92021-08-14 01:43:15 +1000824#else
825#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_TERSE)
826#endif
Paul Sokolovsky1f85d622014-05-01 01:35:38 +0300827#endif
828
Paul Sokolovsky8a8c1fc2015-01-01 09:29:28 +0200829// Whether issue warnings during compiling/execution
830#ifndef MICROPY_WARNINGS
831#define MICROPY_WARNINGS (0)
832#endif
833
Paul Sokolovsky2f5d1132018-12-21 14:20:55 +0300834// Whether to support warning categories
835#ifndef MICROPY_WARNINGS_CATEGORY
836#define MICROPY_WARNINGS_CATEGORY (0)
837#endif
838
David Lechner62849b72017-09-24 20:15:48 -0500839// This macro is used when printing runtime warnings and errors
840#ifndef MICROPY_ERROR_PRINTER
841#define MICROPY_ERROR_PRINTER (&mp_plat_print)
842#endif
843
Damien George0c36da02014-03-08 15:24:39 +0000844// Float and complex implementation
845#define MICROPY_FLOAT_IMPL_NONE (0)
846#define MICROPY_FLOAT_IMPL_FLOAT (1)
847#define MICROPY_FLOAT_IMPL_DOUBLE (2)
848
849#ifndef MICROPY_FLOAT_IMPL
850#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_NONE)
851#endif
852
853#if MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_FLOAT
Damien Georgefb510b32014-06-01 13:32:54 +0100854#define MICROPY_PY_BUILTINS_FLOAT (1)
Damien George561844f2016-11-03 12:33:01 +1100855#define MICROPY_FLOAT_CONST(x) x##F
Damien George0c36da02014-03-08 15:24:39 +0000856#define MICROPY_FLOAT_C_FUN(fun) fun##f
857typedef float mp_float_t;
858#elif MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_DOUBLE
Damien Georgefb510b32014-06-01 13:32:54 +0100859#define MICROPY_PY_BUILTINS_FLOAT (1)
Damien George561844f2016-11-03 12:33:01 +1100860#define MICROPY_FLOAT_CONST(x) x
Damien George0c36da02014-03-08 15:24:39 +0000861#define MICROPY_FLOAT_C_FUN(fun) fun
862typedef double mp_float_t;
863#else
Damien Georgefb510b32014-06-01 13:32:54 +0100864#define MICROPY_PY_BUILTINS_FLOAT (0)
Damien George136f6752014-01-07 14:54:15 +0000865#endif
866
Paul Sokolovsky3b6f7b92014-06-20 01:48:35 +0300867#ifndef MICROPY_PY_BUILTINS_COMPLEX
868#define MICROPY_PY_BUILTINS_COMPLEX (MICROPY_PY_BUILTINS_FLOAT)
869#endif
870
Yoctopuce devdbbaa952025-06-06 14:55:21 +0200871// Float to string conversion implementations
872//
873// Note that the EXACT method is only available if the compiler supports
874// floating points larger than mp_float_t:
875// - with MICROPY_FLOAT_IMPL_FLOAT, the compiler needs to support `double`
876// - with MICROPY_FLOAT_IMPL_DOUBLE, the compiler needs to support `long double`
877//
878#define MICROPY_FLOAT_FORMAT_IMPL_BASIC (0) // smallest code, but inexact
879#define MICROPY_FLOAT_FORMAT_IMPL_APPROX (1) // slightly bigger, almost perfect
880#define MICROPY_FLOAT_FORMAT_IMPL_EXACT (2) // bigger code, and 100% exact repr
881
882#ifndef MICROPY_FLOAT_FORMAT_IMPL
883#if MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_FLOAT
884#define MICROPY_FLOAT_FORMAT_IMPL (MICROPY_FLOAT_FORMAT_IMPL_APPROX)
885#elif defined(__SIZEOF_LONG_DOUBLE__) && __SIZEOF_LONG_DOUBLE__ > __SIZEOF_DOUBLE__
886#define MICROPY_FLOAT_FORMAT_IMPL (MICROPY_FLOAT_FORMAT_IMPL_EXACT)
887#else
888#define MICROPY_FLOAT_FORMAT_IMPL (MICROPY_FLOAT_FORMAT_IMPL_APPROX)
889#endif
890#endif
891
Matthias Urlichse520fa22023-10-25 19:17:47 +0200892// Whether to use the native _Float16 for 16-bit float support
893#ifndef MICROPY_FLOAT_USE_NATIVE_FLT16
894#ifdef __FLT16_MAX__
895#define MICROPY_FLOAT_USE_NATIVE_FLT16 (1)
896#else
897#define MICROPY_FLOAT_USE_NATIVE_FLT16 (0)
898#endif
899#endif
900
Damien Georgea73501b2017-04-06 17:27:33 +1000901// Whether to provide a high-quality hash for float and complex numbers.
902// Otherwise the default is a very simple but correct hashing function.
903#ifndef MICROPY_FLOAT_HIGH_QUALITY_HASH
Jim Mussared3e5b1be2022-08-16 01:41:03 +1000904#define MICROPY_FLOAT_HIGH_QUALITY_HASH (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Damien Georgea73501b2017-04-06 17:27:33 +1000905#endif
906
Paul Sokolovskydcac8802014-01-16 19:19:50 +0200907// Enable features which improve CPython compatibility
908// but may lead to more code size/memory usage.
909// TODO: Originally intended as generic category to not
910// add bunch of once-off options. May need refactoring later
911#ifndef MICROPY_CPYTHON_COMPAT
Jim Mussared01374d92021-08-14 01:43:15 +1000912#define MICROPY_CPYTHON_COMPAT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovskydcac8802014-01-16 19:19:50 +0200913#endif
914
Paul Sokolovsky9a973972017-04-02 21:20:07 +0300915// Perform full checks as done by CPython. Disabling this
916// may produce incorrect results, if incorrect data is fed,
917// but should not lead to MicroPython crashes or similar
918// grave issues (in other words, only user app should be,
919// affected, not system).
920#ifndef MICROPY_FULL_CHECKS
Jim Mussared01374d92021-08-14 01:43:15 +1000921#define MICROPY_FULL_CHECKS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky9a973972017-04-02 21:20:07 +0300922#endif
923
Yoctopuce devdf05cae2025-07-01 13:16:20 +0200924// Ports can choose to use timestamps based on 2000-01-01 or 1970-01-01
925// Default is timestamps based on 2000-01-01
926#if !defined(MICROPY_EPOCH_IS_2000) && !defined(MICROPY_EPOCH_IS_1970)
927#define MICROPY_EPOCH_IS_2000 (1)
928#define MICROPY_EPOCH_IS_1970 (0)
929#elif !defined(MICROPY_EPOCH_IS_1970)
930#define MICROPY_EPOCH_IS_1970 (1 - (MICROPY_EPOCH_IS_2000))
931#elif !defined(MICROPY_EPOCH_IS_2000)
932#define MICROPY_EPOCH_IS_2000 (1 - (MICROPY_EPOCH_IS_1970))
933#endif
934
935// To maintain reasonable compatibility with CPython on embedded systems,
936// and avoid breaking anytime soon, time functions are defined to work
937// at least between 1970 and 2099 (included) on any machine.
938//
939// Specific ports can enable extended date support
940// - after 2099 using MICROPY_TIME_SUPPORT_Y2100_AND_BEYOND
941// - before 1970 using MICROPY_TIME_SUPPORT_Y1969_AND_BEFORE
942// The largest possible range is year 1600 to year 3000
943//
944// By default, extended date support is only enabled for machines using 64 bit pointers,
945// but it can be enabled by specific ports
946#ifndef MICROPY_TIME_SUPPORT_Y1969_AND_BEFORE
947#if MP_SSIZE_MAX > 2147483647
948#define MICROPY_TIME_SUPPORT_Y1969_AND_BEFORE (1)
949#else
950#define MICROPY_TIME_SUPPORT_Y1969_AND_BEFORE (0)
951#endif
952#endif
953
954// When support for dates <1970 is enabled, supporting >=2100 does not cost anything
955#ifndef MICROPY_TIME_SUPPORT_Y2100_AND_BEYOND
956#define MICROPY_TIME_SUPPORT_Y2100_AND_BEYOND (MICROPY_TIME_SUPPORT_Y1969_AND_BEFORE)
957#endif
958
959// The type to be used to represent platform-specific timestamps depends on the choices above
960#define MICROPY_TIMESTAMP_IMPL_LONG_LONG (0)
961#define MICROPY_TIMESTAMP_IMPL_UINT (1)
962#define MICROPY_TIMESTAMP_IMPL_TIME_T (2)
963
964#ifndef MICROPY_TIMESTAMP_IMPL
965#if MICROPY_TIME_SUPPORT_Y2100_AND_BEYOND || MICROPY_TIME_SUPPORT_Y1969_AND_BEFORE || MICROPY_EPOCH_IS_2000
966#define MICROPY_TIMESTAMP_IMPL (MICROPY_TIMESTAMP_IMPL_LONG_LONG)
967#else
968#define MICROPY_TIMESTAMP_IMPL (MICROPY_TIMESTAMP_IMPL_UINT)
969#endif
970#endif
971
972// `mp_timestamp_t` is the type that should be used by the port
973// to represent timestamps, and is referenced to the platform epoch
974#if MICROPY_TIMESTAMP_IMPL == MICROPY_TIMESTAMP_IMPL_LONG_LONG
975typedef long long mp_timestamp_t;
976#elif MICROPY_TIMESTAMP_IMPL == MICROPY_TIMESTAMP_IMPL_UINT
977typedef mp_uint_t mp_timestamp_t;
978#elif MICROPY_TIMESTAMP_IMPL == MICROPY_TIMESTAMP_IMPL_TIME_T
979typedef time_t mp_timestamp_t;
980#endif
981
Paul Sokolovsky0ef015b2014-05-07 02:23:46 +0300982// Whether POSIX-semantics non-blocking streams are supported
983#ifndef MICROPY_STREAMS_NON_BLOCK
Jim Mussared0e236ee2021-09-15 23:18:23 +1000984#define MICROPY_STREAMS_NON_BLOCK (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky0ef015b2014-05-07 02:23:46 +0300985#endif
986
Paul Sokolovsky61e77a42016-07-30 20:05:56 +0300987// Whether to provide stream functions with POSIX-like signatures
988// (useful for porting existing libraries to MicroPython).
989#ifndef MICROPY_STREAMS_POSIX_API
990#define MICROPY_STREAMS_POSIX_API (0)
991#endif
992
Jim Mussared13c817e2023-06-05 15:52:57 +1000993// Whether modules can use MP_REGISTER_MODULE_DELEGATION() to delegate failed
994// attribute lookups to a custom handler function.
Damien George3356b5e2021-07-27 00:38:21 +1000995#ifndef MICROPY_MODULE_ATTR_DELEGATION
Jim Mussared7d2ee8a2023-06-05 22:38:36 +1000996#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 +1000997#endif
998
Jim Mussared6a8114e2023-05-12 17:07:24 +1000999// Whether to call __init__ when importing builtin modules for the first time.
1000// Modules using this need to handle the possibility that __init__ might be
1001// called multiple times.
Damien George3c9c3682015-09-15 14:56:13 +01001002#ifndef MICROPY_MODULE_BUILTIN_INIT
Jim Mussared0e236ee2021-09-15 23:18:23 +10001003#define MICROPY_MODULE_BUILTIN_INIT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George3c9c3682015-09-15 14:56:13 +01001004#endif
1005
Jim Mussareded90f302023-05-10 13:22:54 +10001006// Whether to allow built-in modules to have sub-packages (by making the
1007// sub-package a member of their locals dict). Sub-packages should not be
1008// registered with MP_REGISTER_MODULE, instead they should be added as
1009// members of the parent's globals dict. To match CPython behavior,
1010// their __name__ should be "foo.bar"(i.e. QSTR_foo_dot_bar) which will
1011// require an entry in qstrdefs, although it does also work to just call
1012// it "bar". Also, because subpackages can be accessed without being
1013// imported (e.g. as foo.bar after `import foo`), they should not
1014// have __init__ methods. Instead, the top-level package's __init__ should
1015// initialise all sub-packages.
1016#ifndef MICROPY_MODULE_BUILTIN_SUBPACKAGES
1017#define MICROPY_MODULE_BUILTIN_SUBPACKAGES (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
1018#endif
1019
Paul m. p. P454cca62018-10-22 18:34:29 +02001020// Whether to support module-level __getattr__ (see PEP 562)
1021#ifndef MICROPY_MODULE_GETATTR
Jim Mussared01374d92021-08-14 01:43:15 +10001022#define MICROPY_MODULE_GETATTR (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul m. p. P454cca62018-10-22 18:34:29 +02001023#endif
1024
Jim Mussareda7fa18c2020-02-26 15:24:09 +11001025// Whether to enable importing foo.py with __name__ set to '__main__'
1026// Used by the unix port for the -m flag.
1027#ifndef MICROPY_MODULE_OVERRIDE_MAIN_IMPORT
1028#define MICROPY_MODULE_OVERRIDE_MAIN_IMPORT (0)
1029#endif
1030
Damien George0a2e9652016-01-31 22:24:16 +00001031// Whether frozen modules are supported in the form of strings
1032#ifndef MICROPY_MODULE_FROZEN_STR
1033#define MICROPY_MODULE_FROZEN_STR (0)
1034#endif
1035
1036// Whether frozen modules are supported in the form of .mpy files
1037#ifndef MICROPY_MODULE_FROZEN_MPY
1038#define MICROPY_MODULE_FROZEN_MPY (0)
1039#endif
1040
1041// Convenience macro for whether frozen modules are supported
Paul Sokolovsky640e0b22015-01-20 11:52:12 +02001042#ifndef MICROPY_MODULE_FROZEN
Damien George0a2e9652016-01-31 22:24:16 +00001043#define MICROPY_MODULE_FROZEN (MICROPY_MODULE_FROZEN_STR || MICROPY_MODULE_FROZEN_MPY)
Paul Sokolovsky640e0b22015-01-20 11:52:12 +02001044#endif
1045
Damien George78d702c2014-12-09 16:19:48 +00001046// Whether you can override builtins in the builtins module
1047#ifndef MICROPY_CAN_OVERRIDE_BUILTINS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001048#define MICROPY_CAN_OVERRIDE_BUILTINS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George78d702c2014-12-09 16:19:48 +00001049#endif
1050
Damien George06593fb2015-06-19 12:49:10 +00001051// Whether to check that the "self" argument of a builtin method has the
1052// correct type. Such an explicit check is only needed if a builtin
1053// method escapes to Python land without a first argument, eg
1054// list.append([], 1). Without this check such calls will have undefined
1055// behaviour (usually segfault) if the first argument is the wrong type.
1056#ifndef MICROPY_BUILTIN_METHOD_CHECK_SELF_ARG
Jim Mussared01374d92021-08-14 01:43:15 +10001057#define MICROPY_BUILTIN_METHOD_CHECK_SELF_ARG (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George06593fb2015-06-19 12:49:10 +00001058#endif
1059
Damien George3f56fd62016-05-10 10:54:06 +01001060// Whether to use internally defined errno's (otherwise system provided ones)
1061#ifndef MICROPY_USE_INTERNAL_ERRNO
1062#define MICROPY_USE_INTERNAL_ERRNO (0)
1063#endif
1064
Delio Brignolie2ac8bb2016-08-21 11:33:37 +02001065// Whether to use internally defined *printf() functions (otherwise external ones)
1066#ifndef MICROPY_USE_INTERNAL_PRINTF
1067#define MICROPY_USE_INTERNAL_PRINTF (1)
1068#endif
1069
Damien George78dc2db2023-03-09 13:56:23 +11001070// The mp_print_t printer used for printf output when MICROPY_USE_INTERNAL_PRINTF is enabled
1071#ifndef MICROPY_INTERNAL_PRINTF_PRINTER
1072#define MICROPY_INTERNAL_PRINTF_PRINTER (&mp_plat_print)
1073#endif
1074
Damien Georged54208a2022-12-16 17:31:21 +11001075// Whether to support mp_sched_vm_abort to asynchronously abort to the top level.
1076#ifndef MICROPY_ENABLE_VM_ABORT
1077#define MICROPY_ENABLE_VM_ABORT (0)
1078#endif
1079
Damien George6e74d242017-02-16 18:05:06 +11001080// Support for internal scheduler
1081#ifndef MICROPY_ENABLE_SCHEDULER
Jim Mussared0e236ee2021-09-15 23:18:23 +10001082#define MICROPY_ENABLE_SCHEDULER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George6e74d242017-02-16 18:05:06 +11001083#endif
1084
Damien George75506e42022-03-23 17:13:03 +11001085// Whether the scheduler supports scheduling static nodes with C callbacks
1086#ifndef MICROPY_SCHEDULER_STATIC_NODES
1087#define MICROPY_SCHEDULER_STATIC_NODES (0)
1088#endif
1089
Damien George6e74d242017-02-16 18:05:06 +11001090// Maximum number of entries in the scheduler
1091#ifndef MICROPY_SCHEDULER_DEPTH
1092#define MICROPY_SCHEDULER_DEPTH (4)
1093#endif
1094
Damien Georgedcb9ea72017-01-27 15:10:09 +11001095// Support for generic VFS sub-system
1096#ifndef MICROPY_VFS
1097#define MICROPY_VFS (0)
1098#endif
1099
Damien George8b6bd432024-11-15 11:16:04 +11001100// Whether to include support for writable filesystems.
1101#ifndef MICROPY_VFS_WRITABLE
1102#define MICROPY_VFS_WRITABLE (1)
1103#endif
1104
Damien George89e6c582024-11-15 12:57:34 +11001105// Whether to enable the mp_vfs_rom_ioctl C function, and vfs.rom_ioctl Python function
1106#ifndef MICROPY_VFS_ROM_IOCTL
1107#define MICROPY_VFS_ROM_IOCTL (MICROPY_VFS_ROM)
1108#endif
1109
Damien George8d82b0e2018-06-06 13:11:33 +10001110// Support for VFS POSIX component, to mount a POSIX filesystem within VFS
Jim Mussared89a0fef2022-09-13 14:57:24 +10001111#ifndef MICROPY_VFS_POSIX
Damien George8d82b0e2018-06-06 13:11:33 +10001112#define MICROPY_VFS_POSIX (0)
1113#endif
1114
Jeff Epler59ee5992025-07-19 06:38:18 -05001115// Whether to include support for writable POSIX filesystems.
1116#ifndef MICROPY_VFS_POSIX_WRITABLE
1117#define MICROPY_VFS_POSIX_WRITABLE (1)
1118#endif
1119
Damien Georgea8b9e712018-06-06 14:31:29 +10001120// Support for VFS FAT component, to mount a FAT filesystem within VFS
Jim Mussared89a0fef2022-09-13 14:57:24 +10001121#ifndef MICROPY_VFS_FAT
Damien Georgea8b9e712018-06-06 14:31:29 +10001122#define MICROPY_VFS_FAT (0)
1123#endif
1124
Jim Mussared89a0fef2022-09-13 14:57:24 +10001125// Support for VFS LittleFS v1 component, to mount a LFSv1 filesystem within VFS
1126#ifndef MICROPY_VFS_LFS1
1127#define MICROPY_VFS_LFS1 (0)
1128#endif
1129
1130// Support for VFS LittleFS v2 component, to mount a LFSv2 filesystem within VFS
1131#ifndef MICROPY_VFS_LFS2
1132#define MICROPY_VFS_LFS2 (0)
1133#endif
1134
Damien George50637ff2022-03-04 10:52:35 +11001135// Support for ROMFS.
1136#ifndef MICROPY_VFS_ROM
1137#define MICROPY_VFS_ROM (0)
1138#endif
1139
Damien Georgeee3fd462014-05-24 23:03:12 +01001140/*****************************************************************************/
1141/* Fine control over Python builtins, classes, modules, etc */
1142
Damien Georgeda154fd2017-04-01 23:52:24 +11001143// Whether to support multiple inheritance of Python classes. Multiple
1144// inheritance makes some C functions inherently recursive, and adds a bit of
1145// code overhead.
1146#ifndef MICROPY_MULTIPLE_INHERITANCE
Jim Mussared01374d92021-08-14 01:43:15 +10001147#define MICROPY_MULTIPLE_INHERITANCE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeda154fd2017-04-01 23:52:24 +11001148#endif
1149
stijn3cc17c62015-02-14 18:44:31 +01001150// Whether to implement attributes on functions
1151#ifndef MICROPY_PY_FUNCTION_ATTRS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001152#define MICROPY_PY_FUNCTION_ATTRS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
stijn3cc17c62015-02-14 18:44:31 +01001153#endif
1154
Damien Georgeceb8ba62025-01-20 22:23:48 +11001155// Whether to implement the __code__ attribute on functions, and function constructor
1156#ifndef MICROPY_PY_FUNCTION_ATTRS_CODE
1157#define MICROPY_PY_FUNCTION_ATTRS_CODE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_FULL_FEATURES)
1158#endif
1159
Damien George241ee162025-07-25 00:09:18 +10001160// Whether bound_method can just use == (feature disabled), or requires a call to
1161// mp_obj_equal (feature enabled), to test equality of the self and meth entities.
1162// This is only needed if objects and functions can be identical without being the
1163// same thing, eg when using an object proxy.
1164#ifndef MICROPY_PY_BOUND_METHOD_FULL_EQUALITY_CHECK
1165#define MICROPY_PY_BOUND_METHOD_FULL_EQUALITY_CHECK (0)
1166#endif
1167
Anson Mansfieldd5dc5542025-07-21 08:33:17 -04001168// Whether to support the descriptors __get__, __set__, __delete__, __set_name__
Damien George36c10522018-05-25 17:09:54 +10001169// This costs some code size and makes load/store/delete of instance
1170// attributes slower for the classes that use this feature
stijn28fa84b2015-02-14 18:43:54 +01001171#ifndef MICROPY_PY_DESCRIPTORS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001172#define MICROPY_PY_DESCRIPTORS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
stijn28fa84b2015-02-14 18:43:54 +01001173#endif
1174
dmazzella18e65692017-01-03 11:00:12 +01001175// Whether to support class __delattr__ and __setattr__ methods
Damien George36c10522018-05-25 17:09:54 +10001176// This costs some code size and makes store/delete of instance
1177// attributes slower for the classes that use this feature
dmazzella18e65692017-01-03 11:00:12 +01001178#ifndef MICROPY_PY_DELATTR_SETATTR
Jim Mussared0e236ee2021-09-15 23:18:23 +10001179#define MICROPY_PY_DELATTR_SETATTR (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
dmazzella18e65692017-01-03 11:00:12 +01001180#endif
1181
pohmelie81ebba72016-01-27 23:23:11 +03001182// Support for async/await/async for/async with
1183#ifndef MICROPY_PY_ASYNC_AWAIT
Jim Mussared01374d92021-08-14 01:43:15 +10001184#define MICROPY_PY_ASYNC_AWAIT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
pohmelie81ebba72016-01-27 23:23:11 +03001185#endif
1186
Jim Mussared692d36d2021-08-13 01:44:08 +10001187// Support for literal string interpolation, f-strings (see PEP 498, Python 3.6+)
1188#ifndef MICROPY_PY_FSTRINGS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001189#define MICROPY_PY_FSTRINGS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Jim Mussared692d36d2021-08-13 01:44:08 +10001190#endif
1191
Damien George17839502020-06-16 21:42:44 +10001192// Support for assignment expressions with := (see PEP 572, Python 3.8+)
1193#ifndef MICROPY_PY_ASSIGN_EXPR
Jim Mussared01374d92021-08-14 01:43:15 +10001194#define MICROPY_PY_ASSIGN_EXPR (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George17839502020-06-16 21:42:44 +10001195#endif
1196
Paul Sokolovsky63644012017-10-21 12:13:44 +03001197// Non-standard .pend_throw() method for generators, allowing for
1198// Future-like behavior with respect to exception handling: an
1199// exception set with .pend_throw() will activate on the next call
1200// to generator's .send() or .__next__(). (This is useful to implement
1201// async schedulers.)
1202#ifndef MICROPY_PY_GENERATOR_PEND_THROW
Jim Mussared01374d92021-08-14 01:43:15 +10001203#define MICROPY_PY_GENERATOR_PEND_THROW (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky63644012017-10-21 12:13:44 +03001204#endif
1205
Paul Sokolovskya1b442b2016-07-22 00:46:24 +03001206// Issue a warning when comparing str and bytes objects
Paul Sokolovsky707cae72016-07-22 00:34:34 +03001207#ifndef MICROPY_PY_STR_BYTES_CMP_WARN
1208#define MICROPY_PY_STR_BYTES_CMP_WARN (0)
1209#endif
1210
Jim Mussared28aaab92021-07-13 18:01:12 +10001211// Add bytes.hex and bytes.fromhex
1212#ifndef MICROPY_PY_BUILTINS_BYTES_HEX
1213#define MICROPY_PY_BUILTINS_BYTES_HEX (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1214#endif
1215
Paul Sokolovsky12bc13e2014-06-13 01:05:19 +03001216// Whether str object is proper unicode
1217#ifndef MICROPY_PY_BUILTINS_STR_UNICODE
Jim Mussared0e236ee2021-09-15 23:18:23 +10001218#define MICROPY_PY_BUILTINS_STR_UNICODE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George8546ce12014-06-28 10:29:22 +01001219#endif
Damien Georgeb3a50f02014-06-28 10:27:15 +01001220
tll68c28172017-06-24 08:38:32 +08001221// Whether to check for valid UTF-8 when converting bytes to str
1222#ifndef MICROPY_PY_BUILTINS_STR_UNICODE_CHECK
1223#define MICROPY_PY_BUILTINS_STR_UNICODE_CHECK (MICROPY_PY_BUILTINS_STR_UNICODE)
1224#endif
1225
Paul Sokolovsky1b5abfc2016-05-22 00:13:44 +03001226// Whether str.center() method provided
1227#ifndef MICROPY_PY_BUILTINS_STR_CENTER
Jim Mussared0e236ee2021-09-15 23:18:23 +10001228#define MICROPY_PY_BUILTINS_STR_CENTER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky1b5abfc2016-05-22 00:13:44 +03001229#endif
1230
Paul Sokolovsky5a91fce2018-08-05 23:56:19 +03001231// Whether str.count() method provided
1232#ifndef MICROPY_PY_BUILTINS_STR_COUNT
Jim Mussared01374d92021-08-14 01:43:15 +10001233#define MICROPY_PY_BUILTINS_STR_COUNT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky5a91fce2018-08-05 23:56:19 +03001234#endif
1235
Paul Sokolovsky2da5d412018-08-15 15:17:41 +03001236// Whether str % (...) formatting operator provided
1237#ifndef MICROPY_PY_BUILTINS_STR_OP_MODULO
Jim Mussared01374d92021-08-14 01:43:15 +10001238#define MICROPY_PY_BUILTINS_STR_OP_MODULO (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky2da5d412018-08-15 15:17:41 +03001239#endif
1240
Paul Sokolovsky56eb25f2016-08-07 06:46:55 +03001241// Whether str.partition()/str.rpartition() method provided
1242#ifndef MICROPY_PY_BUILTINS_STR_PARTITION
Jim Mussared0e236ee2021-09-15 23:18:23 +10001243#define MICROPY_PY_BUILTINS_STR_PARTITION (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky56eb25f2016-08-07 06:46:55 +03001244#endif
1245
Paul Sokolovskyac2f7a72015-04-04 00:09:23 +03001246// Whether str.splitlines() method provided
1247#ifndef MICROPY_PY_BUILTINS_STR_SPLITLINES
Jim Mussared0e236ee2021-09-15 23:18:23 +10001248#define MICROPY_PY_BUILTINS_STR_SPLITLINES (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskyac2f7a72015-04-04 00:09:23 +03001249#endif
1250
Paul Sokolovskycb78f862014-06-27 20:39:09 +03001251// Whether to support bytearray object
1252#ifndef MICROPY_PY_BUILTINS_BYTEARRAY
Jim Mussared01374d92021-08-14 01:43:15 +10001253#define MICROPY_PY_BUILTINS_BYTEARRAY (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky12bc13e2014-06-13 01:05:19 +03001254#endif
1255
Damien George62e821c2025-01-19 23:30:59 +11001256// Whether to support code objects, and how many features they have
1257#define MICROPY_PY_BUILTINS_CODE_NONE (0)
1258#define MICROPY_PY_BUILTINS_CODE_MINIMUM (1)
1259#define MICROPY_PY_BUILTINS_CODE_BASIC (2)
1260#define MICROPY_PY_BUILTINS_CODE_FULL (3)
1261#ifndef MICROPY_PY_BUILTINS_CODE
Damien Georgeceb8ba62025-01-20 22:23:48 +11001262#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 +11001263#endif
1264
Paul Sokolovskyfbb83352018-08-06 01:25:41 +03001265// Whether to support dict.fromkeys() class method
1266#ifndef MICROPY_PY_BUILTINS_DICT_FROMKEYS
Jim Mussared01374d92021-08-14 01:43:15 +10001267#define MICROPY_PY_BUILTINS_DICT_FROMKEYS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovskyfbb83352018-08-06 01:25:41 +03001268#endif
1269
Damien Georgedd4f4532014-10-23 13:34:35 +01001270// Whether to support memoryview object
1271#ifndef MICROPY_PY_BUILTINS_MEMORYVIEW
Jim Mussared0e236ee2021-09-15 23:18:23 +10001272#define MICROPY_PY_BUILTINS_MEMORYVIEW (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgedd4f4532014-10-23 13:34:35 +01001273#endif
1274
stijn90fae912019-05-08 16:16:17 +02001275// Whether to support memoryview.itemsize attribute
1276#ifndef MICROPY_PY_BUILTINS_MEMORYVIEW_ITEMSIZE
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001277#define MICROPY_PY_BUILTINS_MEMORYVIEW_ITEMSIZE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
stijn90fae912019-05-08 16:16:17 +02001278#endif
1279
Damien George3ebd4d02014-06-01 13:46:47 +01001280// Whether to support set object
1281#ifndef MICROPY_PY_BUILTINS_SET
Jim Mussared01374d92021-08-14 01:43:15 +10001282#define MICROPY_PY_BUILTINS_SET (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George3ebd4d02014-06-01 13:46:47 +01001283#endif
1284
Damien Georgefb510b32014-06-01 13:32:54 +01001285// Whether to support slice subscript operators and slice object
1286#ifndef MICROPY_PY_BUILTINS_SLICE
Jim Mussared01374d92021-08-14 01:43:15 +10001287#define MICROPY_PY_BUILTINS_SLICE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001288#endif
1289
Tom Soulanilleaeb62f92015-09-11 14:31:32 -07001290// Whether to support slice attribute read access,
1291// i.e. slice.start, slice.stop, slice.step
1292#ifndef MICROPY_PY_BUILTINS_SLICE_ATTRS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001293#define MICROPY_PY_BUILTINS_SLICE_ATTRS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Tom Soulanilleaeb62f92015-09-11 14:31:32 -07001294#endif
1295
Nicko van Someren4c939552019-11-16 17:07:11 -07001296// Whether to support the .indices(len) method on slice objects
1297#ifndef MICROPY_PY_BUILTINS_SLICE_INDICES
Jim Mussared0e236ee2021-09-15 23:18:23 +10001298#define MICROPY_PY_BUILTINS_SLICE_INDICES (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Nicko van Someren4c939552019-11-16 17:07:11 -07001299#endif
1300
Damien Georgeee3fd462014-05-24 23:03:12 +01001301// Whether to support frozenset object
Damien Georgefb510b32014-06-01 13:32:54 +01001302#ifndef MICROPY_PY_BUILTINS_FROZENSET
Jim Mussared0e236ee2021-09-15 23:18:23 +10001303#define MICROPY_PY_BUILTINS_FROZENSET (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001304#endif
1305
Damien Georgefb510b32014-06-01 13:32:54 +01001306// Whether to support property object
1307#ifndef MICROPY_PY_BUILTINS_PROPERTY
Jim Mussared01374d92021-08-14 01:43:15 +10001308#define MICROPY_PY_BUILTINS_PROPERTY (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001309#endif
1310
Peter D. Grayb2a237d2015-03-06 14:48:14 -05001311// Whether to implement the start/stop/step attributes (readback) on
1312// the "range" builtin type. Rarely used, and costs ~60 bytes (x86).
1313#ifndef MICROPY_PY_BUILTINS_RANGE_ATTRS
Jim Mussared01374d92021-08-14 01:43:15 +10001314#define MICROPY_PY_BUILTINS_RANGE_ATTRS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Peter D. Grayb2a237d2015-03-06 14:48:14 -05001315#endif
1316
Damien Georged77da832018-02-14 23:17:06 +11001317// Whether to support binary ops [only (in)equality is defined] between range
1318// objects. With this option disabled all range objects that are not exactly
1319// the same object will compare as not-equal. With it enabled the semantics
1320// match CPython and ranges are equal if they yield the same sequence of items.
1321#ifndef MICROPY_PY_BUILTINS_RANGE_BINOP
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001322#define MICROPY_PY_BUILTINS_RANGE_BINOP (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Damien Georged77da832018-02-14 23:17:06 +11001323#endif
1324
Damien Georgecf490a72023-10-03 11:24:50 +11001325// Support for calling next() with second argument
stijn42863832019-01-03 15:19:42 +01001326#ifndef MICROPY_PY_BUILTINS_NEXT2
Damien George56e90cb2025-03-11 13:14:46 +11001327#define MICROPY_PY_BUILTINS_NEXT2 (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_BASIC_FEATURES)
stijn42863832019-01-03 15:19:42 +01001328#endif
1329
Jan Klusacekb318ebf2018-01-09 22:47:35 +01001330// Whether to support rounding of integers (incl bignum); eg round(123,-1)=120
1331#ifndef MICROPY_PY_BUILTINS_ROUND_INT
Jim Mussared0e236ee2021-09-15 23:18:23 +10001332#define MICROPY_PY_BUILTINS_ROUND_INT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Jan Klusacekb318ebf2018-01-09 22:47:35 +01001333#endif
1334
Paul Sokolovsky0e80f342017-10-27 22:29:15 +03001335// Whether to support complete set of special methods for user
1336// classes, or only the most used ones. "Inplace" methods are
1337// controlled by MICROPY_PY_ALL_INPLACE_SPECIAL_METHODS below.
1338// "Reverse" methods are controlled by
1339// MICROPY_PY_REVERSE_SPECIAL_METHODS below.
Paul Sokolovsky98c4bc32015-01-30 01:42:49 +02001340#ifndef MICROPY_PY_ALL_SPECIAL_METHODS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001341#define MICROPY_PY_ALL_SPECIAL_METHODS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky98c4bc32015-01-30 01:42:49 +02001342#endif
1343
Damien Georgecf490a72023-10-03 11:24:50 +11001344// Whether to support all inplace arithmetic operation methods
Paul Sokolovsky0e80f342017-10-27 22:29:15 +03001345// (__imul__, etc.)
1346#ifndef MICROPY_PY_ALL_INPLACE_SPECIAL_METHODS
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001347#define MICROPY_PY_ALL_INPLACE_SPECIAL_METHODS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Paul Sokolovsky0e80f342017-10-27 22:29:15 +03001348#endif
1349
Damien Georgecf490a72023-10-03 11:24:50 +11001350// Whether to support reverse arithmetic operation methods
Paul Sokolovsky0e80f342017-10-27 22:29:15 +03001351// (__radd__, etc.). Additionally gated by
1352// MICROPY_PY_ALL_SPECIAL_METHODS.
Paul Sokolovskyeb84a832017-09-10 17:05:20 +03001353#ifndef MICROPY_PY_REVERSE_SPECIAL_METHODS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001354#define MICROPY_PY_REVERSE_SPECIAL_METHODS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskyeb84a832017-09-10 17:05:20 +03001355#endif
1356
Damien Georgec9fc6202014-10-25 21:59:14 +01001357// Whether to support compile function
1358#ifndef MICROPY_PY_BUILTINS_COMPILE
Jim Mussared0e236ee2021-09-15 23:18:23 +10001359#define MICROPY_PY_BUILTINS_COMPILE (MICROPY_ENABLE_COMPILER && MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgec9fc6202014-10-25 21:59:14 +01001360#endif
1361
Paul Sokolovskye2d44e32015-04-06 23:50:37 +03001362// Whether to support enumerate function(type)
1363#ifndef MICROPY_PY_BUILTINS_ENUMERATE
Jim Mussared01374d92021-08-14 01:43:15 +10001364#define MICROPY_PY_BUILTINS_ENUMERATE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovskye2d44e32015-04-06 23:50:37 +03001365#endif
1366
Damien Georgedd5353a2015-12-18 12:35:44 +00001367// Whether to support eval and exec functions
1368// By default they are supported if the compiler is enabled
1369#ifndef MICROPY_PY_BUILTINS_EVAL_EXEC
1370#define MICROPY_PY_BUILTINS_EVAL_EXEC (MICROPY_ENABLE_COMPILER)
1371#endif
1372
Damien George2a3e2b92014-12-19 13:36:17 +00001373// Whether to support the Python 2 execfile function
1374#ifndef MICROPY_PY_BUILTINS_EXECFILE
Jim Mussared0e236ee2021-09-15 23:18:23 +10001375#define MICROPY_PY_BUILTINS_EXECFILE (MICROPY_ENABLE_COMPILER && MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George2a3e2b92014-12-19 13:36:17 +00001376#endif
1377
Paul Sokolovsky22ff3972015-08-20 01:01:56 +03001378// Whether to support filter function(type)
1379#ifndef MICROPY_PY_BUILTINS_FILTER
Jim Mussared01374d92021-08-14 01:43:15 +10001380#define MICROPY_PY_BUILTINS_FILTER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky22ff3972015-08-20 01:01:56 +03001381#endif
1382
Paul Sokolovsky282ca092015-04-07 00:16:51 +03001383// Whether to support reversed function(type)
1384#ifndef MICROPY_PY_BUILTINS_REVERSED
Jim Mussared01374d92021-08-14 01:43:15 +10001385#define MICROPY_PY_BUILTINS_REVERSED (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovsky282ca092015-04-07 00:16:51 +03001386#endif
1387
Paul Sokolovsky5ab5ac52015-05-04 19:45:53 +03001388// Whether to define "NotImplemented" special constant
1389#ifndef MICROPY_PY_BUILTINS_NOTIMPLEMENTED
Jim Mussared0e236ee2021-09-15 23:18:23 +10001390#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky5ab5ac52015-05-04 19:45:53 +03001391#endif
1392
Damien Georgebc763022017-06-01 15:32:23 +10001393// Whether to provide the built-in input() function. The implementation of this
Damien George136369d2021-07-09 14:19:15 +10001394// uses shared/readline, so can only be enabled if the port uses this readline.
Damien Georgebc763022017-06-01 15:32:23 +10001395#ifndef MICROPY_PY_BUILTINS_INPUT
Jim Mussared0e236ee2021-09-15 23:18:23 +10001396#define MICROPY_PY_BUILTINS_INPUT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgebc763022017-06-01 15:32:23 +10001397#endif
1398
pohmelie354e6882015-12-07 15:35:48 +03001399// Whether to support min/max functions
1400#ifndef MICROPY_PY_BUILTINS_MIN_MAX
Jim Mussared01374d92021-08-14 01:43:15 +10001401#define MICROPY_PY_BUILTINS_MIN_MAX (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
pohmelie354e6882015-12-07 15:35:48 +03001402#endif
1403
Damien Georgea19b5a02017-02-03 12:35:48 +11001404// Support for calls to pow() with 3 integer arguments
1405#ifndef MICROPY_PY_BUILTINS_POW3
Jim Mussared0e236ee2021-09-15 23:18:23 +10001406#define MICROPY_PY_BUILTINS_POW3 (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgea19b5a02017-02-03 12:35:48 +11001407#endif
1408
Damien George9f04dfb2017-01-21 23:17:51 +11001409// Whether to provide the help function
1410#ifndef MICROPY_PY_BUILTINS_HELP
Jim Mussared0e236ee2021-09-15 23:18:23 +10001411#define MICROPY_PY_BUILTINS_HELP (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George9f04dfb2017-01-21 23:17:51 +11001412#endif
1413
1414// Use this to configure the help text shown for help(). It should be a
1415// variable with the type "const char*". A sensible default is provided.
1416#ifndef MICROPY_PY_BUILTINS_HELP_TEXT
1417#define MICROPY_PY_BUILTINS_HELP_TEXT mp_help_default_text
1418#endif
1419
Damien Georgef5172af2017-01-22 12:12:54 +11001420// Add the ability to list the available modules when executing help('modules')
1421#ifndef MICROPY_PY_BUILTINS_HELP_MODULES
Jim Mussared0e236ee2021-09-15 23:18:23 +10001422#define MICROPY_PY_BUILTINS_HELP_MODULES (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgef5172af2017-01-22 12:12:54 +11001423#endif
1424
Paul Sokolovskyd0f5e612014-07-25 11:00:15 +03001425// Whether to set __file__ for imported modules
1426#ifndef MICROPY_PY___FILE__
Jim Mussared01374d92021-08-14 01:43:15 +10001427#define MICROPY_PY___FILE__ (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovskyd0f5e612014-07-25 11:00:15 +03001428#endif
1429
Yoctopuce dev66c01482025-05-20 15:57:11 +02001430// Whether to process __all__ when importing all public symbols from module
1431#ifndef MICROPY_MODULE___ALL__
1432#define MICROPY_MODULE___ALL__ (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_BASIC_FEATURES)
1433#endif
1434
Damien George89deec02015-01-09 20:12:54 +00001435// Whether to provide mem-info related functions in micropython module
1436#ifndef MICROPY_PY_MICROPYTHON_MEM_INFO
Jim Mussared0e236ee2021-09-15 23:18:23 +10001437#define MICROPY_PY_MICROPYTHON_MEM_INFO (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George89deec02015-01-09 20:12:54 +00001438#endif
1439
Damien George7e2a4882018-02-20 18:30:22 +11001440// Whether to provide "micropython.stack_use" function
1441#ifndef MICROPY_PY_MICROPYTHON_STACK_USE
1442#define MICROPY_PY_MICROPYTHON_STACK_USE (MICROPY_PY_MICROPYTHON_MEM_INFO)
1443#endif
1444
Andrew Leech86bfabe2019-06-28 16:35:51 +10001445// Whether to provide the "micropython.heap_locked" function
1446#ifndef MICROPY_PY_MICROPYTHON_HEAP_LOCKED
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001447#define MICROPY_PY_MICROPYTHON_HEAP_LOCKED (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Andrew Leech86bfabe2019-06-28 16:35:51 +10001448#endif
1449
Andrew Leech7e146802022-09-26 11:02:31 +10001450// Support for micropython.RingIO()
1451#ifndef MICROPY_PY_MICROPYTHON_RINGIO
1452#define MICROPY_PY_MICROPYTHON_RINGIO (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1453#endif
1454
Paul Sokolovskycb78f862014-06-27 20:39:09 +03001455// Whether to provide "array" module. Note that large chunk of the
1456// underlying code is shared with "bytearray" builtin type, so to
1457// get real savings, it should be disabled too.
1458#ifndef MICROPY_PY_ARRAY
Jim Mussared01374d92021-08-14 01:43:15 +10001459#define MICROPY_PY_ARRAY (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Paul Sokolovskycb78f862014-06-27 20:39:09 +03001460#endif
1461
Paul Sokolovskycefcbb22015-02-27 22:16:05 +02001462// Whether to support slice assignments for array (and bytearray).
1463// This is rarely used, but adds ~0.5K of code.
1464#ifndef MICROPY_PY_ARRAY_SLICE_ASSIGN
Jim Mussared0e236ee2021-09-15 23:18:23 +10001465#define MICROPY_PY_ARRAY_SLICE_ASSIGN (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskycefcbb22015-02-27 22:16:05 +02001466#endif
1467
Damien George5aa311d2015-04-21 14:14:24 +00001468// Whether to support attrtuple type (MicroPython extension)
1469// It provides space-efficient tuples with attribute access
1470#ifndef MICROPY_PY_ATTRTUPLE
Jim Mussared01374d92021-08-14 01:43:15 +10001471#define MICROPY_PY_ATTRTUPLE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien George5aa311d2015-04-21 14:14:24 +00001472#endif
1473
Damien Georgeee3fd462014-05-24 23:03:12 +01001474// Whether to provide "collections" module
1475#ifndef MICROPY_PY_COLLECTIONS
Jim Mussared01374d92021-08-14 01:43:15 +10001476#define MICROPY_PY_COLLECTIONS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001477#endif
1478
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001479// Whether to provide "collections.deque" type
Paul Sokolovsky970eedc2018-02-06 00:06:42 +02001480#ifndef MICROPY_PY_COLLECTIONS_DEQUE
Jim Mussared0e236ee2021-09-15 23:18:23 +10001481#define MICROPY_PY_COLLECTIONS_DEQUE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky970eedc2018-02-06 00:06:42 +02001482#endif
1483
Dash Peters7dff38f2023-02-11 18:49:15 -08001484// Whether "collections.deque" supports iteration
1485#ifndef MICROPY_PY_COLLECTIONS_DEQUE_ITER
1486#define MICROPY_PY_COLLECTIONS_DEQUE_ITER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1487#endif
1488
1489// Whether "collections.deque" supports subscription
1490#ifndef MICROPY_PY_COLLECTIONS_DEQUE_SUBSCR
1491#define MICROPY_PY_COLLECTIONS_DEQUE_SUBSCR (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1492#endif
1493
Paul Sokolovsky0ef01d02015-03-18 01:25:04 +02001494// Whether to provide "collections.OrderedDict" type
1495#ifndef MICROPY_PY_COLLECTIONS_ORDEREDDICT
Jim Mussared0e236ee2021-09-15 23:18:23 +10001496#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky0ef01d02015-03-18 01:25:04 +02001497#endif
1498
stijn79ed58f2017-11-06 12:21:53 +01001499// Whether to provide the _asdict function for namedtuple
1500#ifndef MICROPY_PY_COLLECTIONS_NAMEDTUPLE__ASDICT
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001501#define MICROPY_PY_COLLECTIONS_NAMEDTUPLE__ASDICT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
stijn79ed58f2017-11-06 12:21:53 +01001502#endif
1503
Damien Georgec3a18d72025-01-20 22:24:10 +11001504// Whether to provide "marshal" module
1505#ifndef MICROPY_PY_MARSHAL
1506#define MICROPY_PY_MARSHAL (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
1507#endif
1508
Damien Georgeee3fd462014-05-24 23:03:12 +01001509// Whether to provide "math" module
1510#ifndef MICROPY_PY_MATH
Jim Mussared01374d92021-08-14 01:43:15 +10001511#define MICROPY_PY_MATH (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001512#endif
1513
stijndd696722019-11-20 13:38:33 +01001514// Whether to provide all math module constants (Python 3.5+), or just pi and e.
1515#ifndef MICROPY_PY_MATH_CONSTANTS
1516#define MICROPY_PY_MATH_CONSTANTS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1517#endif
1518
Damien George5cbeace2015-02-22 14:48:18 +00001519// Whether to provide special math functions: math.{erf,erfc,gamma,lgamma}
1520#ifndef MICROPY_PY_MATH_SPECIAL_FUNCTIONS
Jim Mussared0e236ee2021-09-15 23:18:23 +10001521#define MICROPY_PY_MATH_SPECIAL_FUNCTIONS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George5cbeace2015-02-22 14:48:18 +00001522#endif
1523
Christopher Swenson8c656752018-08-27 10:32:21 +10001524// Whether to provide math.factorial function
1525#ifndef MICROPY_PY_MATH_FACTORIAL
Jim Mussared0e236ee2021-09-15 23:18:23 +10001526#define MICROPY_PY_MATH_FACTORIAL (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Christopher Swenson8c656752018-08-27 10:32:21 +10001527#endif
1528
stijnaf5c9982019-07-02 10:28:44 +02001529// Whether to provide math.isclose function
1530#ifndef MICROPY_PY_MATH_ISCLOSE
Jim Mussared0e236ee2021-09-15 23:18:23 +10001531#define MICROPY_PY_MATH_ISCLOSE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
stijnaf5c9982019-07-02 10:28:44 +02001532#endif
1533
stijn81db22f2020-05-17 12:29:25 +02001534// Whether to provide fix for atan2 Inf handling.
1535#ifndef MICROPY_PY_MATH_ATAN2_FIX_INFNAN
1536#define MICROPY_PY_MATH_ATAN2_FIX_INFNAN (0)
1537#endif
1538
1539// Whether to provide fix for fmod Inf handling.
1540#ifndef MICROPY_PY_MATH_FMOD_FIX_INFNAN
1541#define MICROPY_PY_MATH_FMOD_FIX_INFNAN (0)
1542#endif
1543
1544// Whether to provide fix for modf negative zero handling.
1545#ifndef MICROPY_PY_MATH_MODF_FIX_NEGZERO
1546#define MICROPY_PY_MATH_MODF_FIX_NEGZERO (0)
1547#endif
1548
stijn2e54d9d2020-09-08 15:22:34 +02001549// Whether to provide fix for pow(1, NaN) and pow(NaN, 0), which both should be 1 not NaN.
1550#ifndef MICROPY_PY_MATH_POW_FIX_NAN
1551#define MICROPY_PY_MATH_POW_FIX_NAN (0)
1552#endif
1553
Angus Grattonb0c89372024-08-06 09:59:22 +10001554// Whether to provide fix for gamma(-inf) to raise ValueError
1555#ifndef MICROPY_PY_MATH_GAMMA_FIX_NEGINF
1556#define MICROPY_PY_MATH_GAMMA_FIX_NEGINF (0)
1557#endif
1558
Damien Georgeee3fd462014-05-24 23:03:12 +01001559// Whether to provide "cmath" module
1560#ifndef MICROPY_PY_CMATH
Jim Mussared0e236ee2021-09-15 23:18:23 +10001561#define MICROPY_PY_CMATH (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001562#endif
1563
Laurens Valkf724d902022-11-29 10:38:57 +01001564// Whether to provide "micropython" module
1565#ifndef MICROPY_PY_MICROPYTHON
Laurens Valk632d43e2022-11-29 12:31:09 +01001566#define MICROPY_PY_MICROPYTHON (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Laurens Valkf724d902022-11-29 10:38:57 +01001567#endif
1568
Damien Georgeee3fd462014-05-24 23:03:12 +01001569// Whether to provide "gc" module
1570#ifndef MICROPY_PY_GC
Jim Mussared01374d92021-08-14 01:43:15 +10001571#define MICROPY_PY_GC (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001572#endif
1573
Paul Sokolovsky755a55f2014-06-05 22:48:02 +03001574// Whether to return number of collected objects from gc.collect()
1575#ifndef MICROPY_PY_GC_COLLECT_RETVAL
1576#define MICROPY_PY_GC_COLLECT_RETVAL (0)
1577#endif
1578
Damien Georgeee3fd462014-05-24 23:03:12 +01001579// Whether to provide "io" module
1580#ifndef MICROPY_PY_IO
Jim Mussared01374d92021-08-14 01:43:15 +10001581#define MICROPY_PY_IO (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001582#endif
1583
Damien Georgeaf0932a2018-06-04 15:54:26 +10001584// Whether to provide "io.IOBase" class to support user streams
1585#ifndef MICROPY_PY_IO_IOBASE
Damien Georged01a9812025-05-07 13:49:12 +10001586#define MICROPY_PY_IO_IOBASE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeaf0932a2018-06-04 15:54:26 +10001587#endif
1588
Damien Georgeee3fd462014-05-24 23:03:12 +01001589// Whether to provide "io.BytesIO" class
1590#ifndef MICROPY_PY_IO_BYTESIO
1591#define MICROPY_PY_IO_BYTESIO (1)
1592#endif
1593
Paul Sokolovsky5d93dfb2016-03-25 01:10:49 +02001594// Whether to provide "io.BufferedWriter" class
1595#ifndef MICROPY_PY_IO_BUFFEREDWRITER
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001596#define MICROPY_PY_IO_BUFFEREDWRITER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Paul Sokolovsky5d93dfb2016-03-25 01:10:49 +02001597#endif
1598
Damien Georgeee3fd462014-05-24 23:03:12 +01001599// Whether to provide "struct" module
1600#ifndef MICROPY_PY_STRUCT
Jim Mussared01374d92021-08-14 01:43:15 +10001601#define MICROPY_PY_STRUCT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001602#endif
1603
1604// Whether to provide "sys" module
1605#ifndef MICROPY_PY_SYS
Jim Mussared01374d92021-08-14 01:43:15 +10001606#define MICROPY_PY_SYS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES)
Damien Georgeee3fd462014-05-24 23:03:12 +01001607#endif
1608
Damien Georgede43b502021-12-17 23:35:32 +11001609// Whether to initialise "sys.path" and "sys.argv" to their defaults in mp_init()
1610#ifndef MICROPY_PY_SYS_PATH_ARGV_DEFAULTS
Damien Georgefe9ffff2021-12-19 08:55:40 +11001611#define MICROPY_PY_SYS_PATH_ARGV_DEFAULTS (MICROPY_PY_SYS)
Damien Georgede43b502021-12-17 23:35:32 +11001612#endif
1613
Paul Sokolovsky4e0eeeb2014-07-03 16:50:11 +03001614// Whether to provide "sys.maxsize" constant
1615#ifndef MICROPY_PY_SYS_MAXSIZE
Jim Mussared0e236ee2021-09-15 23:18:23 +10001616#define MICROPY_PY_SYS_MAXSIZE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky4e0eeeb2014-07-03 16:50:11 +03001617#endif
1618
Paul Sokolovsky1a1d11f2015-12-05 00:09:10 +02001619// Whether to provide "sys.modules" dictionary
1620#ifndef MICROPY_PY_SYS_MODULES
1621#define MICROPY_PY_SYS_MODULES (1)
1622#endif
1623
Paul Sokolovsky8b85d142015-04-25 03:17:41 +03001624// Whether to provide "sys.exc_info" function
1625// Avoid enabling this, this function is Python2 heritage
1626#ifndef MICROPY_PY_SYS_EXC_INFO
1627#define MICROPY_PY_SYS_EXC_INFO (0)
1628#endif
1629
Jim Mussared0e8dfaf2022-10-07 02:13:58 +11001630// Whether to provide "sys.executable", which is the absolute path to the
1631// micropython binary
1632// Intended for use on the "OS" ports (e.g. Unix)
1633#ifndef MICROPY_PY_SYS_EXECUTABLE
1634#define MICROPY_PY_SYS_EXECUTABLE (0)
1635#endif
1636
stijn85c02162023-12-04 15:54:59 +01001637// Whether to provide "sys.intern"
1638#ifndef MICROPY_PY_SYS_INTERN
1639#define MICROPY_PY_SYS_INTERN (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
1640#endif
1641
Damien Georgeee3fd462014-05-24 23:03:12 +01001642// Whether to provide "sys.exit" function
1643#ifndef MICROPY_PY_SYS_EXIT
Paul Sokolovsky403c9302016-12-14 21:10:22 +03001644#define MICROPY_PY_SYS_EXIT (1)
Damien Georgeee3fd462014-05-24 23:03:12 +01001645#endif
1646
Milan Rossacb364702019-08-05 15:06:41 +02001647// Whether to provide "sys.atexit" function (MicroPython extension)
1648#ifndef MICROPY_PY_SYS_ATEXIT
1649#define MICROPY_PY_SYS_ATEXIT (0)
1650#endif
1651
Jim Mussared5e509752023-06-05 16:52:29 +10001652// Whether to provide the "sys.path" attribute (which forces module delegation
1653// and mutable sys attributes to be enabled).
1654// If MICROPY_PY_SYS_PATH_ARGV_DEFAULTS is enabled, this is initialised in
1655// mp_init to an empty list. Otherwise the port must initialise it using
1656// `mp_sys_path = mp_obj_new_list(...)`.
1657#ifndef MICROPY_PY_SYS_PATH
1658#define MICROPY_PY_SYS_PATH (1)
1659#endif
1660
1661// Whether to provide the "sys.argv" attribute.
1662// If MICROPY_PY_SYS_PATH_ARGV_DEFAULTS is enabled, this is initialised in
1663// mp_init to an empty list. Otherwise the port must initialise it using
1664// `mp_obj_list_init(MP_OBJ_TO_PTR(mp_sys_argv), ...);`
1665#ifndef MICROPY_PY_SYS_ARGV
1666#define MICROPY_PY_SYS_ARGV (1)
1667#endif
1668
Damien Georgeac229312021-07-27 00:43:35 +10001669// Whether to provide sys.{ps1,ps2} mutable attributes, to control REPL prompts
1670#ifndef MICROPY_PY_SYS_PS1_PS2
1671#define MICROPY_PY_SYS_PS1_PS2 (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1672#endif
1673
Milan Rossa310b3d12019-08-14 16:09:36 +02001674// Whether to provide "sys.settrace" function
1675#ifndef MICROPY_PY_SYS_SETTRACE
1676#define MICROPY_PY_SYS_SETTRACE (0)
1677#endif
1678
Paul Sokolovskybfc20922017-08-11 09:42:39 +03001679// Whether to provide "sys.getsizeof" function
1680#ifndef MICROPY_PY_SYS_GETSIZEOF
Jim Mussared3e5b1be2022-08-16 01:41:03 +10001681#define MICROPY_PY_SYS_GETSIZEOF (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Paul Sokolovskybfc20922017-08-11 09:42:39 +03001682#endif
1683
Damien Georgeee3fd462014-05-24 23:03:12 +01001684// Whether to provide sys.{stdin,stdout,stderr} objects
1685#ifndef MICROPY_PY_SYS_STDFILES
Jim Mussared0e236ee2021-09-15 23:18:23 +10001686#define MICROPY_PY_SYS_STDFILES (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George3bb8bd82014-04-14 21:20:30 +01001687#endif
1688
Damien George3c4b5d42015-05-13 23:49:21 +01001689// Whether to provide sys.{stdin,stdout,stderr}.buffer object
1690// This is implemented per-port
1691#ifndef MICROPY_PY_SYS_STDIO_BUFFER
Jim Mussared0e236ee2021-09-15 23:18:23 +10001692#define MICROPY_PY_SYS_STDIO_BUFFER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George3c4b5d42015-05-13 23:49:21 +01001693#endif
Paul Sokolovsky82158472014-06-28 03:03:47 +03001694
Damien Georgecac939d2021-07-27 00:41:27 +10001695// Whether to provide sys.tracebacklimit mutable attribute
1696#ifndef MICROPY_PY_SYS_TRACEBACKLIMIT
1697#define MICROPY_PY_SYS_TRACEBACKLIMIT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
1698#endif
1699
Damien Georgebc181552021-07-27 00:39:04 +10001700// Whether the sys module supports attribute delegation
1701// This is enabled automatically when needed by other features
1702#ifndef MICROPY_PY_SYS_ATTR_DELEGATION
Jim Mussared5e509752023-06-05 16:52:29 +10001703#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 +10001704#endif
1705
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001706// Whether to provide "errno" module
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001707#ifndef MICROPY_PY_ERRNO
1708#define MICROPY_PY_ERRNO (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George596a3fe2016-05-10 10:54:25 +01001709#endif
1710
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001711// Whether to provide the errno.errorcode dict
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001712#ifndef MICROPY_PY_ERRNO_ERRORCODE
1713#define MICROPY_PY_ERRNO_ERRORCODE (1)
Damien Georgef5634062017-02-22 12:53:42 +11001714#endif
1715
Damien Georgeef710282023-08-01 12:39:39 +10001716// Whether to provide "select" module
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001717#ifndef MICROPY_PY_SELECT
1718#define MICROPY_PY_SELECT (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky8f5bc3f2016-11-20 23:49:45 +03001719#endif
1720
Damien Georgeef710282023-08-01 12:39:39 +10001721// Whether to enable POSIX optimisations in the "select" module (requires system poll)
1722#ifndef MICROPY_PY_SELECT_POSIX_OPTIMISATIONS
1723#define MICROPY_PY_SELECT_POSIX_OPTIMISATIONS (0)
1724#endif
1725
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001726// Whether to enable the select() function in the "select" module (baremetal
David Lechner87585042021-07-06 18:08:18 -05001727// implementation). This is present for compatibility but can be disabled to
1728// save space.
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001729#ifndef MICROPY_PY_SELECT_SELECT
1730#define MICROPY_PY_SELECT_SELECT (1)
David Lechner87585042021-07-06 18:08:18 -05001731#endif
1732
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001733// Whether to provide the "time" module
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001734#ifndef MICROPY_PY_TIME
1735#define MICROPY_PY_TIME (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_BASIC_FEATURES)
Damien George99555532023-03-10 12:16:00 +11001736#endif
1737
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001738// Whether to provide time.gmtime/localtime/mktime functions
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001739#ifndef MICROPY_PY_TIME_GMTIME_LOCALTIME_MKTIME
1740#define MICROPY_PY_TIME_GMTIME_LOCALTIME_MKTIME (0)
Damien George99555532023-03-10 12:16:00 +11001741#endif
1742
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001743// Whether to provide time.time/time_ns functions
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001744#ifndef MICROPY_PY_TIME_TIME_TIME_NS
1745#define MICROPY_PY_TIME_TIME_TIME_NS (0)
Paul Sokolovskya9728442016-10-14 20:13:02 +03001746#endif
1747
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001748// Period of values returned by time.ticks_ms(), ticks_us(), ticks_cpu()
Paul Sokolovsky76146b32016-10-30 03:02:07 +03001749// functions. Should be power of two. All functions above use the same
1750// period, so if underlying hardware/API has different periods, the
1751// minimum of them should be used. The value below is the maximum value
1752// this parameter can take (corresponding to 30 bit tick values on 32-bit
1753// system).
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001754#ifndef MICROPY_PY_TIME_TICKS_PERIOD
1755#define MICROPY_PY_TIME_TICKS_PERIOD (MP_SMALL_INT_POSITIVE_MASK + 1)
Paul Sokolovsky76146b32016-10-30 03:02:07 +03001756#endif
1757
Damien George27cc0772016-04-22 22:52:33 +00001758// Whether to provide "_thread" module
1759#ifndef MICROPY_PY_THREAD
1760#define MICROPY_PY_THREAD (0)
1761#endif
1762
Damien George4cec63a2016-05-26 10:42:53 +00001763// Whether to make the VM/runtime thread-safe using a global lock
1764// If not enabled then thread safety must be provided at the Python level
1765#ifndef MICROPY_PY_THREAD_GIL
1766#define MICROPY_PY_THREAD_GIL (MICROPY_PY_THREAD)
1767#endif
1768
Damien Georgef6c22a02017-02-06 10:50:43 +11001769// Number of VM jump-loops to do before releasing the GIL.
1770// Set this to 0 to disable the divisor.
1771#ifndef MICROPY_PY_THREAD_GIL_VM_DIVISOR
1772#define MICROPY_PY_THREAD_GIL_VM_DIVISOR (32)
1773#endif
1774
Angus Gratton4bcbe882024-12-10 14:50:42 +11001775// Is a recursive mutex type in use?
1776#ifndef MICROPY_PY_THREAD_RECURSIVE_MUTEX
1777#define MICROPY_PY_THREAD_RECURSIVE_MUTEX (MICROPY_PY_THREAD && !MICROPY_PY_THREAD_GIL)
1778#endif
1779
Paul Sokolovsky82158472014-06-28 03:03:47 +03001780// Extended modules
Paul Sokolovsky510296f2014-08-08 22:51:40 +03001781
Jim Mussared2fbc08c2023-06-08 15:51:50 +10001782#ifndef MICROPY_PY_ASYNCIO
1783#define MICROPY_PY_ASYNCIO (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgebc009fd2020-03-12 16:46:20 +11001784#endif
1785
Damien George8ac9c8f2024-06-19 17:27:31 +10001786#ifndef MICROPY_PY_ASYNCIO_TASK_QUEUE_PUSH_CALLBACK
1787#define MICROPY_PY_ASYNCIO_TASK_QUEUE_PUSH_CALLBACK (0)
1788#endif
1789
Paul Sokolovsky82158472014-06-28 03:03:47 +03001790#ifndef MICROPY_PY_UCTYPES
Jim Mussared0e236ee2021-09-15 23:18:23 +10001791#define MICROPY_PY_UCTYPES (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovsky82158472014-06-28 03:03:47 +03001792#endif
1793
Paul Sokolovsky38151f32018-10-06 23:34:58 +03001794// Whether to provide SHORT, INT, LONG, etc. types in addition to
1795// exact-bitness types like INT16, INT32, etc.
1796#ifndef MICROPY_PY_UCTYPES_NATIVE_C_TYPES
1797#define MICROPY_PY_UCTYPES_NATIVE_C_TYPES (1)
1798#endif
1799
Jim Mussared35339242023-06-26 13:52:10 +10001800// Whether to provide "deflate" module (decompression-only by default)
1801#ifndef MICROPY_PY_DEFLATE
1802#define MICROPY_PY_DEFLATE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1803#endif
1804
1805// Whether to provide compression support in "deflate" module
1806#ifndef MICROPY_PY_DEFLATE_COMPRESS
1807#define MICROPY_PY_DEFLATE_COMPRESS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_FULL_FEATURES)
1808#endif
1809
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001810#ifndef MICROPY_PY_JSON
1811#define MICROPY_PY_JSON (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George612045f2014-09-17 22:56:34 +01001812#endif
1813
Peter Zügerffc854f2021-02-03 09:24:25 +01001814// Whether to support the "separators" argument to dump, dumps
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001815#ifndef MICROPY_PY_JSON_SEPARATORS
1816#define MICROPY_PY_JSON_SEPARATORS (1)
Peter Zügerffc854f2021-02-03 09:24:25 +01001817#endif
1818
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001819#ifndef MICROPY_PY_OS
1820#define MICROPY_PY_OS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George926b5542022-03-03 17:59:30 +11001821#endif
1822
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001823#ifndef MICROPY_PY_OS_STATVFS
1824#define MICROPY_PY_OS_STATVFS (MICROPY_PY_OS)
Damien George0149cd62022-03-09 12:45:06 +11001825#endif
1826
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001827#ifndef MICROPY_PY_RE
1828#define MICROPY_PY_RE (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskyc71e0452014-09-12 18:48:07 +03001829#endif
1830
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001831#ifndef MICROPY_PY_RE_DEBUG
1832#define MICROPY_PY_RE_DEBUG (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Damien George7d851a22019-08-17 23:50:19 +10001833#endif
1834
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001835#ifndef MICROPY_PY_RE_MATCH_GROUPS
1836#define MICROPY_PY_RE_MATCH_GROUPS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Damien George1f864602018-05-24 13:07:42 +10001837#endif
1838
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001839#ifndef MICROPY_PY_RE_MATCH_SPAN_START_END
1840#define MICROPY_PY_RE_MATCH_SPAN_START_END (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EVERYTHING)
Damien George1e9b8712018-05-24 13:08:15 +10001841#endif
1842
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001843#ifndef MICROPY_PY_RE_SUB
1844#define MICROPY_PY_RE_SUB (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgee30a5fc2018-05-24 13:08:51 +10001845#endif
1846
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001847#ifndef MICROPY_PY_HEAPQ
1848#define MICROPY_PY_HEAPQ (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgef5d69792014-10-22 17:37:18 +00001849#endif
1850
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001851#ifndef MICROPY_PY_HASHLIB
1852#define MICROPY_PY_HASHLIB (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskyf4b19c82014-11-22 01:19:13 +02001853#endif
1854
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001855#ifndef MICROPY_PY_HASHLIB_MD5
1856#define MICROPY_PY_HASHLIB_MD5 (0)
Paul Sokolovsky5fe37302018-08-19 11:58:22 +03001857#endif
1858
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001859#ifndef MICROPY_PY_HASHLIB_SHA1
1860#define MICROPY_PY_HASHLIB_SHA1 (0)
Yonatan Goldschmidt66303542018-06-09 02:48:29 +03001861#endif
1862
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001863#ifndef MICROPY_PY_HASHLIB_SHA256
1864#define MICROPY_PY_HASHLIB_SHA256 (1)
Yonatan Goldschmidt66303542018-06-09 02:48:29 +03001865#endif
1866
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001867#ifndef MICROPY_PY_CRYPTOLIB
1868#define MICROPY_PY_CRYPTOLIB (0)
Paul Sokolovsky567bc2d2018-01-07 15:13:56 +02001869#endif
1870
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001871// Depends on MICROPY_PY_CRYPTOLIB
1872#ifndef MICROPY_PY_CRYPTOLIB_CTR
1873#define MICROPY_PY_CRYPTOLIB_CTR (0)
Yonatan Goldschmidtef984362019-04-23 12:39:05 +03001874#endif
1875
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001876#ifndef MICROPY_PY_CRYPTOLIB_CONSTS
1877#define MICROPY_PY_CRYPTOLIB_CONSTS (0)
Yonatan Goldschmidt473fe452018-06-15 17:07:47 +03001878#endif
1879
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001880#ifndef MICROPY_PY_BINASCII
1881#define MICROPY_PY_BINASCII (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskybfdc2052014-11-29 06:19:30 +02001882#endif
1883
Jim Mussared35339242023-06-26 13:52:10 +10001884// Depends on MICROPY_PY_DEFLATE
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001885#ifndef MICROPY_PY_BINASCII_CRC32
1886#define MICROPY_PY_BINASCII_CRC32 (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskyc4283672016-08-24 18:28:43 +03001887#endif
1888
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001889#ifndef MICROPY_PY_RANDOM
1890#define MICROPY_PY_RANDOM (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Paul Sokolovskya58a91e2016-01-17 12:10:28 +02001891#endif
1892
Damien Georgea53af6c2016-01-22 16:19:32 +00001893// Whether to include: randrange, randint, choice, random, uniform
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001894#ifndef MICROPY_PY_RANDOM_EXTRA_FUNCS
1895#define MICROPY_PY_RANDOM_EXTRA_FUNCS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien Georgea53af6c2016-01-22 16:19:32 +00001896#endif
1897
Paul Sokolovsky01162182015-05-03 20:25:40 +03001898#ifndef MICROPY_PY_MACHINE
1899#define MICROPY_PY_MACHINE (0)
1900#endif
1901
Damien Georgebfc3dde2024-03-14 11:09:14 +11001902// Whether to include: reset, reset_cause
1903#ifndef MICROPY_PY_MACHINE_RESET
1904#define MICROPY_PY_MACHINE_RESET (0)
1905#endif
1906
robert-hh2be45dd2024-07-06 09:18:22 +02001907// Maximum number of arguments for machine.freq()
1908#ifndef MICROPY_PY_MACHINE_FREQ_NUM_ARGS_MAX
1909#define MICROPY_PY_MACHINE_FREQ_NUM_ARGS_MAX (1)
1910#endif
1911
Jim Mussared870000f2021-08-10 01:09:04 +10001912// Whether to include: bitstream
1913#ifndef MICROPY_PY_MACHINE_BITSTREAM
1914#define MICROPY_PY_MACHINE_BITSTREAM (0)
1915#endif
1916
Damien George33168082016-05-31 14:25:19 +01001917// Whether to include: time_pulse_us
1918#ifndef MICROPY_PY_MACHINE_PULSE
1919#define MICROPY_PY_MACHINE_PULSE (0)
1920#endif
1921
Damien Georgedd134e42024-03-14 11:01:33 +11001922// Whether to provide the "machine.mem8/16/32" objects
1923#ifndef MICROPY_PY_MACHINE_MEMX
1924#define MICROPY_PY_MACHINE_MEMX (MICROPY_PY_MACHINE)
1925#endif
1926
Damien George23ccbcf2024-03-14 10:58:41 +11001927// Whether to provide the "machine.Signal" class
1928#ifndef MICROPY_PY_MACHINE_SIGNAL
1929#define MICROPY_PY_MACHINE_SIGNAL (MICROPY_PY_MACHINE)
1930#endif
1931
Damien Georged0837122016-04-12 13:42:35 +01001932#ifndef MICROPY_PY_MACHINE_I2C
1933#define MICROPY_PY_MACHINE_I2C (0)
1934#endif
1935
Damien George4a1ae992022-06-01 11:57:20 +10001936// Whether the low-level I2C transfer function supports a separate write as the first transfer
1937#ifndef MICROPY_PY_MACHINE_I2C_TRANSFER_WRITE1
1938#define MICROPY_PY_MACHINE_I2C_TRANSFER_WRITE1 (0)
1939#endif
1940
Damien George122d9012021-09-02 12:37:00 +10001941// Whether to provide the "machine.SoftI2C" class
1942#ifndef MICROPY_PY_MACHINE_SOFTI2C
1943#define MICROPY_PY_MACHINE_SOFTI2C (0)
1944#endif
1945
Damien George0823c1b2016-09-01 15:07:20 +10001946#ifndef MICROPY_PY_MACHINE_SPI
1947#define MICROPY_PY_MACHINE_SPI (0)
1948#endif
1949
Damien Georgeafe06342021-09-02 12:39:28 +10001950// Whether to provide the "machine.SoftSPI" class
1951#ifndef MICROPY_PY_MACHINE_SOFTSPI
1952#define MICROPY_PY_MACHINE_SOFTSPI (0)
1953#endif
1954
robert-hhee103602023-05-15 11:17:27 +02001955// Values of SPI.MSB and SPI.LSB constants
1956#ifndef MICROPY_PY_MACHINE_SPI_MSB
1957#define MICROPY_PY_MACHINE_SPI_MSB (0)
1958#define MICROPY_PY_MACHINE_SPI_LSB (1)
1959#endif
1960
Damien Georgecd35b8a2022-10-27 14:32:43 +11001961// Whether to provide the "machine.Timer" class
1962#ifndef MICROPY_PY_MACHINE_TIMER
1963#define MICROPY_PY_MACHINE_TIMER (0)
1964#endif
1965
Damien Georgeaab005c2022-04-04 23:07:35 +10001966// The default backlog value for socket.listen(backlog)
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001967#ifndef MICROPY_PY_SOCKET_LISTEN_BACKLOG_DEFAULT
1968#define MICROPY_PY_SOCKET_LISTEN_BACKLOG_DEFAULT (2)
Damien Georgeaab005c2022-04-04 23:07:35 +10001969#endif
1970
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001971#ifndef MICROPY_PY_SSL
1972#define MICROPY_PY_SSL (0)
Damien George772058a2022-01-07 23:59:17 +11001973#endif
1974
Jim Mussared7f5d5c72022-08-18 14:49:57 +10001975// Whether to add finaliser code to ssl objects
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001976#ifndef MICROPY_PY_SSL_FINALISER
Jim Mussaredf3eccb12023-08-23 13:37:06 +10001977#define MICROPY_PY_SSL_FINALISER (MICROPY_ENABLE_FINALISER)
Paul Sokolovskyaaa88672015-10-06 18:10:00 +03001978#endif
1979
iabdalkader2644f572024-10-16 14:08:43 +02001980// Whether to add a root pointer for the current ssl object
1981#ifndef MICROPY_PY_SSL_MBEDTLS_NEED_ACTIVE_CONTEXT
1982#define MICROPY_PY_SSL_MBEDTLS_NEED_ACTIVE_CONTEXT (MICROPY_PY_SSL_ECDSA_SIGN_ALT)
1983#endif
1984
Angus Gratton9b7d8522025-06-05 15:32:38 +10001985// Whether to support DTLS protocol (non-CPython feature)
1986#ifndef MICROPY_PY_SSL_DTLS
1987#define MICROPY_PY_SSL_DTLS (MICROPY_SSL_MBEDTLS && MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
1988#endif
1989
Damien Georgee7020462023-10-13 14:53:02 +11001990// Whether to provide the "vfs" module
1991#ifndef MICROPY_PY_VFS
robert-hh8fdcc252024-02-22 20:50:03 +01001992#define MICROPY_PY_VFS (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_CORE_FEATURES && MICROPY_VFS)
Damien Georgee7020462023-10-13 14:53:02 +11001993#endif
1994
Jim Mussaredf5f9edf2022-08-18 15:01:26 +10001995#ifndef MICROPY_PY_WEBSOCKET
1996#define MICROPY_PY_WEBSOCKET (0)
Paul Sokolovsky24342dd2016-03-24 19:14:12 +02001997#endif
1998
Damien George53ad6812016-04-08 11:08:37 +01001999#ifndef MICROPY_PY_FRAMEBUF
Jim Mussared0e236ee2021-09-15 23:18:23 +10002000#define MICROPY_PY_FRAMEBUF (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
Damien George53ad6812016-04-08 11:08:37 +01002001#endif
2002
Paul Sokolovsky737bd9c2016-07-02 14:57:42 +03002003#ifndef MICROPY_PY_BTREE
2004#define MICROPY_PY_BTREE (0)
2005#endif
2006
Damien Georged41f6dd2021-09-02 12:39:50 +10002007// Whether to provide the low-level "_onewire" module
2008#ifndef MICROPY_PY_ONEWIRE
2009#define MICROPY_PY_ONEWIRE (0)
2010#endif
2011
Jim Mussared975a6872023-07-21 13:39:36 +10002012// Whether to provide the "platform" module
2013#ifndef MICROPY_PY_PLATFORM
2014#define MICROPY_PY_PLATFORM (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES)
2015#endif
2016
Damien George58ebde42014-05-21 20:32:59 +01002017/*****************************************************************************/
2018/* Hooks for a port to add builtins */
2019
Yonatan Goldschmidt343401c2019-02-03 21:24:16 +02002020// Additional builtin function definitions - see modbuiltins.c:mp_module_builtins_globals_table for format.
Damien George58ebde42014-05-21 20:32:59 +01002021#ifndef MICROPY_PORT_BUILTINS
2022#define MICROPY_PORT_BUILTINS
Paul Sokolovsky910843e2014-02-14 12:02:34 +02002023#endif
Damien Georgecaac5422014-03-25 14:18:18 +00002024
stijn22cf0942022-01-05 16:04:58 +01002025// Additional builtin function definitions for extension by command-line, boards or variants.
2026// See modbuiltins.c:mp_module_builtins_globals_table for format.
2027#ifndef MICROPY_PORT_EXTRA_BUILTINS
2028#define MICROPY_PORT_EXTRA_BUILTINS
2029#endif
2030
Damien George57e99eb2014-04-10 22:42:11 +01002031// Additional constant definitions for the compiler - see compile.c:mp_constants_table.
Damien George58ebde42014-05-21 20:32:59 +01002032#ifndef MICROPY_PORT_CONSTANTS
2033#define MICROPY_PORT_CONSTANTS
Damien George57e99eb2014-04-10 22:42:11 +01002034#endif
2035
Damien George136f6752014-01-07 14:54:15 +00002036/*****************************************************************************/
Damien George8fb5c8f2020-02-07 12:07:50 +11002037/* Hooks for a port to wrap functions with attributes */
2038
Damien George84125682021-09-24 12:49:51 +10002039#ifndef MICROPY_WRAP_MP_BINARY_OP
2040#define MICROPY_WRAP_MP_BINARY_OP(f) f
2041#endif
2042
2043#ifndef MICROPY_WRAP_MP_EXECUTE_BYTECODE
2044#define MICROPY_WRAP_MP_EXECUTE_BYTECODE(f) f
2045#endif
2046
2047#ifndef MICROPY_WRAP_MP_LOAD_GLOBAL
2048#define MICROPY_WRAP_MP_LOAD_GLOBAL(f) f
2049#endif
2050
2051#ifndef MICROPY_WRAP_MP_LOAD_NAME
2052#define MICROPY_WRAP_MP_LOAD_NAME(f) f
2053#endif
2054
2055#ifndef MICROPY_WRAP_MP_MAP_LOOKUP
2056#define MICROPY_WRAP_MP_MAP_LOOKUP(f) f
2057#endif
2058
2059#ifndef MICROPY_WRAP_MP_OBJ_GET_TYPE
2060#define MICROPY_WRAP_MP_OBJ_GET_TYPE(f) f
2061#endif
2062
Damien George7cbf8262021-04-28 10:52:19 +10002063#ifndef MICROPY_WRAP_MP_SCHED_EXCEPTION
2064#define MICROPY_WRAP_MP_SCHED_EXCEPTION(f) f
2065#endif
2066
Damien Georgee9e9c762021-04-28 10:57:34 +10002067#ifndef MICROPY_WRAP_MP_SCHED_KEYBOARD_INTERRUPT
2068#define MICROPY_WRAP_MP_SCHED_KEYBOARD_INTERRUPT(f) f
Damien George8fb5c8f2020-02-07 12:07:50 +11002069#endif
2070
Damien George544c3082020-04-23 16:18:14 +10002071#ifndef MICROPY_WRAP_MP_SCHED_SCHEDULE
2072#define MICROPY_WRAP_MP_SCHED_SCHEDULE(f) f
2073#endif
2074
Damien Georged54208a2022-12-16 17:31:21 +11002075#ifndef MICROPY_WRAP_MP_SCHED_VM_ABORT
2076#define MICROPY_WRAP_MP_SCHED_VM_ABORT(f) f
2077#endif
2078
Damien George8fb5c8f2020-02-07 12:07:50 +11002079/*****************************************************************************/
Damien George136f6752014-01-07 14:54:15 +00002080/* Miscellaneous settings */
2081
Damien George28631532015-02-08 13:42:00 +00002082// All uPy objects in ROM must be aligned on at least a 4 byte boundary
2083// so that the small-int/qstr/pointer distinction can be made. For machines
2084// that don't do this (eg 16-bit CPU), define the following macro to something
2085// like __attribute__((aligned(4))).
2086#ifndef MICROPY_OBJ_BASE_ALIGNMENT
2087#define MICROPY_OBJ_BASE_ALIGNMENT
2088#endif
2089
Damien George40047822022-04-21 16:30:23 +10002090// String used for the banner, and sys.version additional information
2091#ifndef MICROPY_BANNER_NAME_AND_VERSION
Jim Mussared3bf70f12023-10-10 16:50:28 +11002092#if MICROPY_PREVIEW_VERSION_2
2093#define MICROPY_BANNER_NAME_AND_VERSION "MicroPython (with v2.0 preview) " MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE
2094#else
Damien George40047822022-04-21 16:30:23 +10002095#define MICROPY_BANNER_NAME_AND_VERSION "MicroPython " MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE
2096#endif
Jim Mussared3bf70f12023-10-10 16:50:28 +11002097#endif
Damien George40047822022-04-21 16:30:23 +10002098
Damien George402df832022-04-26 17:28:39 +10002099// String used for the second part of the banner, and sys.implementation._machine
2100#ifndef MICROPY_BANNER_MACHINE
2101#ifdef MICROPY_HW_BOARD_NAME
2102#define MICROPY_BANNER_MACHINE MICROPY_HW_BOARD_NAME " with " MICROPY_HW_MCU_NAME
2103#else
2104#define MICROPY_BANNER_MACHINE MICROPY_PY_SYS_PLATFORM " [" MICROPY_PLATFORM_COMPILER "] version"
2105#endif
2106#endif
2107
Damien Georgead4656b2021-02-04 16:39:09 +11002108// Number of bytes in an object word: mp_obj_t, mp_uint_t, mp_uint_t
2109#ifndef MP_BYTES_PER_OBJ_WORD
2110#define MP_BYTES_PER_OBJ_WORD (sizeof(mp_uint_t))
Damien George4c307bf2017-04-01 11:39:38 +11002111#endif
2112
Damien George7e956fa2021-02-04 15:32:59 +11002113// Number of bits in a byte
2114#ifndef MP_BITS_PER_BYTE
2115#define MP_BITS_PER_BYTE (8)
Yonatan Goldschmidt1c849d62019-12-01 01:10:12 +02002116#endif
Damien George40f3c022014-07-03 13:25:24 +01002117// mp_int_t value with most significant bit set
Damien Georgec8911902021-02-04 16:39:46 +11002118#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 +02002119
Damien Georgea9bcd512014-10-06 13:44:59 +00002120// Make sure both MP_ENDIANNESS_LITTLE and MP_ENDIANNESS_BIG are
2121// defined and that they are the opposite of each other.
2122#if defined(MP_ENDIANNESS_LITTLE)
2123#define MP_ENDIANNESS_BIG (!MP_ENDIANNESS_LITTLE)
2124#elif defined(MP_ENDIANNESS_BIG)
2125#define MP_ENDIANNESS_LITTLE (!MP_ENDIANNESS_BIG)
2126#else
Damien George69661f32020-02-27 15:36:53 +11002127// Endianness not defined by port so try to autodetect it.
Damien Georgea9bcd512014-10-06 13:44:59 +00002128 #if defined(__BYTE_ORDER__)
2129 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
2130 #define MP_ENDIANNESS_LITTLE (1)
Damien George96303762018-05-07 13:36:52 +10002131 #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
Damien Georgea9bcd512014-10-06 13:44:59 +00002132 #define MP_ENDIANNESS_LITTLE (0)
2133 #endif
Damien Georgea9bcd512014-10-06 13:44:59 +00002134 #else
Damien George4e4772b2015-05-30 23:12:30 +01002135 #include <endian.h>
2136 #if defined(__BYTE_ORDER)
2137 #if __BYTE_ORDER == __LITTLE_ENDIAN
2138 #define MP_ENDIANNESS_LITTLE (1)
Damien George96303762018-05-07 13:36:52 +10002139 #elif __BYTE_ORDER == __BIG_ENDIAN
Damien George4e4772b2015-05-30 23:12:30 +01002140 #define MP_ENDIANNESS_LITTLE (0)
2141 #endif
Damien George4e4772b2015-05-30 23:12:30 +01002142 #endif
Damien Georgea9bcd512014-10-06 13:44:59 +00002143 #endif
Damien George96303762018-05-07 13:36:52 +10002144 #ifndef MP_ENDIANNESS_LITTLE
2145 #error endianness not defined and cannot detect it
2146 #endif
Damien Georgea9bcd512014-10-06 13:44:59 +00002147 #define MP_ENDIANNESS_BIG (!MP_ENDIANNESS_LITTLE)
Andrew Schellercc837372014-04-14 02:39:56 +01002148#endif
Paul Sokolovsky2da81fa2014-04-11 03:44:00 +03002149
Damien George3c658a42014-08-24 16:28:17 +01002150// Make a pointer to RAM callable (eg set lower bit for Thumb code)
2151// (This scheme won't work if we want to mix Thumb and normal ARM code.)
2152#ifndef MICROPY_MAKE_POINTER_CALLABLE
2153#define MICROPY_MAKE_POINTER_CALLABLE(p) (p)
2154#endif
2155
Damien George5b22bde2024-09-25 14:06:00 +10002156// Whether native text/BSS/rodata memory loaded from .mpy files is explicitly tracked
2157// so that the GC cannot reclaim it.
2158//
2159// In general a port should let these options have their defaults, but the defaults here
2160// can be overridden if needed by defining both MICROPY_PERSISTENT_CODE_TRACK_FUN_DATA
2161// and MICROPY_PERSISTENT_CODE_TRACK_BSS_RODATA.
2162#ifndef MICROPY_PERSISTENT_CODE_TRACK_FUN_DATA
2163#if MICROPY_EMIT_MACHINE_CODE && MICROPY_PERSISTENT_CODE_LOAD
2164// Pointer tracking is required when loading native code is enabled.
2165#if defined(MP_PLAT_ALLOC_EXEC) || defined(MP_PLAT_COMMIT_EXEC)
2166// If a port defined a custom allocator or commit function for native text, then the
2167// text does not need to be tracked (its allocation is managed by the port). But the
2168// BSS/rodata must be tracked (if there is any) because if there are any pointers to it
2169// in the function data, they aren't traced by the GC.
2170#define MICROPY_PERSISTENT_CODE_TRACK_FUN_DATA (0)
2171#define MICROPY_PERSISTENT_CODE_TRACK_BSS_RODATA (1)
2172#else
2173// If a port uses the default allocator (the GC heap) then all native text is allocated
2174// on the GC heap. But it's not guaranteed that a pointer to the head of the block of
2175// native text (which may contain multiple native functions) will be retained for the GC
2176// to trace. This is because native functions can start inside the big block of text
2177// and so it's possible that the only GC-reachable pointers are pointers inside.
2178// Therefore the big block is explicitly tracked. If there is any BSS/rodata memory,
2179// then it does not need to be explicitly tracked because a pointer to it is stored into
2180// the function text via `mp_native_relocate()`.
2181#define MICROPY_PERSISTENT_CODE_TRACK_FUN_DATA (1)
2182#define MICROPY_PERSISTENT_CODE_TRACK_BSS_RODATA (0)
2183#endif
2184#else // MICROPY_EMIT_MACHINE_CODE && MICROPY_PERSISTENT_CODE_LOAD
2185// Pointer tracking not needed when loading native code is disabled.
2186#define MICROPY_PERSISTENT_CODE_TRACK_FUN_DATA (0)
2187#define MICROPY_PERSISTENT_CODE_TRACK_BSS_RODATA (0)
2188#endif
Fabian Vogtb7235b82014-09-03 16:59:33 +02002189#endif
2190
Damien George5b22bde2024-09-25 14:06:00 +10002191// If these macros are defined then the memory allocated by them does not need to be
2192// traced by the GC. But if they are left undefined then the GC heap will be used as
2193// the allocator and the memory must be traced by the GC. See also above logic for
2194// enabling MICROPY_PERSISTENT_CODE_TRACK_FUN_DATA and
2195// MICROPY_PERSISTENT_CODE_TRACK_BSS_RODATA.
2196#ifndef MP_PLAT_ALLOC_EXEC
2197#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 +02002198#define MP_PLAT_FREE_EXEC(ptr, size) m_del(byte, ptr, size)
2199#endif
2200
Angus Gratton519c24d2023-08-02 16:49:44 +10002201// Allocating new heap area at runtime requires port to be able to allocate from system heap
2202#if MICROPY_GC_SPLIT_HEAP_AUTO
2203#ifndef MP_PLAT_ALLOC_HEAP
2204#define MP_PLAT_ALLOC_HEAP(size) malloc(size)
2205#endif
2206#ifndef MP_PLAT_FREE_HEAP
2207#define MP_PLAT_FREE_HEAP(ptr) free(ptr)
2208#endif
2209#endif
2210
Damien George7f9d1d62015-04-09 23:56:15 +01002211// This macro is used to do all output (except when MICROPY_PY_IO is defined)
2212#ifndef MP_PLAT_PRINT_STRN
Damien George4300c7d2015-10-15 00:05:55 +01002213#define MP_PLAT_PRINT_STRN(str, len) mp_hal_stdout_tx_strn_cooked(str, len)
Damien George7f9d1d62015-04-09 23:56:15 +01002214#endif
2215
Paul Sokolovsky722e5622014-09-06 19:17:23 +03002216#ifndef MP_SSIZE_MAX
2217#define MP_SSIZE_MAX SSIZE_MAX
2218#endif
2219
Damien George40f3c022014-07-03 13:25:24 +01002220// printf format spec to use for mp_int_t and friends
Damien George136f6752014-01-07 14:54:15 +00002221#ifndef INT_FMT
stijn3baf6b52015-11-20 15:59:06 +01002222#if defined(__LP64__)
Damien George40f3c022014-07-03 13:25:24 +01002223// Archs where mp_int_t == long, long != int
Paul Sokolovskyc90c0f62014-01-04 01:57:00 +02002224#define UINT_FMT "%lu"
2225#define INT_FMT "%ld"
Jeff Epler74932752025-07-18 06:37:26 -05002226#define HEX_FMT "%lx"
stijn3baf6b52015-11-20 15:59:06 +01002227#elif defined(_WIN64)
stijn0a4eb4d2015-12-18 10:20:33 +01002228#define UINT_FMT "%llu"
2229#define INT_FMT "%lld"
Jeff Epler74932752025-07-18 06:37:26 -05002230#define HEX_FMT "%llx"
Paul Sokolovskyc90c0f62014-01-04 01:57:00 +02002231#else
Damien George40f3c022014-07-03 13:25:24 +01002232// Archs where mp_int_t == int
Paul Sokolovskyc90c0f62014-01-04 01:57:00 +02002233#define UINT_FMT "%u"
2234#define INT_FMT "%d"
Jeff Epler74932752025-07-18 06:37:26 -05002235#define HEX_FMT "%x"
Paul Sokolovskyc90c0f62014-01-04 01:57:00 +02002236#endif
stijn84fa3312020-04-16 09:13:57 +02002237#endif // INT_FMT
Paul Sokolovskye9085912014-04-30 05:35:18 +03002238
2239// Modifier for function which doesn't return
Alessandro Gattif47e2142025-01-15 16:25:55 +01002240#ifndef MP_NORETURN
2241#define MP_NORETURN __attribute__((noreturn))
2242#endif
2243
2244#if !MICROPY_PREVIEW_VERSION_2
2245#define NORETURN MP_NORETURN
stijn01d6be42014-05-05 12:18:27 +02002246#endif
mux5c8db482014-06-21 17:24:55 +02002247
2248// Modifier for weak functions
2249#ifndef MP_WEAK
2250#define MP_WEAK __attribute__((weak))
2251#endif
Paul Sokolovsky361909e2014-12-29 00:51:06 +02002252
Paul Sokolovsky0f5bf1a2016-06-15 23:52:00 +03002253// Modifier for functions which should be never inlined
2254#ifndef MP_NOINLINE
2255#define MP_NOINLINE __attribute__((noinline))
2256#endif
2257
Paul Sokolovsky1bc29112016-08-07 22:36:05 +03002258// Modifier for functions which should be always inlined
2259#ifndef MP_ALWAYSINLINE
2260#define MP_ALWAYSINLINE __attribute__((always_inline))
2261#endif
2262
Paul Sokolovsky361909e2014-12-29 00:51:06 +02002263// Condition is likely to be true, to help branch prediction
2264#ifndef MP_LIKELY
2265#define MP_LIKELY(x) __builtin_expect((x), 1)
2266#endif
2267
2268// Condition is likely to be false, to help branch prediction
2269#ifndef MP_UNLIKELY
2270#define MP_UNLIKELY(x) __builtin_expect((x), 0)
2271#endif
Damien George9ddbe292014-12-29 01:02:19 +00002272
Damien George0c80cb32019-08-19 15:50:02 +10002273// To annotate that code is unreachable
2274#ifndef MP_UNREACHABLE
2275#if defined(__GNUC__)
2276#define MP_UNREACHABLE __builtin_unreachable();
2277#else
2278#define MP_UNREACHABLE for (;;);
2279#endif
2280#endif
2281
Emil Renner Berthingccd92332019-11-28 12:47:21 +01002282// Explicitly annotate switch case fall throughs
2283#if defined(__GNUC__) && __GNUC__ >= 7
2284#define MP_FALLTHROUGH __attribute__((fallthrough));
2285#else
2286#define MP_FALLTHROUGH
2287#endif
2288
Paul Sokolovsky1b146e92017-11-08 19:45:18 +02002289#ifndef MP_HTOBE16
2290#if MP_ENDIANNESS_LITTLE
Damien Georgefeb25772020-03-20 21:47:07 +11002291#define MP_HTOBE16(x) ((uint16_t)((((x) & 0xff) << 8) | (((x) >> 8) & 0xff)))
Damien George69661f32020-02-27 15:36:53 +11002292#define MP_BE16TOH(x) MP_HTOBE16(x)
Paul Sokolovsky1b146e92017-11-08 19:45:18 +02002293#else
Damien George69661f32020-02-27 15:36:53 +11002294#define MP_HTOBE16(x) (x)
2295#define MP_BE16TOH(x) (x)
Paul Sokolovsky1b146e92017-11-08 19:45:18 +02002296#endif
2297#endif
2298
2299#ifndef MP_HTOBE32
2300#if MP_ENDIANNESS_LITTLE
Damien Georgefeb25772020-03-20 21:47:07 +11002301#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 +11002302#define MP_BE32TOH(x) MP_HTOBE32(x)
Paul Sokolovsky1b146e92017-11-08 19:45:18 +02002303#else
Damien George69661f32020-02-27 15:36:53 +11002304#define MP_HTOBE32(x) (x)
2305#define MP_BE32TOH(x) (x)
Paul Sokolovsky1b146e92017-11-08 19:45:18 +02002306#endif
2307#endif
2308
Paul Sokolovsky2f5d1132018-12-21 14:20:55 +03002309// Warning categories are by default implemented as strings, though
2310// hook is left for a port to define them as something else.
2311#if MICROPY_WARNINGS_CATEGORY
Damien George69661f32020-02-27 15:36:53 +11002312#ifndef MP_WARN_CAT
2313#define MP_WARN_CAT(x) #x
2314#endif
Paul Sokolovsky2f5d1132018-12-21 14:20:55 +03002315#else
Damien George69661f32020-02-27 15:36:53 +11002316#undef MP_WARN_CAT
2317#define MP_WARN_CAT(x) (NULL)
Paul Sokolovsky2f5d1132018-12-21 14:20:55 +03002318#endif
2319
Alexander Steffen299bc622017-06-29 23:14:58 +02002320#endif // MICROPY_INCLUDED_PY_MPCONFIG_H