This page explain how to build and test SixtyFPS.
Install Rust by following the Rust Getting Started Guide.
Once this is done, you should have the rustc
compiler and the cargo
build system installed in your path.
For the nodejs backend, the following component are needed:
- node (including npm)
- python
It would be nice if building the nodejs backend was optional, but right now it is part of the workspace.
You can still not build it by doing cargo build --workspace --exclude sixtyfps-node
. But cargo test will fail.
- cmake (3.16 or newer)
- A C++ compiler that can do C++17 (e.g., MSVC 2019 on Windows)
Most of the project is written in Rust, and compiling and running the test can done with cargo.
cargo build
cargo test
Important: Note that cargo test
does not work without first calling cargo build
because the
C++ tests or the nodejs tests will not find the required dynamic library otherwise
This is just a normal cmake build.
mkdir cppbuild && cd cppbuild
cmake ..
cmake --build .
The build will call cargo to build the rust libraries, and build the examples. In order to install the libraries and everything you need, use:
cmake --install .
You can pass -DCMAKE_INSTALL_PREFIX
in the first cmake command in order to choose the install location
SixtyFPS can be cross-compiled to different target architecures and environments. For the Rust build we
have had a good experience using cross
. For convenience we're
including a Cross.toml
configuration file for cross
in the source tree along with Docker containers that
allow targeting a Debian ARMv7 and ARMv8 based Distribution with X11 or Wayland, out of the box.
This includes for example the Raspberry Pi OS. Using the following steps you can run the examples on a pi:
cross build --target armv7-unknown-linux-gnueabihf --workspace --exclude sixtyfps-node --release
scp target/armv7-unknown-linux-gnueabihf/release/printerdemo [email protected]:.
Finally on a shell on the Pi:
DISPLAY=:0 ./printerdemo
See the examples folder for examples to build, run and test.
SixtyFPS also includes a viewer tool that can load .60
files dynamically at run-time. It is a
cargo-integrated binary and can be run directly on the .60
files, for example:
cargo run --release --bin viewer -- examples/printerdemo/ui/printerdemo.60
With nightly rust, the documentation of the sixtyfps-rs embed the language reference using the
external_doc
feature.
That language reference has snippets in the .60 language which can be previewed by injecting
html to the documentation with the --html-in-header
rustdoc flag.
Here is how to build the documentation to include preview of the .60 files.
RUSTDOCFLAGS="--html-in-header=api/sixtyfps-rs/sixtyfps-docs-integration.html" cargo +nightly doc --no-deps
To generate the C++ API documentation, one need to have doxygen installed, and run this command
cargo xtask cppdocs