Developing Pydrofoil#

This page collects instructions on how various things work when you want to work on Pydrofoil itself.

To get started, you should clone the Pydrofoil repository:

git clone

Building Pydrofoil emulator binary#

To build the Pydrofoil emulator binary you can run:

make pydrofoil-riscv

And for the rest of the story:

Pydrofoil uses three inputs:

  • A SAIL IR file that describes the RISC-V architecture, automatically generated from the Sail model of RISC-V.

  • A checkout of the Pydrofoil repo, which contains source code in RPython to build an emulator around the IR file.

  • A RPython tool chain that will compile the emulator code and produce an executable.

If you modify the RISC-V description file, you must rebuild the emulator executable.

There is a Makefile in the root of the repo that will rebuild the emulator:

  • Get a PyPy2.7 binary in order to run the RPython code

  • Get the RPython toolchain from, which is a git mirror of the upstream mercurial PyPy repo.

  • Build the emulator

This is done via make pydrofoil-riscv. At the moment the Makefile and the build scripts only supports x86-64 Linux and WSL, but it should be possible to get this to work on any platform supported by PyPy.

Running unit tests#

Pydrofoil has a number of unit tests to check the correct behaviour of its bitvector implementation and the rest of its support code. Those can be run with:

make pydrofoil-test