Home

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

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 versionFlutter SDK version
a18df97ca57a249df5d8d68cd0820600223ce2623.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