mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Update MJIT doc about bindgen and platforms [ci skip]
This commit is contained in:
parent
cb26917d1c
commit
fb769aaa14
2 changed files with 78 additions and 16 deletions
78
doc/mjit.md
Normal file
78
doc/mjit.md
Normal file
|
@ -0,0 +1,78 @@
|
|||
# MJIT
|
||||
|
||||
This document has some tips that might be useful when you work on MJIT.
|
||||
|
||||
## Supported platforms
|
||||
|
||||
The following platforms are either tested on CI or assumed to work.
|
||||
|
||||
* OS: Linux, macOS
|
||||
* Arch: x86\_64, aarch64, arm64, i686, i386
|
||||
|
||||
### Not supported
|
||||
|
||||
The MJIT support for the following platforms is no longer maintained.
|
||||
|
||||
* OS: Windows (mswin, MinGW), Solaris
|
||||
* Arch: SPARC
|
||||
|
||||
### Architectures
|
||||
|
||||
## Bindgen
|
||||
|
||||
If you see an "MJIT bindgen" GitHub Actions failure, please commit the `git diff` shown on the failed job.
|
||||
|
||||
Refer to the following instructions for doing the same thing locally.
|
||||
Similar to `make yjit-bindgen`, `make mjit-bindgen` requires libclang.
|
||||
See also: [mjit-bindgen.yml](../.github/workflows/mjit-bindgen.yml)
|
||||
|
||||
macOS seems to have libclang by default, but I'm not sure how to deal with 32bit architectures.
|
||||
For now, you may generate c\_64.rb with a 64bit binary, and then manually modify c\_32.rb accordingly.
|
||||
|
||||
### x86\_64-linux
|
||||
|
||||
```sh
|
||||
sudo apt install \
|
||||
build-essential \
|
||||
libssl-dev libyaml-dev libreadline6-dev \
|
||||
zlib1g-dev libncurses5-dev libffi-dev \
|
||||
libclang1
|
||||
./autogen.sh
|
||||
./configure --enable-yjit=dev_nodebug --disable-install-doc
|
||||
make -j
|
||||
make mjit-bindgen
|
||||
```
|
||||
|
||||
### i686-linux
|
||||
|
||||
```sh
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo apt install \
|
||||
crossbuild-essential:i386 \
|
||||
libssl-dev:i386 libyaml-dev:i386 libreadline6-dev:i386 \
|
||||
zlib1g-dev:i386 libncurses5-dev:i386 libffi-dev:i386 \
|
||||
libclang1:i386
|
||||
./autogen.sh
|
||||
./configure --disable-install-doc
|
||||
make -j
|
||||
make mjit-bindgen
|
||||
```
|
||||
|
||||
Note that you cannot run x86\_64 bindgen with an i686 binary, and vice versa.
|
||||
Also, when you install libclang1:i386, libclang1 will be uninstalled.
|
||||
You can have only either of these at a time.
|
||||
|
||||
## Local development
|
||||
|
||||
### Always run make install
|
||||
|
||||
Always run `make install` before running MJIT. It could easily cause a SEGV if you don't.
|
||||
MJIT looks for the installed header for security reasons.
|
||||
|
||||
### --mjit-debug vs --mjit-debug=-ggdb3
|
||||
|
||||
`--mjit-debug=[flags]` allows you to specify arbitrary flags while keeping other compiler flags like `-O3`,
|
||||
which is useful for profiling benchmarks.
|
||||
|
||||
`--mjit-debug` alone, on the other hand, disables `-O3` and adds debug flags.
|
||||
If you're debugging MJIT, what you need to use is not `--mjit-debug=-ggdb3` but `--mjit-debug`.
|
|
@ -1,16 +0,0 @@
|
|||
# MJIT
|
||||
|
||||
Here are some tips that might be useful when you work on MJIT:
|
||||
|
||||
## Always run make install
|
||||
|
||||
Always run `make install` before running MJIT. It could easily cause a SEGV if you don't.
|
||||
MJIT looks for the installed header for security reasons.
|
||||
|
||||
## --mjit-debug vs --mjit-debug=-ggdb3
|
||||
|
||||
`--mjit-debug=[flags]` allows you to specify arbitrary flags while keeping other compiler flags like `-O3`,
|
||||
which is useful for profiling benchmarks.
|
||||
|
||||
`--mjit-debug` alone, on the other hand, disables `-O3` and adds debug flags.
|
||||
If you're debugging MJIT, what you need to use is not `--mjit-debug=-ggdb3` but `--mjit-debug`.
|
Loading…
Reference in a new issue