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.