Awesome
meta-flutter for Yocto Project
This project was created to build the Embedded Linux (eLinux) embedding for Flutter and Flutter Engine for Yocto Project based distributions.
Repositories
- flutter-elinux: Flutter tools for eLinux
- flutter-elinux-plugins: Flutter plugins for eLinux
- flutter-embedded-linux: eLinux embedding for Flutter
Contributing
See CONTRIBUTING.md.
Setup
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/
Install requred tools
$ sudo apt install chrpath diffstat gawk lz4
Setup Yocto
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
Build Yocto SDK (Only when using cross-building with Yocto SDK)
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
Build using bitbake
Flutter Engine (libflutter_engine.so)
The default build targets are fixed to Linux, Arm64, and the following Flutter Engine version in the config file.
ENGINE_VERSION ?= "a18df97ca57a249df5d8d68cd0820600223ce262"
When creating a Flutter project, you will need to use the following version of the Flutter SDK.
Engine version | Flutter SDK version |
---|---|
a18df97ca57a249df5d8d68cd0820600223ce262 | 3.24.5 (stable channel) |
If you want to change the version of the Flutter engine, change <engine_version> to the appropriate version of the Flutter SDK and add the following to conf/local.conf
:
ENGINE_VERSION_pn-flutter-engine = "<engine_version>"
Flutter Engine mode
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"
Wayland backend
$ bitbake flutter-wayland-client
DRM-GBM backend
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
DRM-EGLStream backend
You need to install libsystemd in the same way with the DRM-GBM backend.
$ bitbake flutter-drm-eglstream-backend
Build using Yocto SDK
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