Skip to content

Latest commit

 

History

History
140 lines (90 loc) · 4.12 KB

building.md

File metadata and controls

140 lines (90 loc) · 4.12 KB

Slint build guide

This page explains how to build and test Slint.

Prerequisites

Installing Rust

Install Rust by following the Rust Getting Started Guide. If you already have Rust installed, make sure that it's at least version 1.56 or newer. You can check which version you have installed by running rustc --version.

Once this is done, you should have the rustc compiler and the cargo build system installed in your path.

Linux

For Linux a few additional packages beyond the usual build essentials are needed for development and running apps:

  • xcb (libxcb-shape0-dev libxcb-xfixes0-dev on debian based distributions)
  • xkbcommon (libxkbcommon-dev on debian based distributions)
  • fontconfig library (libfontconfig-dev on debian based distributions)

macOS

  • Make sure the "Xcode Command Line Tools" are installed: xcode-select --install

For the NodeJS backend

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 slint-node. But cargo test will fail.

For the C++ dev (optional)

  • cmake (3.19 or newer)
  • A C++ compiler that can do C++20 (e.g., MSVC 2019 16.6 on Windows)

Testing

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

C++ test

The C++ crate are not included in the workspace's default members, so it need to be build explicitly

cargo build --lib -p slint-cpp
cargo test --bin test-driver-cpp

More info about tests

See testing.md

C++ Build

This is just a normal cmake build.

mkdir cppbuild && cd cppbuild
cmake -GNinja ..
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

Cross-Compiling

Slint can be cross-compiled to different target architectures 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 slint-node --release
scp target/armv7-unknown-linux-gnueabihf/release/printerdemo pi@raspberrypi.local:.

Finally on a shell on the Pi:

DISPLAY=:0 ./printerdemo

Examples

See the examples folder for examples to build, run and test.

Running the viewer

Slint also includes a viewer tool that can load .slintfiles dynamically at run-time. It is a cargo-integrated binary and can be run directly on the .slintfiles, for example:

cargo run --release --bin slint-viewer -- examples/printerdemo/ui/printerdemo.slint

Generating the documentation

rustdoc

The language reference has snippets in the .slint 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 .slint files.

RUSTDOCFLAGS="--html-in-header=$PWD/docs/resources/slint-docs-preview.html --html-in-header=$PWD/docs/resources/slint-docs-highlight.html" cargo doc --no-deps

C++ doc

To generate the C++ API documentation, one need to have doxygen installed, and run this command

cargo xtask cppdocs