mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
9d32d440eb
The GitHub Super Linter is a more robust and better supported tool than the current GitHub Actions we are using. Running these checks: ERROR_ON_MISSING_EXEC_BIT: true VALIDATE_BASH: true VALIDATE_BASH_EXEC: true VALIDATE_EDITORCONFIG: true VALIDATE_MARKDOWN: true VALIDATE_SHELL_SHFMT: true VALIDATE_YAML: true https://github.com/marketplace/actions/super-linter https://github.com/github/super-linter Added the GitHub Super Linter badge to the README. Also updated the pre-commit framework and added more documentation on pre-commit. Added one more pre-commit check: check-executables-have-shebangs Added one extra check for merge conflicts to our GitHub Actions. EditorConfig and Markdown linting. Minor grammar and spelling fixes. Update linter.yml
209 lines
5.9 KiB
Markdown
209 lines
5.9 KiB
Markdown
# 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_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**.
|
|
|
|
## Debug macros
|
|
|
|
`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/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_FLOAT32`
|
|
|
|
* When defined single precision floating-point type(C type `float`) is used as `mrb_float`.
|
|
* Otherwise, double precision floating-point type(C type `double`) is used as `mrb_float`.
|
|
|
|
`MRB_NO_FLOAT`
|
|
|
|
* When defined removes floating-point numbers from mruby.
|
|
* It makes mruby easier to handle in "Microcontroller 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 as `int32_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 as `int64_t`.
|
|
* Conflicts with `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_FLOAT32` and `MRB_NO_FLOAT`.
|
|
|
|
`MRB_WORD_BOXING`
|
|
|
|
* If defined represent `mrb_value` as a word.
|
|
* If defined `Float` will be a mruby object with `RBasic`.
|
|
|
|
## 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 the 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_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_METHOD_T_STRUCT`
|
|
|
|
* Use C struct to represent `mrb_method_t`
|
|
* No `MRB_USE_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_USE_ALL_SYMBOLS`
|
|
|
|
* Make it available `Symbol.all_symbols` in `mrbgems/mruby-symbol-ext`
|
|
* Increase heap memory usage.
|