2.2 KiB
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
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
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
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
.