Refactor LLVM JIT (#1613)
Refactor LLVM JIT for some purposes: - To simplify the source code of JIT compilation - To simplify the JIT modes - To align with LLVM latest changes - To prepare for the Multi-tier JIT compilation, refer to #1302 The changes mainly include: - Remove the MCJIT mode, replace it with ORC JIT eager mode - Remove the LLVM legacy pass manager (only keep the LLVM new pass manager) - Change the lazy mode's LLVM module/function binding: change each function in an individual LLVM module into all functions in a single LLVM module - Upgraded ORC JIT to ORCv2 JIT to enable lazy compilation Refer to #1468
This commit is contained in:
@ -41,7 +41,6 @@ cmake -DWAMR_BUILD_PLATFORM=linux -DWAMR_BUILD_TARGET=ARM
|
||||
|
||||
- **WAMR_BUILD_AOT**=1/0, enable AOT or not, default to enable if not set
|
||||
- **WAMR_BUILD_JIT**=1/0, enable LLVM JIT or not, default to disable if not set
|
||||
- **WAMR_BUILD_LAZY_JIT**=1/0, whether to use Lazy JIT mode or not when *WAMR_BUILD_JIT* is set, default to enable if not set
|
||||
- **WAMR_BUILD_FAST_JIT**=1/0, enable Fast JIT or not, default to disable if not set
|
||||
|
||||
#### **Configure LIBC**
|
||||
@ -224,7 +223,7 @@ make
|
||||
By default in Linux, the `fast interpreter`, `AOT` and `Libc WASI` are enabled, and JIT is disabled.
|
||||
And the build target is set to X86_64 or X86_32 depending on the platform's bitwidth.
|
||||
|
||||
There are total 6 running modes supported: fast interpreter, classi interpreter, AOT, LLVM Lazy JIT, LLVM MC JIT and Fast JIT.
|
||||
There are total 5 running modes supported: fast interpreter, classi interpreter, AOT, LLVM JIT and Fast JIT.
|
||||
|
||||
(1) To run a wasm file with `fast interpreter` mode - build iwasm with default build and then:
|
||||
```Bash
|
||||
@ -250,32 +249,34 @@ wamrc -o <AOT file> <WASM file>
|
||||
iwasm <AOT file>
|
||||
```
|
||||
|
||||
(4) To enable the `LLVM Lazy JIT` mode, firstly we should build LLVM library:
|
||||
(4) To enable the `LLVM JIT` mode, firstly we should build the LLVM library:
|
||||
``` Bash
|
||||
cd product-mini/platforms/linux/
|
||||
./build_llvm.sh (The llvm source code is cloned under <wamr_root_dir>/core/deps/llvm and auto built)
|
||||
```
|
||||
|
||||
Then pass argument `-DWAMR_BUILD_JIT=1` to cmake to enable LLVM Lazy JIT:
|
||||
Then pass argument `-DWAMR_BUILD_JIT=1` to cmake to enable LLVM JIT:
|
||||
``` Bash
|
||||
mkdir build && cd build
|
||||
cmake .. -DWAMR_BUILD_JIT=1
|
||||
make
|
||||
```
|
||||
|
||||
(5) Or disable `LLVM Lazy JIT` and enable `LLVM MC JIT` instead:
|
||||
```Bash
|
||||
Note:
|
||||
By default, the LLVM Orc JIT with Lazy compilation is enabled to speedup the lanuching process and reduce
|
||||
the JIT compilation time by creating backend threads to compile the WASM functions parallely, and for the
|
||||
main thread, the functions in the module will not be compiled until they are firstly called and haven't been
|
||||
compiled by the compilation threads.
|
||||
|
||||
If developer wants to disable the Lazy compilation, we can:
|
||||
``` Bash
|
||||
mkdir build && cd build
|
||||
cmake .. -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_LAZY_JIT=0
|
||||
make
|
||||
```
|
||||
In which all the WASM functions will be previously compiled before main thread starts to run the wasm module.
|
||||
|
||||
By default, the LLVM Orc Lazy JIT is enabled to speedup the lanuching process and reduce the JIT compilation time
|
||||
by creating threads to compile the WASM functions parallely, and for the main thread, the functions in the
|
||||
module will not be compiled until they are firstly called and haven't been compiled by the compilation threads.
|
||||
To disable it and enable LLVM MC JIT instead, please pass argument `-DWAMR_BUILD_LAZY_JIT=0` to cmake.
|
||||
|
||||
(6) To enable the `Fast JIT` mode:
|
||||
(5) To enable the `Fast JIT` mode:
|
||||
``` Bash
|
||||
mkdir build && cd build
|
||||
cmake .. -DWAMR_BUILD_FAST_JIT=1
|
||||
@ -588,7 +589,7 @@ In order to use this, you need at least version 4.3.1 of ESP-IDF.
|
||||
If you don't have it installed, follow the instructions [here](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/#get-started-get-prerequisites).
|
||||
ESP-IDF also installs the toolchains needed for compiling WAMR and ESP-IDF.
|
||||
A small demonstration of how to use WAMR and ESP-IDF can be found under [product_mini](/product-mini/platforms/esp-idf).
|
||||
The demo builds WAMR for ESP-IDF and runs a small wasm program.
|
||||
The demo builds WAMR for ESP-IDF and runs a small wasm program.
|
||||
In order to run it for your specific Espressif chip, edit the [build_and_run.sh](/product-mini/platforms/esp-idf/build_and_run.sh) file and put the correct toolchain file (see #Cross-compilation) and `IDF_TARGET`.
|
||||
Before compiling it is also necessary to call ESP-IDF's `export.sh` script to bring all compile time relevant information in scope.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user