Files
mruby-mruby/doc/mrbgems/README.md
T
2012-12-08 17:37:35 +08:00

183 lines
5.5 KiB
Markdown

# mrbgems
mrbgems is a library manager to integrate C and Ruby extension in an easy and
standardised way into mruby.
## Usage
By default mrbgems is currently deactivated. As long as mrbgems is deactivated
there is no overhead inside of the mruby interpreter.
To activate you have to make the following changes:
* set ```ENABLE_GEMS``` to ```true``` in *$(MRUBY_ROOT)/Makefile*
* comment out ```DISABLE_GEMS``` in *$(MRUBY_ROOT)/include/mrbconf.h*
* activate GEMs in *$(MRUBY_ROOT)/mrbgems/GEMS.active*
Every activated GEM has to be listed in *GEMS.active*. You have to point to
the GEM directory absolute or relative (based on *mrbgems/g*). It is possible
to point to an alternative activate file:
* set ```ACTIVE_GEMS``` to your customized GEM list in *$(MRUBY_ROOT)/Makefile*
## GEM Structure
The maximal GEM structure looks like this:
```
+- GEM_NAME <- Name of GEM
|
+- include/ <- Header files for C extension
|
+- mrblib/ <- Source for Ruby extension
|
+- src/ <- Source for C extension
|
+- test/ <- Test code (Ruby)
|
+- Makefile <- Makefile for GEM
|
+- README.md <- Readme for GEM
```
The folder *mrblib* contains pure Ruby files to extend mruby. The folder *src*
contains C files to extend mruby. The folder *test* contains pure Ruby files
for testing purposes which will be used by ```mrbtest```. The *Makefile* contains
rules to build a *mrb-GEMNAME-gem.a* file inside of the GEM directory. Which
will be used for integration into the normal mruby build process. *README.md*
is a short description of your GEM.
## Build process
mrbgems will call ```make``` to build and *make clean* to clean your GEM. You
have to build a *mrb-GEMNAME-gem.a* file during this build process. How you
are going to do this is up to you.
To make your build process more easier and more standardized we suggest
to include *mrbgems/Makefile4gem* which defines some helper rules. In
case you include this Makefile you have to define specific pre-defined
rules like ```gem-all``` for the build process and ```gem-clean``` for
the clean process. There are additional helper rules for specific GEM
examples below.
## C Extension
mruby can be extended with C. It is possible by using the C API to
integrate C libraries into mruby.
The *Makefile* is used for building a C extension. You should
define ```GEM``` (GEM name), ```GEM_C_FILES``` (all C files) and
```GEM_OBJECTS``` (all Object files). Pay also attention that your
*Makefile* has to build the object files. You can use
```gem-c-files``` to build a *mrb-GEMNAME-gem.a* out of your
Object code and use ```gem-clean-c-files``` to clean the object files.
### Pre-Conditions
mrbgems expects that you have implemented a C method called
```mrb_YOURGEMNAME_gem_init(mrb_state)```. ```YOURGEMNAME``` will be replaced
by the name of you GEM. The directory name of your GEM is considered also
as the name! If you call your GEM directory *c_extension_example*, your
initialisation method could look like this:
```
void
mrb_c_extension_example_gem_init(mrb_state* mrb) {
_class_cextension = mrb_define_module(mrb, "CExtension");
mrb_define_class_method(mrb, _class_cextension, "c_method", mrb_c_method, ARGS_NONE());
}
```
mrbgems will also use the *gem-clean* make target to clean up your GEM. Implement
this target with the necessary rules!
### Example
```
+- c_extension_example/
|
+- src/
| |
| +- example.c <- C extension source
|
+- test/
| |
| +- example.rb <- Test code for C extension
|
+- Makefile <- Build rules for C extension
|
+- README.md
```
## Ruby Extension
mruby can be extended with pure Ruby. It is possible to override existing
classes or add new ones in this way. Put all Ruby files into the *mrblib*
folder.
The *Makefile* is used for building a Ruby extension. You should define
```GEM``` (GEM name) and *GEM_RB_FILES* (all Ruby files). You can use
```gem-rb-files``` to build a *mrb-GEMNAME-gem.a* out of your Ruby code and use
```gem-clean-rb-files``` to clean the generated C files.
### Pre-Conditions
mrbgems will automatically call the ```gem-all``` make target of your GEM.
mrbgems will also use the ```gem-clean``` make target to clean up your GEM. Implement
this target with the necessary rules!
### Example
```
+- ruby_extension_example/
|
+- mrblib/
| |
| +- example.rb <- Ruby extension source
|
+- test/
| |
| +- example.rb <- Test code for Ruby extension
|
+- Makefile
|
+- README.md
```
## C and Ruby Extension
mruby can be extended with C and Ruby at the same time. It is possible to
override existing classes or add new ones in this way. Put all Ruby files
into the *mrblib* folder and all C files into the *src* folder.
The *Makefile* is used for building a C and Ruby extension. You should
define ```GEM``` (GEM name), ```GEM_C_FILES``` (all C files),
```GEM_OBJECTS``` (all Object files) and ```GEM_RB_FILES``` (all Ruby
files). You can use ```gem-c-and-rb-files``` to build a
*mrb-GEMNAME-gem.a* out of your Object and Ruby code. Use
```gem-clean-c-and-rb-files``` to clean the generated C files.
### Pre-Conditions
See C and Ruby example.
### Example
```
+- c_and_ruby_extension_example/
|
+- mrblib/
| |
| +- example.rb <- Ruby extension source
|
+- src/
| |
| +- example.c <- C extension source
|
+- test/
| |
| +- example.rb <- Test code for C and Ruby extension
|
+- Makefile
|
+- README.md