This project was created to build the Embedded Linux (eLinux) embedding for Flutter and Flutter Engine for Yocto Project based distributions.
See CONTRIBUTING.md.
In this README, we explain how to build for Arm64 using core-image-weston
which is one of Yocto Images, and kirkstone
which is one of LTS Yocto versions. See also: https://docs.yoctoproject.org/
$ sudo apt install chrpath diffstat gawk lz4
There are two ways to build using Yocto. One is builds using bitbake and the other is builds using Yocto SDK.
Downloading Poky
, meta-clang
, and meta-flutter
:
$ git clone git://git.yoctoproject.org/poky.git -b kirkstone
$ git clone https://github.com/kraj/meta-clang -b kirkstone
$ git clone https://github.com/sony/meta-flutter.git
Setup the build environment using oe-init-build-env
script in Poky:
$ source poky/oe-init-build-env build
Set the target machine in conf/local.conf
:
MACHINE ?= "qemuarm64"
Add meta-clang
layer to conf/bblayers.conf
:
$ bitbake-layers add-layer ../meta-clang
Add meta-flutter
layer to conf/bblayers.conf
:
$ bitbake-layers add-layer ../meta-flutter
Add the following in your conf/local.conf
:
CLANGSDK = "1"
See also: Adding clang in generated SDK toolchain
Build Yocto SDK for cross-building:
$ bitbake core-image-weston -c populate_sdk
See also: SDK building an sdk installer
Install Yocto SDK:
$ ./tmp/deploy/sdk/poky-glibc-x86_64-core-image-weston-aarch64-qemuarm64-toolchain-3.1.7.sh
The default build targets are fixed to Linux, Arm64, and the following Flutter Engine version in the config file.
ENGINE_VERSION ?= "36335019a8eab588c3c2ea783c618d90505be233"
When creating a Flutter project, you will need to use the following version of the Flutter SDK.
Engine version | Flutter SDK version |
---|---|
36335019a8eab588c3c2ea783c618d90505be233 | 3.24.3 (stable channel) |
If you want to change the version of the Flutter engine, change conf/local.conf
:
ENGINE_VERSION_pn-flutter-engine = "<engine_version>"
Flutter Engine is built with release mode by default. If you want to change the build mode, you can change it to add the following in your conf/local.conf
:
# e.g. debug mode
PACKAGECONFIG_pn-flutter-engine = "debug-mode"
$ bitbake flutter-wayland-client
libsystemd
is required to build this backend. Put the following in your conf/local.conf
:
DISTRO_FEATURES:append = " systemd"
See also: Using systemd for the Main Image and Using SysVinit for the Rescue Image
$ bitbake flutter-drm-gbm-backend
You need to install libsystemd in the same way with the DRM-GBM backend.
$ bitbake flutter-drm-eglstream-backend
Setup the cross-building toolchain environment using a script that you built and installed:
$ source /opt/poky/3.1.7/environment-setup-aarch64-poky-linux
Set the following environment vars to cross-build using clang:
$ export CC=${CLANGCC}
$ export CXX=${CLANGCXX}
After doing that, you can build the embedder as normal like self-building on hosts. It means you don't need to be aware of cross-building. See: self-build