This project was created to build the Embedded Linux (eLinux) embedding for Flutter and Flutter Engine for Yocto Project based distributions.
- flutter-elinux: Flutter tools for eLinux
- flutter-elinux-plugins: Flutter plugins for eLinux
- flutter-embedded-linux: eLinux embedding for Flutter
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 ?= "cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d"
When creating a Flutter project, you will need to use the following version of the Flutter SDK.
Engine version | Flutter SDK version |
---|---|
cb4b5fff73850b2e42bd4de7cb9a4310a78ac40d | 3.27.1 (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 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