Developer Guidelines
This guide covers how to build TornadoVM from source and configure your development environment (code formatting and check styles) to contribute to the project.
Building from Source
Building from source is only needed if you want to contribute to the project, run the latest develop branch, or build a custom backend combination. If you just want to use TornadoVM as a library or application, see the Quick Install instead.
Pre-requisites
GCC >= 13.0 or LLVM/clang (Linux), Xcode >= 15 (macOS), Visual Studio Community 2022 (Windows 11 recommended)
Python >= 3.6
At least one of the following drivers/SDKs:
OpenCL: GPUs and CPUs >= 2.1, FPGAs >= 1.0
NVIDIA driver + CUDA Toolkit 10.0+ (12.0+ on Windows) for the PTX backend; CUDA Toolkit 13.0+ for the CUDA backend
Intel compute-runtime and/or GPU drivers (OpenCL), and Level-Zero >= 1.2
Supported Platforms
OS |
OpenCL Backend |
PTX Backend |
CUDA Backend |
SPIR-V Backend |
Metal Backend |
|---|---|---|---|---|---|
CentOS / Fedora / Ubuntu / Pop!_OS / Suse |
OpenCL for GPUs and CPUs >= 2.1, OpenCL for FPGAs >= 1.0 |
CUDA 10.0+ |
CUDA 13.0+ |
Level-Zero >= 1.2 |
Not supported |
Apple M1/M2/M3/M4/M5 |
OpenCL for GPUs and CPUs >= 1.2 |
Not supported |
Not supported |
Not supported |
macOS (Apple Silicon) |
Windows 10/11 (native/WSL) |
OpenCL for GPUs and CPUs >= 2.1, FPGAs not tested |
CUDA 12.0+ |
CUDA 13.0+ |
Level-Zero >= 1.2 |
Not supported |
Note: The SPIR-V backend runs on Linux and Windows, either via Level Zero (Intel HD Graphics and Intel ARC GPUs) or via OpenCL (any device with OpenCL >= 2.1).
For Intel-based macOS users, OpenCL support can be confirmed here.
Build with the tornadovm-installer script
The tornadovm-installer script downloads/builds OpenJDK, CMake and Maven, then builds TornadoVM. It works on Linux, macOS and Windows and is the recommended way to build from source.
git clone https://github.com/beehive-lab/TornadoVM.git
cd TornadoVM
./bin/tornadovm-installer
# Select the backend(s) to install: 1. opencl 2. spirv 3. ptx 4. metal 5. cuda
# (you can select more than one, comma-separated, e.g. 1, 2, 3)
source setvars.sh # Linux / macOS
# setvars.cmd # Windows
$ ./bin/tornadovm-installer --help
usage: tornadovm-installer [-h] [--jdk JDK] [--backend BACKEND] [--version] [--listJDKs] [--polyglot] [--mvn_single_threaded] [--auto-deps]
options:
--jdk JDK Specify a JDK to install (e.g., 'jdk21', 'graal-jdk-21'). Use --listJDKs to see all options.
--backend BACKEND Select the backend(s) to install: { opencl, ptx, cuda, spirv, metal }
--listJDKs List supported JDKs
--polyglot Enable Truffle Interoperability with GraalVM
--mvn_single_threaded Run Maven in single-threaded mode
--auto-deps Automatically download any missing dependencies
To build with GraalVM instead of stock OpenJDK (needed for Polyglot Programming), pass a Graal JDK keyword:
./bin/tornadovm-installer --jdk graal-jdk-21 --backend opencl
Build with the Makefile
If you already have a JDK, Maven and CMake on your PATH, you can build directly with make:
git clone https://github.com/beehive-lab/TornadoVM.git
cd TornadoVM
make BACKEND=opencl,ptx,spirv # build only the backends you need { opencl, ptx, cuda, spirv, metal }
source setvars.sh
To rebuild with a different backend selection later:
source setvars.sh
make BACKEND=opencl
Note
For NVIDIA GPUs, TornadoVM provides two backends: PTX (emits PTX assembly directly) and CUDA (generates CUDA C, compiled to PTX via NVRTC). Build the CUDA backend on its own with make BACKEND=cuda. See Hybrid API: Native Library Tasks for native library integration (cuBLAS, cuFFT, cuDNN) on top of the CUDA backend.
Windows builds require the Visual Studio developer tools and a Python virtual environment:
.\bin\windowsMicrosoftStudioTools2022.cmd
python -m venv .venv
.venv\Scripts\activate.bat
python bin\tornadovm-installer
setvars.cmd
Verify the Installation
# list the accelerator devices reachable from TornadoVM
tornado --devices
# run the unit test suite
tornado-test -V
# run a specific example (e.g., NBody)
tornado -m tornado.examples/uk.ac.manchester.tornado.examples.compute.NBody
See Running Examples and Benchmarks for more ways to run examples, benchmarks and individual unit tests.
Platform-Specific Notes
Windows 10/11
TornadoVM on native Windows is experimental. Install Visual Studio Community 2022 (with the MSVC C++ x86/64 build tools workload, including the C++ ATL packages) and Python 3, then follow the “Build with the Makefile” steps above. NVIDIA users only need the CUDA Toolkit if they want the PTX or CUDA backend; the OpenCL backend needs just the NVIDIA driver.
Windows Subsystem for Linux (WSL)
TornadoVM also builds inside WSL (Ubuntu). Install the NVIDIA CUDA Toolkit for WSL and/or the Intel compute-runtime following the vendor instructions, then build as on Linux:
git clone https://github.com/beehive-lab/TornadoVM.git tornado
cd tornado
./bin/tornadovm-installer
source setvars.sh
ARM Mali GPUs
Requires JDK 21 with GraalVM and an OpenCL 2.0+ driver for Mali (tested with the Bifrost kernel driver, e.g. on Mali-G71). Note that the cl_khr_fp64 extension (double-precision) is not available on Bifrost GPUs, so double-typed unit tests are not expected to pass there.
RISC-V RVV 1.0 (experimental)
Tested on Linux Bianbu OS 2.0/2.1 (Bananapi F3, Sipeed Lichee PI 3A). The native OpenCL build needs a small patch (the cmake-maven plugin is unsupported on RISC-V), applied automatically by the tornadovm-riscv-patch scripts:
sudo apt-get install clinfo gcc g++
sudo ln -s libOpenCL.so.1 libOpenCL.so
python -m venv /path/to/venv && source /path/to/venv/bin/activate
git clone https://github.com/beehive-lab/tornadovm-riscv-patch.git
bash tornadovm-riscv-patch/apply-riscv-patch-opencl.sh # OpenCL only
# bash tornadovm-riscv-patch/apply-riscv-patch-spirv.sh # OpenCL + SPIR-V
source setvars.sh
tornado --devices
Known Issues on Linux
Ubuntu >= 16.04 needs the
ocl-icd-opencl-devpackage:sudo apt-get install ocl-icd-opencl-dev
IDE Code Formatter
Eclipse / NetBeans
mvn eclipse:eclipse
python scripts/eclipseSetup.py
(NetBeans needs the Eclipse Formatter Plugin.)
IntelliJ (quick setup)
Install the Eclipse Code Formatter and Save Actions plugins, then under File > Settings > Eclipse Code Formatter, enable “Use the Eclipse code formatter” and point it at /scripts/templates/eclipse-settings/Tornadovm_eclipse_formatter.xml.
For the full IntelliJ setup (Checkstyle-IDEA, EditorConfig, and more), see the detailed steps below.
IntelliJ Configurations
1. Enable Eclipse Code Formatter for IntelliJ
Install the Eclipse Code Formatter plugin from the JetBrains plugin repository:
After installation, navigate to File > Settings > Adapter for Eclipse Code Formatter.
Select the option “Use the Eclipse code formatter”.
Load the TornadoVM code formatter from this path
scripts/templates/eclipse-settings/Tornadovm_eclipse_formatter.xmlusing the selector Eclipse Formatter Config > Eclipse workspace/project folder.Click Apply to save the settings.
2. Enable IntelliJ Code Formatter
Go to Menu Settings → Editor → Code Style.
Import the code style scheme by following these steps: - Click on the cog icon in the top right corner of the Code Style settings (“Schema” field). - Choose “Import Schema” - Import the file located at:
scripts/templates/intellij-settings/Tornadovm_intellij_formatter.xml- Click Apply.
3. Checkstyle-IDEA Plugin
This plugin provides both real-time and on-demand scanning of Java files with Checkstyle from within IDEA.
Install the Checkstyle-IDEA plugin by going to File > Settings (Windows/Linux) or IntelliJ IDEA > Preferences… (macOS).
Select Plugins, press Browse Repository, and find the plugin CheckStyle-IDEA
Restart the IDE to complete the installation.
Click File > Settings > Tools > Checkstyle.
Set the Scan Scope to “Only Java sources (including tests)” to run Checkstyle for test source codes as well.
Click the plus sign under Configuration File.
Enter a description (e.g., “TornadoVM Checkstyle”).
Select Use a local Checkstyle file.
Use the Checkstyle configuration file found at
tornado-assembly/src/etc/checkstyle.xml.Click Next > Finish.
Mark the newly imported check configuration as Active and click Apply.
4. EditorConfig
We use JetBrains’ EditorConfig. This allows us to import and export code style settings easily.
Copy the EditorConfig file to the root of your project:
cd $TORNADO_ROOT
cp scripts/templates/intellij-settings/.editorconfig .
In IntelliJ IDEA, navigate to Menu Settings → Editor → Code Style.
At the bottom of the settings window, check the box “Use EditorConfig”.
1. Save Actions
Install the Save Actions Plugin. This allows you to define post-save actions, including code formatting.
To enable the auto-formatter with save-actions, follow these steps: - Go to Settings > Other Settings > Save Actions. - Mark the following options: Activate save actions on save, Activate save actions in shortcut and Reformat file.
Pre-commit hooks
Install pre-commit hooks
Pre-commit docs: <https://pre-commit.com/>_
pip install pre-commit
pre-commit install
Every time there is a commit in the TornadoVM repo, the pre-commit will pass some checks (including code check style and code formatter). If all checks are correct, then the commit will be done.
To guarantee the commit, pass the check style before:
make checkstyle ### If there are errors regarding the code formatting, fix it at this stage.