mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-01 14:21:16 +00:00
122 lines
5.1 KiB
Markdown
122 lines
5.1 KiB
Markdown
# Installing and Building with CMake
|
|
|
|
SixtyFPS comes with a CMake integration that automates the compilation step of the `.60` markup language files and
|
|
offers a CMake target for convenient linkage.
|
|
|
|
*Note*: We recommend using the Ninja generator of CMake for the most efficient build and `.60` dependency tracking.
|
|
You can select the CMake Ninja backend by passing `-GNinja` or setting the `CMAKE_GENERATOR` environment variable to `Ninja`.
|
|
|
|
## Building from Sources
|
|
|
|
The recommended and most flexible way to use the C++ API is to build SixtyFPS from sources.
|
|
|
|
First you need to install the prerequisites:
|
|
|
|
* Install Rust by following the [Rust Getting Started Guide](https://www.rust-lang.org/learn/get-started). Once this is done,
|
|
you should have the ```rustc``` compiler and the ```cargo``` build system installed in your path.
|
|
* **cmake** (3.16 or newer)
|
|
* A C++ compiler that supports C++17 (e.g., **MSVC 2019** on Windows)
|
|
|
|
You can include SixtyFPS in your CMake project using CMake's [`FetchContent`](https://cmake.org/cmake/help/latest/module/FetchContent.html) feature.
|
|
Insert the following snippet into your `CMakeLists.txt` to make CMake download the latest release, compile it and make the CMake integration available:
|
|
|
|
```cmake
|
|
include(FetchContent)
|
|
FetchContent_Declare(
|
|
SixtyFPS
|
|
GIT_REPOSITORY https://github.com/sixtyfpsui/sixtyfps.git
|
|
GIT_TAG v0.1.0
|
|
SOURCE_SUBDIR api/sixtyfps-cpp
|
|
)
|
|
FetchContent_MakeAvailable(SixtyFPS)
|
|
```
|
|
|
|
If you prefer to treat SixtyFPS as an external CMake package, then you can also build SixtyFPS from source like a regular
|
|
CMake project, install it into a prefix directory of your choice and use `find_package(SixtyFPS)` in your `CMakeLists.txt`.
|
|
|
|
### Cross-compiling
|
|
|
|
It is possible to cross-compile SixtyFPS to a different target architecture when building with CMake. In order to complete
|
|
that, you need to make sure that your CMake setup is ready for cross-compilation. You can find more information about
|
|
how to set this up in the [upstream CMake documentation](https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling).
|
|
If you are building against a Yocto SDK, it is sufficient to source the SDK's environment setup file.
|
|
|
|
Since SixtyFPS is implemented using the Rust programming language, you need to determine which Rust target
|
|
matches the target architecture that you're compiling to. Please consult the [upstream Rust documentation](https://doc.rust-lang.org/nightly/rustc/platform-support.html) to find the correct target name. Now you need to install the Rust toolchain:
|
|
|
|
```sh
|
|
rustup target add <target-name>
|
|
```
|
|
|
|
Then you're ready to invoke CMake and you need to add `-DRust_CARGO_TARGET=<target name>` to the CMake command line.
|
|
This ensures that the SixtyFPS library is built for the correct architecture.
|
|
|
|
For example if you are building against an embedded Linux Yocto SDK targeting an ARM64 board, the following commands
|
|
show how to compile:
|
|
|
|
Install the Rust targe toolchain once:
|
|
|
|
<!-- cSpell:disable -->
|
|
```sh
|
|
rustup target add aarch64-unknown-linux-gnu
|
|
```
|
|
<!-- cSpell:enable -->
|
|
|
|
Set up the environment and build:
|
|
|
|
<!-- cSpell:disable -->
|
|
```sh
|
|
. /path/to/yocto/sdk/environment-setup-cortexa53-crypto-poky-linux
|
|
cd sixtyfps
|
|
mkdir build
|
|
cd build
|
|
cmake -DRust_CARGO_TARGET=aarch64-unknown-linux-gnu -DCMAKE_INSTALL_PREFIX=/sixtyfps/install/path ..
|
|
cmake --build .
|
|
cmake --install .
|
|
```
|
|
<!-- cSpell:enable -->
|
|
|
|
## Binary Packages
|
|
|
|
The SixtyFPS continuous integration system is building binary packages to use with C++ so that you do not need to install a rust compiler.
|
|
These binaries can be found by clicking on the last
|
|
[successful build of the master branch](https://github.com/sixtyfpsui/sixtyfps/actions?query=workflow%3ACI+is%3Asuccess+branch%3Amaster)
|
|
and downloading the `cpp_bin` artifact.
|
|
|
|
After extracting the artifact you can place the `lib` directory into your `CMAKE_PREFIX_PATH` and `find_package(SixtyFPS)` should succeed
|
|
in locating the package.
|
|
|
|
|
|
## Usage
|
|
|
|
Once SixtyFPS is built, you can use it in your CMake application or library target in two steps:
|
|
|
|
1. Associate the `.60` files that you'd like to use by calling the `sixtyfps_target_60_sources` cmake command. The first parameter is
|
|
your application (or library) CMake target, and the parameters following are the names of the `.60` files. This will result in the
|
|
`.60` files to be compiled into C++ source code.
|
|
2. The generated C++ source code also needs the SixtyFPS run-time library. This dependency is satisfied by linking `SixtyFPS::SixtyFPS`
|
|
into your target with the `target_link_libraries` command.
|
|
|
|
A typical example looks like this:
|
|
|
|
```cmake
|
|
cmake_minimum_required(VERSION 3.16)
|
|
project(my_application LANGUAGES CXX)
|
|
|
|
# Note: Use find_package(SixtyFPS) instead of the following three commands, if you prefer the package
|
|
# approach.
|
|
include(FetchContent)
|
|
FetchContent_Declare(
|
|
SixtyFPS
|
|
GIT_REPOSITORY https://github.com/sixtyfpsui/sixtyfps.git
|
|
GIT_TAG v0.1.0
|
|
SOURCE_SUBDIR api/sixtyfps-cpp
|
|
)
|
|
FetchContent_MakeAvailable(SixtyFPS)
|
|
|
|
add_executable(my_application main.cpp)
|
|
sixtyfps_target_60_sources(my_application my_application_ui.60)
|
|
target_link_libraries(my_application PRIVATE SixtyFPS::SixtyFPS)
|
|
```
|
|
|
|
|