You can do the build configuration in the build configuration file. The default
configuration file is build_config/default.rb
.
You can specify your own configuration file by the MRUBY_CONFIG
environment
variable (you can use CONFIG
for shorthand for MRUBY_CONFIG
). If the path
doesn't exist, build_config/${MRUBY_CONFIG}.rb
is used.
Just add the configuration value to the MRuby::Build#defines
attribute.
This is the same for MRuby::CrossBuild
.
# build_config.rb
MRuby::Build.new do |conf|
...
conf.defines << 'MRB_GC_FIXED_ARENA'
conf.defines << 'MRB_NO_METHOD_CACHE'
...
end
NOTE
- Use common definitions (
conf.defines
) instead of per-compiler definitions (e.g.,conf.cc.defines
) unless there is a special reason not to. - It is now deprecated to edit the
include/mruby/mrbconf.h
file or give it directly as a compiler flag, as was the case before.
MRB_NO_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 a file.
- Printing features in src/print.c.
MRB_USE_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/ordebug_op_hook
ofmrb_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 ofMRuby::Build
.
MRB_STACK_EXTEND_DOUBLING
- If defined doubles the stack size when extending it.
- Otherwise 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.
MRB_USE_FLOAT32
- When defined single-precision floating-point type(C type
float
) is used asmrb_float
. - Otherwise, double-precision floating-point type(C type
double
) is used asmrb_float
.
MRB_NO_FLOAT
- When defined removes floating-point numbers from mruby.
- It makes mruby easier to handle in "Micro-controller without FPU" and "Kernel Space".
MRB_INT32
- When defined, or
MRB_INT64
are not defined on 32-bit CPU mode,mrb_int
will be defined asint32_t
. - Conflicts with
MRB_INT64
.
MRB_INT64
- When defined, or
MRB_INT32
are not defined on 64-bit CPU mode,mrb_int
will be defined asint64_t
. - Conflicts with
MRB_INT32
.
MRB_GC_STRESS
- When defined full GC is emitted per each
RBasic
allocation. - Mainly used in memory manager debugging.
- If defined at the same time as
MRB_DEBUG
, full GC is emitted also per each heap allocation (mrb_malloc()
or etc.). This configuration slows down mruby execution by a factor of 2 to 3 or even more.
MRB_GC_TURN_OFF_GENERATIONAL
- When defined turns generational GC off by default.
MRB_GC_FIXED_ARENA
- When defined used fixed size GC arena.
- Raises
RuntimeError
when this is defined and GC arena size exceedsMRB_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
- Default value is
1024
. - Specifies number of
RBasic
per each heap page. - To calculate the number of bytes per heap page, it is "(size of management data per heap page) + (size per object) *
MRB_HEAP_PAGE_SIZE
". In mruby 3.1.0, the "size of management data per heap page" is 6 words, also "size per object" is 6 words. For a 32-bit CPU,(6 * 4) + (6 * 4) * MRB_HEAP_PAGE_SIZE
gives the bytes of size per heap page. Conversely, for example, to keep the size per heap page to 4 Ki bytes, calculate(4096 - (6 * 4)) / (6 * 4)
to specifyMRB_HEAP_PAGE_SIZE=169
.
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.
MRB_FIXED_STATE_ATEXIT_STACK
- If defined enables fixed size
mrb_state
atexit stack. - Raises
RuntimeError
whenmrb_state_atexit
call count to samemrb_state
exceedsMRB_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_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 boxeddouble
. - Conflicts with
MRB_USE_FLOAT32
andMRB_NO_FLOAT
.
MRB_WORD_BOXING
- If defined represent
mrb_value
as a word. - If defined
Float
will be a mruby object withRBasic
.
MRB_USE_ETEXT_RO_DATA_P
- Use
etext
andedata
section addresses defined by the linker to detect read-only data. - Those addresses are widely available, but not portable, nor standardized.
- This macro is defined by default on User-mode Linux.
MRB_NO_DEFAULT_RO_DATA_P
- Define this macro when the default
mrb_ro_data_p()
does not work for any reason.
MRB_USE_CUSTOM_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
ifptr
is in the read-only section, otherwise returnFALSE
.
MRB_MALLOC_TRIM
- call
malloc_trim(0)
for eachmrb_full_gc()
call
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_STR_LENGTH_MAX
- The maximum length of strings (default 1MB)
- set this value to zero to skip the check
MRB_ARY_LENGTH_MAX
- The maximum length of arrays (default 1MB)
- set this value to zero to skip the check
MRB_FUNCALL_ARGC_MAX
- Default value is
16
. - Specifies 4th argument(
argc
) max value ofmrb_funcall
. - Raises
ArgumentError
when theargc
argument is bigger then this valuemrb_funcall
.
KHASH_DEFAULT_SIZE
- Default value is
32
. - Specifies default size of khash table bucket.
- Used in
kh_init_ ## name
function.
MRB_NO_METHOD_CACHE
- Disable method cache to save memory.
MRB_METHOD_CACHE_SIZE
- Default value is
256
. - Ignored if
MRB_NO_METHOD_CACHE
is defined. - Need to be the power of 2.
MRB_USE_ALL_SYMBOLS
- Make it available
Symbol.all_symbols
inmrbgems/mruby-symbol-ext
- Increase heap memory usage.
MRB_USE_VM_SWITCH_DISPATCH
- Turn on switch dispatch in VM loop