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
84 lines
2.5 KiB
Markdown
84 lines
2.5 KiB
Markdown
# Linking `libmruby` to your application
|
|
|
|
You have two ways to link `libmruby` to your application.
|
|
|
|
* using executable gem.
|
|
* using normal compilation process
|
|
|
|
## Executable Gems
|
|
|
|
If your application is relatively small, `mrbgem` is an easier way to
|
|
create the executable. By tradition, the gem name start with
|
|
`mruby-bin-`, e.g. `mruby-bin-debugger`.
|
|
|
|
### `mrbgem.rake` file
|
|
|
|
The executable name is specified in `mrbgem.rake` file at the top of
|
|
your `mrbgem` directory.
|
|
|
|
```ruby
|
|
MRuby::Gem::Specification.new('mruby-bin-example') do |spec|
|
|
spec.license = 'MIT'
|
|
spec.author = 'mruby developers'
|
|
spec.summary = 'Example for executable command gem'
|
|
spec.bins = %w(mruby-example) # <- this is binary name
|
|
end
|
|
```
|
|
|
|
### Source tree structure
|
|
|
|
The source file for the gem executable should be in
|
|
`<gem-name>/tools/<bin-name>`. Currently, we support C or C++ source code
|
|
(`.c`, `.cpp`, `.cxx`, `.cc`) for the executable. Ruby source files are not
|
|
supported. Put the functionality in the different gem and specify dependency to
|
|
it in `mrbgem.rake`.
|
|
|
|
## Normal compilation process
|
|
|
|
The `libmruby` is a normal library so that you can just link it to your
|
|
application. Specify proper compiler options (`-I` etc.) and linker options
|
|
(`-Lmruby` etc.) to compile and link your application. Specify those options in
|
|
your build script (e.g. `Makefile`).
|
|
|
|
### Compiler options
|
|
|
|
You need to specify compiler options that are compatible to mruby configuration,
|
|
for example:
|
|
|
|
* `-I` to specify the place for mruby header files
|
|
* `-D` to specify mruby configuration macros
|
|
|
|
To retrieve compiler options used to build `mruby`, you can use `mruby-config`
|
|
command with following options:
|
|
|
|
* `--cc` compiler name
|
|
* `--cflags` options passed to compiler
|
|
|
|
```
|
|
$ mruby-config --cflags
|
|
-std=gnu99 -g -O3 -Wall -DMRB_GC_FIXED_ARENA -I/home/matz/work/mruby/include -I/home/matz/work/mruby/build/host/include
|
|
```
|
|
|
|
### Linker options
|
|
|
|
Just like compiler options, you need to specify linker options that are
|
|
compatible to mruby configuration.
|
|
|
|
To retrieve linker options, you can use `mruby-config` with following options:
|
|
|
|
* `--ld` linker name
|
|
* `--ldflags` options passed to linker
|
|
* `--ldflags-before-libs` options passed to linker before linked libraries
|
|
* `--libs` linked libraries
|
|
|
|
```
|
|
$ mruby-config --ldflags
|
|
-L/home/matz/work/mruby/build/host/lib
|
|
|
|
$ mruby-config --ldflags-before-libs
|
|
# <nothing in this case>
|
|
|
|
$ mruby-config --libs
|
|
-lmruby -lm
|
|
```
|