mruby configuration macros.

How to use these macros.

You can use mrbconfs with following ways: * Write them in mrbconf.h. * Using compiler flags is preferred when building a cross binaries or multiple mruby binaries since it’s easier to use different mrbconf per each MRuby::Build. * Most flags can be enabled by just commenting in. * Pass them as compiler flags. * Make sure you pass the same flags to all compilers since some mrbconf(e.g., MRB_GC_FIXED_ARENA) changes struct layout and cause memory access error when C and other language(e.g., C++) is mixed.

stdio setting.

MRB_DISABLE_STDIO * When defined <stdio.h> functions won’t be used. * Some features will be disabled when this is enabled: * mrb_irep load/dump from/to file. * Compiling mruby script from file. * Printing features in src/print.c.

Debug macros.

MRB_ENABLE_DEBUG_HOOK * When defined code fetch hook and debug OP hook will be enabled. * When using any of the hook set function pointer code_fetch_hook and/or debug_op_hook of mrb_state. * Fetch hook will be called before any OP. * Debug OP hook will be called when dispatching OP_DEBUG.

MRB_DEBUG * When defined mrb_assert* macro will be defined with macros from <assert.h>. * Could be enabled via enable_debug method of MRuby::Build.

Stack configuration

MRB_STACK_EXTEND_DOUBLING * If defined doubles the stack size when extending it. * Else extends stack with MRB_STACK_GROWTH.

MRB_STACK_GROWTH * Default value is 128. * Used in stack extending. * Ignored when MRB_STACK_EXTEND_DOUBLING is defined.

MRB_STACK_MAX * Default value is 0x40000 - MRB_STACK_GROWTH. * Raises RuntimeError when stack size exceeds this value.

Primitive type configuration.

MRB_USE_FLOAT * When defined single precision floating point type(C type float) is used as mrb_float. * Else double precision floating point type(C type double) is used as mrb_float.

MRB_WITHOUT_FLOAT * When defined removes floating point numbers from mruby. * It makes mruby easier to handle in “Microcontroller without FPU” and “Kernel Space”.

MRB_INT16 * When defined int16_t will be defined as mrb_int. * Conflicts with MRB_INT32 and MRB_INT64.

MRB_INT32 * When defined, or both MRB_INT16 and MRB_INT64 are not defined on 32-bit CPU mode, int32_t will be defined as mrb_int. * Conflicts with MRB_INT16 and MRB_INT64.

MRB_INT64 * When defined, or both MRB_INT16 and MRB_INT32 are not defined on 64-bit CPU mode, int64_t will be defined as mrb_int. * Conflicts with MRB_INT16 and MRB_INT32.

Garbage collector configuration.

MRB_GC_STRESS * When defined full GC is emitted per each RBasic allocation. * Mainly used in memory manager debugging.

MRB_GC_TURN_OFF_GENERATIONAL * When defined turns generational GC by default.

MRB_GC_FIXED_ARENA * When defined used fixed size GC arena. * Raises RuntimeError when this is defined and GC arena size exceeds MRB_GC_ARENA_SIZE. * Useful tracking unnecessary mruby object allocation.

MRB_GC_ARENA_SIZE * Default value is 100. * Ignored when MRB_GC_FIXED_ARENA isn’t defined. * Defines fixed GC arena size.

MRB_HEAP_PAGE_SIZE * Defines value is 1024. * Specifies number of RBasic per each heap page.

Memory pool configuration.

POOL_ALIGNMENT * Default value is 4. * If you’re allocating data types that requires alignment more than default value define the largest value of required alignment.

POOL_PAGE_SIZE * Default value is 16000. * Specifies page size of pool page. * Smaller the value is increases memory overhead.

State atexit configuration.

MRB_FIXED_STATE_ATEXIT_STACK * If defined enables fixed size mrb_state atexit stack. * Raises RuntimeError when mrb_state_atexit call count to same mrb_state exceeds MRB_FIXED_STATE_ATEXIT_STACK_SIZE’s value.

MRB_FIXED_STATE_ATEXIT_STACK_SIZE * Default value is 5. * If MRB_FIXED_STATE_ATEXIT_STACK isn’t defined this macro is ignored.

mrb_value configuration.

MRB_ENDIAN_BIG * If defined compiles mruby for big endian machines. * Used in MRB_NAN_BOXING. * Some mrbgem use this mrbconf.

MRB_NAN_BOXING * If defined represent mrb_value in boxed double. * Conflicts with MRB_USE_FLOAT and MRB_WITHOUT_FLOAT.

MRB_WORD_BOXING * If defined represent mrb_value as a word. * If defined Float will be a mruby object with RBasic.

Instance variable configuration.

MRB_IV_SEGMENT_SIZE * Default value is 4. * Specifies size of each segment in segment list.

Reduce heap memory configuration.

MRB_USE_LINK_TIME_RO_DATA_P * Only available on ELF platforms. * If you specify the address of a read-only section when creating a symbol or string, that string will be used as it is. * Heap memory can be saved. * Uses __ehdr_start and __init_array_start. * It must be __ehdr_start < data_addr < __init_array_start.

MRB_USE_CUSTOM_RO_DATA_P * Takes precedence over MRB_USE_LINK_TIME_RO_DATA_P. * Please try if MRB_USE_LINK_TIME_RO_DATA_P is not available. * The mrb_ro_data_p() function is implemented by the user in an arbitrary file. * The prototype declaration is mrb_bool mrb_ro_data_p(const char *ptr). * Return TRUE if ptr is in read-only section, otherwise return FALSE.

Other configuration.

MRB_UTF8_STRING * Adds UTF-8 encoding support to character-oriented String instance methods. * If it isn’t defined, they only support the US-ASCII encoding.

MRB_FUNCALL_ARGC_MAX * Default value is 16. * Specifies 4th argument(argc) max value of mrb_funcall. * Raises ArgumentError when the argc argument is bigger then this value mrb_funcall.

KHASH_DEFAULT_SIZE * Default value is 32. * Specifies default size of khash table bucket. * Used in kh_init_ ## name function.

MRB_STR_BUF_MIN_SIZE * Default value is 128. * Specifies initial capacity of RString created by mrb_str_buf_new function..

MRB_METHOD_CACHE * Improve performance for method dispatch.

MRB_METHOD_CACHE_SIZE * Default value is 128. * Ignored if MRB_METHOD_CACHE is not defined. * Need to be the power of 2.

MRB_METHOD_T_STRUCT * Use C struct to represent mrb_method_t * No MRB_METHOD_T_STRUCT requires highest 2 bits of function pointers to be zero * Define this macro on machines that use higher bits of pointers

MRB_ENABLE_ALL_SYMBOLS * Make it available Symbols.all_symbols in mrbgems/mruby-symbol-ext * Increase heap memory usage.