Note: Following steps have been tested on Debian system creates using debian-riscv. The image built using these scripts should contain everything needed to build OMR on RISC-V. It should be possible to build OMR on RISC-V using Fedora images but this has not been tried.
Note: You will need riscv.h
and riscv-opc.h
headers from GNU binutils. You
can get them using (the image created using debian-riscv contains them):
sudo wget "-O/usr/local/include/riscv.h" 'https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=include/opcode/riscv.h;hb=HEAD'
sudo wget "-O/usr/local/include/riscv-opc.h" 'https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=include/opcode/riscv-opc.h;hb=HEAD'
git clone https://github.com/eclipse-omr/omr
cd omr
mkdir build
cd build
cmake .. \
-Wdev -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DOMR_COMPILER=ON -DOMR_TEST_COMPILER=ON \
-DOMR_JITBUILDER=ON -DOMR_JITBUILDER_TEST=ON
make -j4
Notes:
- You must return
cmake ...
when you add/remove/rename files (generally, when you change anyCMakeLists.txt
). -DCMAKE_BUILD_TYPE=Debug
is necessary to produce debug symbols-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
is to produce acompile_commands.json
used by Clang-based tools. Should not harm.
To see what tests are in minimal testsuite run (assume you're in build
directory)
cd fvtest/compilertest
./compilertest --gtest_list_tests --gtest_filter=MinimalTest*
To run specific test, say MeaningOfLife
:
./compilertest --gtest_filter=MinimalTest.MeaningOfLife
To run all tests in minimal test suite:
./compilertest --gtest_filter=MinimalTest.*
To run selected TRIL tests:
cd fvtest/compilertriltest
./comptest --gtest_filter=*Arithmetic*/Int32*:LogicalTest/Int32*Unary*
To run ALL TRIL tests:
cd fvtest/compilertriltest
TR_Options=softFailOnAssume ./comptest
Note: At the time of writing, some opcodes used in TRIL tests are still unimplemented, causing TR_ASSERT()
failure. TR_Options=songftFailOnAssume
causes this (and all others) assertion to just abort the compilation. This way, hitting such and unimplemented opcode does not terminate whole test run.
Note: Following steps are for (Debian 10 "buster")2. It should work on Debian Testing ("bullseye"). It may work on other debian-based distributions, perhaps with some modification. However, it has been tested only on Debian 10 "buster".
-
Install RISCV64 toolchain:
sudo apt install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu libgcc1-riscv64-cross libc6-dev-riscv64-cross libstdc++-8-dev-riscv64-cross linux-libc-dev-riscv64-cross
-
Download required
riscv.h
andriscv-opc.h
from GNU binutils:sudo wget "-O/usr/riscv64-linux-gnu/include/riscv.h" 'https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=include/opcode/riscv.h;hb=HEAD' sudo wget "-O/usr/riscv64-linux-gnu/include/riscv-opc.h" 'https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob_plain;f=include/opcode/riscv-opc.h;hb=HEAD'
-
Create a "root filesystem" containing all required libraries and tools to link and run OMR. Hhere we build it into
~/riscv-debian/rootfs
, modify according your taste):cd ~ git clone https://github.com/janvrany/riscv-debian.git cd riscv-debian mkdir rootfs ./debian-mk-rootfs.sh
!!!BIG FAT WARNING!!!
Script ./debian-mk-rootfs.sh
uses sudo
a lot. IF THERE"S A BUG, IT MAY WIPE OUT YOUR SYSTEM. DO NOT RUN THIS SCRIPTS WITHOUT READING IT CAREFULLY FIRST.
-
Build latest QEMU for RISC-V. This is needed to run cross-compiled tests. Hhere we build it into
~/qemu
, modify according your taste):git clone https://git.qemu.org/git/qemu.git ./configure --target-list=riscv64-linux-user make -j4
Once build finishes, QEMU executable is at
./riscv64-linux-user/qemu-riscv64
Note: when running cross-compiled binaries, use this QEMU, not QEMU shipped with Debian is it hangs up (at the time of writing). The reason is unknown.
First, clone the repository:
git clone https://github.com/shingarov/omr -b riscv
cd omr
Then build native version of OMR. This is required to have native versions of various custom tools:
mkdir build_native
cd build_native
cmake ..
make -j4
Finally, cross-compile for RISC-V
mkdir build_riscv64
cd build_riscv64
cmake .. \
-Wdev -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DOMR_COMPILER=ON -DOMR_TEST_COMPILER=ON \
-DOMR_JITBUILDER=ON -DOMR_JITBUILDER_TEST=ON \
-DCMAKE_FIND_ROOT_PATH=/home/jv/Projects/riscv-debian/debian \
-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/riscv64-linux-cross.cmake \
-DOMR_TOOLS_IMPORTFILE=../build_native/tools/ImportTools.cmake
make -j4
Note: you should point -DCMAKE_FIND_ROOT_PATH=/home/jv/Projects/riscv-debian/rootfs
to the directory where you have Debian rootfs (see section Preparing the cross-compilation environment, step 3).
To see what tests are in minimal testsuite run:
cd fvtest/compilertest
~/qemu/riscv64-linux-user/qemu-riscv64 -L ~/riscv-debian/rootfs ./compilertest --gtest_list_tests --gtest_filter=MinimalTest*
The above command assumes that:
- you're in
build_riscv64
directory, - QEMU is at
~/qemu/riscv64-linux-user/qemu-riscv64
(see section Preparing the cross-compilation environment, step 4). - Debian root fs is at
/home/jv/Projects/riscv-debian/rootfs
(see section Preparing the cross-compilation environment, step 3).
To run specific test, say MeaningOfLife
:
~/qemu/riscv64-linux-user/qemu-riscv64 -L ~/riscv-debian/rootfs ./compilertest --gtest_filter=MinimalTest.MeaningOfLife
To run all tests in minimal test suite:
~/qemu/riscv64-linux-user/qemu-riscv64 -L ~/riscv-debian/rootfs ./compilertest --gtest_filter=MinimalTest.*
To run selected TRIL tests:
cd fvtest/compilertriltest
~/qemu/riscv64-linux-user/qemu-riscv64 -L ~/riscv-debian/rootfs ./comptest --gtest_filter=*Arithmetic*/Int32*:LogicalTest/Int32*Unary*