Building Pydrofoil from source

On this page we’ll describe how to build or download a Pydrofoil binary.

Requirements

Pydrofoil has been extensively tested on Ubuntu Linux on x86-64 host systems. It should also work on WSL and on macOS (with x86-64 and ARM CPUs).

To build Pydrofoil, you need the following software installed (if you are working on the Sail model you likely have all of these already):

  • a working C-compiler (gcc or clang) installed

  • GNU Make

  • git

  • opam

  • python3

  • libffi and its development headers (package libffi-dev on Ubuntu)

  • Sail (see next section).

On Ubuntu, you are able to install all of these with apt with the following command:

sudo apt install build-essential git opam python3 libffi-dev

All the other Pydrofoil build requirements are downloaded automatically by the build scripts/Makefile.

Installing Sail

Pydrofoil needs a very recent unreleased version of Sail. Therefore the build scripts will install it automatically in a local subdirectory. This will not interfere with any existing sail installation you might have.

Building Pydrofoil Starting from a Sail-riscv checkout

To build Pydrofoil, you first need to clone the Sail-RISC-V model repository. If you already have a checkout, you can use that instead.

git clone https://github.com/riscv/sail-riscv.git # or use your existing checkout
cd sail-riscv

Afterwards, there is a script that you can use to download all the requirements for building Pydrofoil and then start the build process. It works like this:

wget https://raw.githubusercontent.com/pydrofoil/pydrofoil/one-stop-build-script/build-pydrofoil-from-sail.sh
chmod a+x build-pydrofoil-from-sail.sh
./build-pydrofoil-from-sail.sh

This will

  • clone the pydrofoil repo from github

  • build a local switch with a recent enough sail binary, as well as isla-sail

  • use isla-sail to translate the ISA specifications into JIB files (about 5 minutes)

  • download and use a pypy2.7 to translate the RPython-based pydrofoil source code into an executable (about 20 minutes)

  • copy the executable into the sail-riscv directory

You can test that it worked like this:

./pydrofoil-riscv test/riscv-tests/rv64ui-p-beq.elf

Which should print:

tohost located at 0x80001000
entrypoint 0x80000000
CSR mstatus <- 0x0000000A00000000 (input: 0x0000000000000000)
SUCCESS
Instructions: 305
Total time (s): 0.000361
Perf: 844.397835 Kips

See here for more instructions on how to use Pydrofoil, including how to boot Linux.

If you are interested in working on Pydrofoil itself, please read the instructions on the page Developing Pydrofoil.