mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Modify code blocks
This commit is contained in:
+140
-174
@@ -23,11 +23,9 @@ Inside of the root directory of the mruby source exist a file
|
||||
called *build_config.rb*. This file contains the build configuration
|
||||
of mruby and looks like this for example:
|
||||
|
||||
```
|
||||
MRuby::Build.new do |conf|
|
||||
toolchain :gcc
|
||||
end
|
||||
```
|
||||
MRuby::Build.new do |conf|
|
||||
toolchain :gcc
|
||||
end
|
||||
|
||||
All tools necessary to compile mruby can be set or modified here. In case
|
||||
you want to maintain an additional *build_config.rb* you can define a
|
||||
@@ -51,26 +49,20 @@ configurates the build environment for specific compiler infrastructures.
|
||||
|
||||
Toolchain configuration for the GNU C Compiler.
|
||||
|
||||
```
|
||||
toolchain :gcc
|
||||
```
|
||||
toolchain :gcc
|
||||
|
||||
#### clang
|
||||
|
||||
Toolchain configuration for the LLVM C Compiler clang. Mainly equal to the
|
||||
GCC toolchain.
|
||||
|
||||
```
|
||||
toolchain :clang
|
||||
```
|
||||
toolchain :clang
|
||||
|
||||
#### Visual Studio 2012
|
||||
|
||||
Toolchain configuration for Visual Studio 2012 on Windows.
|
||||
|
||||
```
|
||||
toolchain :vs2012
|
||||
```
|
||||
toolchain :vs2012
|
||||
|
||||
### Binaries
|
||||
|
||||
@@ -81,108 +73,92 @@ process. The following tools can be selected:
|
||||
* mirb (mruby interactive shell
|
||||
|
||||
To select all define an array in ```conf.bins```:
|
||||
```
|
||||
conf.bins = %(mrbc mruby mirb)
|
||||
```
|
||||
|
||||
conf.bins = %(mrbc mruby mirb)
|
||||
|
||||
### File Separator
|
||||
|
||||
Some environments require a different file separator character. It is possible to
|
||||
set the character via ```conf.file_separator```.
|
||||
|
||||
```
|
||||
conf.file_separator = '/'
|
||||
```
|
||||
conf.file_separator = '/'
|
||||
|
||||
### C Compiler
|
||||
|
||||
Configuration of the C compiler binary, flags and include paths.
|
||||
|
||||
```
|
||||
conf.cc do |cc|
|
||||
cc.command = ...
|
||||
cc.flags = ...
|
||||
cc.include_paths = ...
|
||||
cc.defines = ...
|
||||
cc.option_include_path = ...
|
||||
cc.option_define = ...
|
||||
cc.compile_options = ...
|
||||
end
|
||||
```
|
||||
conf.cc do |cc|
|
||||
cc.command = ...
|
||||
cc.flags = ...
|
||||
cc.include_paths = ...
|
||||
cc.defines = ...
|
||||
cc.option_include_path = ...
|
||||
cc.option_define = ...
|
||||
cc.compile_options = ...
|
||||
end
|
||||
|
||||
### Linker
|
||||
|
||||
Configuration of the Linker binary, flags and library paths.
|
||||
|
||||
```
|
||||
conf.linker do |linker|
|
||||
linker.command = ...
|
||||
linker.flags = ...
|
||||
linker.flags_before_libraries = ...
|
||||
linker.libraries = ...
|
||||
linker.flags_after_libraries = ...
|
||||
linker.library_paths = ....
|
||||
linker.option_library = ...
|
||||
linker.option_library_path = ...
|
||||
linker.link_options = ...
|
||||
end
|
||||
```
|
||||
conf.linker do |linker|
|
||||
linker.command = ...
|
||||
linker.flags = ...
|
||||
linker.flags_before_libraries = ...
|
||||
linker.libraries = ...
|
||||
linker.flags_after_libraries = ...
|
||||
linker.library_paths = ....
|
||||
linker.option_library = ...
|
||||
linker.option_library_path = ...
|
||||
linker.link_options = ...
|
||||
end
|
||||
|
||||
### Archiver
|
||||
|
||||
Configuration of the Archiver binary and flags.
|
||||
|
||||
```
|
||||
conf.archiver do |archiver|
|
||||
archiver.command = ...
|
||||
archiver.archive_options = ...
|
||||
end
|
||||
```
|
||||
conf.archiver do |archiver|
|
||||
archiver.command = ...
|
||||
archiver.archive_options = ...
|
||||
end
|
||||
|
||||
### Parser Generator
|
||||
|
||||
Configuration of the Parser Generator binary and flags.
|
||||
|
||||
```
|
||||
conf.yacc do |yacc|
|
||||
yacc.command = ...
|
||||
yacc.compile_options = ...
|
||||
end
|
||||
```
|
||||
conf.yacc do |yacc|
|
||||
yacc.command = ...
|
||||
yacc.compile_options = ...
|
||||
end
|
||||
|
||||
### GPerf
|
||||
|
||||
Configuration of the GPerf binary and flags.
|
||||
```
|
||||
conf.gperf do |gperf|
|
||||
gperf.command = ...
|
||||
gperf.compile_options = ...
|
||||
end
|
||||
```
|
||||
|
||||
conf.gperf do |gperf|
|
||||
gperf.command = ...
|
||||
gperf.compile_options = ...
|
||||
end
|
||||
|
||||
### File Extensions
|
||||
|
||||
```
|
||||
conf.exts do |exts
|
||||
exts.object = ...
|
||||
exts.executable = ...
|
||||
exts.library = ...
|
||||
end
|
||||
```
|
||||
conf.exts do |exts
|
||||
exts.object = ...
|
||||
exts.executable = ...
|
||||
exts.library = ...
|
||||
end
|
||||
|
||||
### Mrbgems
|
||||
|
||||
Integrate GEMs in the build process.
|
||||
|
||||
```
|
||||
# Integrate GEM with additional configuration
|
||||
conf.gem 'path/to/gem' do |g|
|
||||
g.cc.flags << ...
|
||||
end
|
||||
# Integrate GEM with additional configuration
|
||||
conf.gem 'path/to/gem' do |g|
|
||||
g.cc.flags << ...
|
||||
end
|
||||
|
||||
# Integrate GEM without additional configuration
|
||||
conf.gem 'path/to/another/gem'
|
||||
```
|
||||
# Integrate GEM without additional configuration
|
||||
conf.gem 'path/to/another/gem'
|
||||
|
||||
## Cross-Compilation
|
||||
|
||||
@@ -192,14 +168,12 @@ achive this the *build_config.rb* needs to contain an instance of
|
||||
tools and flags for the target platform. An example could look
|
||||
like this:
|
||||
|
||||
```
|
||||
MRuby::CrossBuild.new('32bit') do |conf|
|
||||
toolchain :gcc
|
||||
MRuby::CrossBuild.new('32bit') do |conf|
|
||||
toolchain :gcc
|
||||
|
||||
conf.cc.flags << "-m32"
|
||||
conf.linker.flags << "-m32
|
||||
end
|
||||
```
|
||||
conf.cc.flags << "-m32"
|
||||
conf.linker.flags << "-m32
|
||||
end
|
||||
|
||||
All configuration options of ```MRuby::Build``` can also be used
|
||||
in ```MRuby::CrossBuild```.
|
||||
@@ -209,29 +183,27 @@ in ```MRuby::CrossBuild```.
|
||||
During the build process the directory *build* will be created in the
|
||||
root directory. The structure of this directory will look like this:
|
||||
|
||||
```
|
||||
+- build
|
||||
|
|
||||
+- host
|
||||
|
|
||||
+- bin <- Binaries (mirb, mrbc and mruby)
|
||||
|
|
||||
+- lib <- Libraries (libmruby.a and libmruby_core.a)
|
||||
|
|
||||
+- mrblib
|
||||
|
|
||||
+- src
|
||||
|
|
||||
+- test <- mrbtest tool
|
||||
|
|
||||
+- tools
|
||||
|
|
||||
+- mirb
|
||||
|
|
||||
+- mrbc
|
||||
|
|
||||
+- mruby
|
||||
```
|
||||
+- build
|
||||
|
|
||||
+- host
|
||||
|
|
||||
+- bin <- Binaries (mirb, mrbc and mruby)
|
||||
|
|
||||
+- lib <- Libraries (libmruby.a and libmruby_core.a)
|
||||
|
|
||||
+- mrblib
|
||||
|
|
||||
+- src
|
||||
|
|
||||
+- test <- mrbtest tool
|
||||
|
|
||||
+- tools
|
||||
|
|
||||
+- mirb
|
||||
|
|
||||
+- mrbc
|
||||
|
|
||||
+- mruby
|
||||
|
||||
The compilation workflow will look like this:
|
||||
* compile all files under *src* (object files will be stored
|
||||
@@ -251,60 +223,56 @@ link with *build/host/lib/libmruby.a*
|
||||
* create ```build/host/bin/mirb``` by compile *tools/mirb/mirb.c* and
|
||||
link with *build/host/lib/libmruby.a*
|
||||
|
||||
```
|
||||
_____ _____ ______ ____ ____ _____ _____ ____
|
||||
| CC |->|GEN |->|AR |->|CC |->|CC |->|AR |->|CC |->|CC |
|
||||
| *.c | |y.tab| |core.a| |mrbc| |*.rb| |lib.a| |mruby| |mirb|
|
||||
----- ----- ------ ---- ---- ----- ----- ----
|
||||
```
|
||||
_____ _____ ______ ____ ____ _____ _____ ____
|
||||
| CC |->|GEN |->|AR |->|CC |->|CC |->|AR |->|CC |->|CC |
|
||||
| *.c | |y.tab| |core.a| |mrbc| |*.rb| |lib.a| |mruby| |mirb|
|
||||
----- ----- ------ ---- ---- ----- ----- ----
|
||||
|
||||
### Cross-Compilation
|
||||
|
||||
In case of a cross-compilation to *i386* the *build* directory structure looks
|
||||
like this:
|
||||
|
||||
```
|
||||
+- build
|
||||
|
|
||||
+- host
|
||||
| |
|
||||
| +- bin <- Native Binaries
|
||||
| |
|
||||
| +- lib <- Native Libraries
|
||||
| |
|
||||
| +- mrblib
|
||||
| |
|
||||
| +- src
|
||||
| |
|
||||
| +- test <- Native mrbtest tool
|
||||
| |
|
||||
| +- tools
|
||||
| |
|
||||
| +- mirb
|
||||
| |
|
||||
| +- mrbc
|
||||
| |
|
||||
| +- mruby
|
||||
+- i386
|
||||
|
|
||||
+- bin <- Cross-compiled Binaries
|
||||
|
|
||||
+- lib <- Cross-compiled Libraries
|
||||
|
|
||||
+- mrblib
|
||||
|
|
||||
+- src
|
||||
|
|
||||
+- test <- Cross-compiled mrbtest tool
|
||||
|
|
||||
+- tools
|
||||
|
|
||||
+- mirb
|
||||
|
|
||||
+- mrbc
|
||||
|
|
||||
+- mruby
|
||||
```
|
||||
+- build
|
||||
|
|
||||
+- host
|
||||
| |
|
||||
| +- bin <- Native Binaries
|
||||
| |
|
||||
| +- lib <- Native Libraries
|
||||
| |
|
||||
| +- mrblib
|
||||
| |
|
||||
| +- src
|
||||
| |
|
||||
| +- test <- Native mrbtest tool
|
||||
| |
|
||||
| +- tools
|
||||
| |
|
||||
| +- mirb
|
||||
| |
|
||||
| +- mrbc
|
||||
| |
|
||||
| +- mruby
|
||||
+- i386
|
||||
|
|
||||
+- bin <- Cross-compiled Binaries
|
||||
|
|
||||
+- lib <- Cross-compiled Libraries
|
||||
|
|
||||
+- mrblib
|
||||
|
|
||||
+- src
|
||||
|
|
||||
+- test <- Cross-compiled mrbtest tool
|
||||
|
|
||||
+- tools
|
||||
|
|
||||
+- mirb
|
||||
|
|
||||
+- mrbc
|
||||
|
|
||||
+- mruby
|
||||
|
||||
An extra directory is created for the target platform. In case you
|
||||
compile for *i386* a directory called *i386* is created under the
|
||||
@@ -330,25 +298,23 @@ link with *build/i386/lib/libmruby.a*
|
||||
* create ```build/i386/bin/mrbc``` by cross-compile *tools/mrbc/mrbc.c* and
|
||||
link with *build/i386/lib/libmruby_core.a*
|
||||
|
||||
```
|
||||
_____________________________________________________________
|
||||
| Native Compilation for Host System |
|
||||
| _____ ______ _____ ____ ____ _____ |
|
||||
|| CC | -> |AR | -> |GEN | -> |CC | -> |CC | -> |AR ||
|
||||
|| *.c | |core.a| |y.tab| |mrbc| |*.rb| |lib.a||
|
||||
| ----- ------ ----- ---- ---- ----- |
|
||||
-------------------------------------------------------------
|
||||
||
|
||||
\||/
|
||||
\/
|
||||
______________________________________________________________
|
||||
| Cross Compilation for Target System |
|
||||
| _____ _____ _____ ____ ______ _____ |
|
||||
|| CC | -> |AR | -> |CC | -> |CC | -> |AR | -> |CC ||
|
||||
|| *.c | |lib.a| |mruby| |mirb| |core.a| |mrbc ||
|
||||
| ----- ----- ----- ---- ------ ----- |
|
||||
--------------------------------------------------------------
|
||||
```
|
||||
_____________________________________________________________
|
||||
| Native Compilation for Host System |
|
||||
| _____ ______ _____ ____ ____ _____ |
|
||||
|| CC | -> |AR | -> |GEN | -> |CC | -> |CC | -> |AR ||
|
||||
|| *.c | |core.a| |y.tab| |mrbc| |*.rb| |lib.a||
|
||||
| ----- ------ ----- ---- ---- ----- |
|
||||
-------------------------------------------------------------
|
||||
||
|
||||
\||/
|
||||
\/
|
||||
______________________________________________________________
|
||||
| Cross Compilation for Target System |
|
||||
| _____ _____ _____ ____ ______ _____ |
|
||||
|| CC | -> |AR | -> |CC | -> |CC | -> |AR | -> |CC ||
|
||||
|| *.c | |lib.a| |mruby| |mirb| |core.a| |mrbc ||
|
||||
| ----- ----- ----- ---- ------ ----- |
|
||||
--------------------------------------------------------------
|
||||
|
||||
## Test Environment
|
||||
|
||||
|
||||
@@ -99,13 +99,10 @@ mrbgems expects that you have implemented a C method called
|
||||
by the name of your GEM. If you call your GEM *c_extension_example*, your
|
||||
finalizer method could look like this:
|
||||
|
||||
```
|
||||
void
|
||||
mrb_c_extension_example_gem_final(mrb_state* mrb) {
|
||||
free(someone);
|
||||
}
|
||||
```
|
||||
|
||||
void
|
||||
mrb_c_extension_example_gem_final(mrb_state* mrb) {
|
||||
free(someone);
|
||||
}
|
||||
|
||||
### Example
|
||||
|
||||
|
||||
Reference in New Issue
Block a user