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.gitSetup the build environment using oe-init-build-env script in Poky:
$ source poky/oe-init-build-env buildSet the target machine in conf/local.conf:
MACHINE ?= "qemuarm64"
Add meta-clang layer to conf/bblayers.conf:
$ bitbake-layers add-layer ../meta-clangAdd meta-flutter layer to conf/bblayers.conf:
$ bitbake-layers add-layer ../meta-flutterAdd 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_sdkSee 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.shThe 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-clientlibsystemd 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-backendYou need to install libsystemd in the same way with the DRM-GBM backend.
$ bitbake flutter-drm-eglstream-backendSetup the cross-building toolchain environment using a script that you built and installed:
$ source /opt/poky/3.1.7/environment-setup-aarch64-poky-linuxSet 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