OpenEmbedded/Yocto Project layer for Erlang, Elixir and Gleam support
May 15, 2026 · View on GitHub
|
This layer provides support for the following BEAM languages:
For use with OpenEmbedded and/or the Yocto Project build system.
Documentation
See meta-erlang documentation.
Yocto Project Compatible Layer
This layer is officially approved as part of the Yocto Project Compatible Layers Program. You can find details of that on the official Yocto Project
website.
Dependencies
This layer depends on:
URI: git://git.openembedded.org/bitbake branch: master
URI: git://github.com/openembedded/oe-core.git branch: master revision: HEAD
URI: git://git.openembedded.org/openembedded-core layers: meta branch: master
For erlang odbc:
URI: https://github.com/openembedded/meta-openembedded.git layers: meta-oe branch: master
For erlang lksctp run-time support:
URI: https://github.com/openembedded/meta-openembedded.git layers: meta-networking branch: master
Usage instructions
Use the bitbake-layers add-layer command to add the meta-erlang to the configuration file:
cd ~/poky/build
bitbake-layers add-layer ../meta-erlang
Then run:
bitbake erlang-embedded-image-minimal
That will create an image with embedded erlang.
Or add IMAGE_INSTALL_append = " erlang" in conf/local.conf file and run
bitbake core-image-minimal to get an image with erlang support.
Also, there are a set of recipe examples demonstrating how to integrate Erlang/Elixir projects into YP/OE. The examples tried to cover some common use cases when dealing with cross compiled applications.
Simple setup suggestion: (RECOMMENDED and tested to work with Yocto 6.0)
Add this in you myapp-elixir_1.0.bb:
DEPENDS = "erlang elixir"
RDEPENDS:${PN} += "erlang elixir"
Add this to your mydistro.conf or local.conf:
ERLANG_VERSION = "29.0"
ELIXIR_VERSION = "1.19.5"
BBMASK:append = " ${@'/erlang_(?!' + d.getVar('ERLANG_VERSION').replace('.', '\.') + ')[^/]*\.bb$'}"
BBMASK:append = " ${@'/elixir_(?!' + d.getVar('ELIXIR_VERSION').replace('.', '\.') + ')[^/]*\.bb$'}"
PREFERRED_VERSION variables are populated automatically from ERLANG_VERSION and ELIXIR_VERSION
Elixir requires UTF8 and not latin1 locale, after fixing it, then you will need to remove a QA error
INSANE_SKIP:append:pn-elixir = " buildpaths"
INSANE_SKIP:append:pn-elixir-eex = " buildpaths"
for version 29.0 you will need this: your-layer/recipes-devtools/erlang/erlang_%.bbappend
do_install:append() {
rm -rf ${D}${libdir}/erlang/lib/odbc-*
}
In case of patch fuzziness, one can regenerate them:
devtool modify erlang
devtool finish --force-patch-refresh erlang \
/home/user/Documents/yocto/bitbake-builds/mydistro-wrynose/layers/openembedded-core/meta-erlang
Supported versions
meta-erlang tries to support a well balanced range of Erlang, Elixir and Yocto Project versions. The purpose is to provide up-to-date recipes following the latest fixes found in Erlang and Elixir projects as well keeping the old recipes to not break compatibility.
Please, before building Erlang/Elixir applications, check out the PREFERRED_VERSION for each application on the meta-erlang application documentation.
As meta-erlang provides multiple versions for the same recipes, pay attention to configure the variable PREFERRED_VERSION in one of the configuration file like local.conf, site.conf, auto.conf or distro/include files. Like this:
PREFERRED_VERSION_erlang = "27.0"
PREFERRED_VERSION_erlang-native = "27.0"
PREFERRED_VERSION_elixir = "1.16.3"
PREFERRED_VERSION_elixir-native = "1.16.3"
PREFERRED_VERSION_gleam-native = "1.5.1"
However if you have any specific requirements for a special recipe version, you can always add it in your application/middleware layer.
Following the OTP Versions Tree, Elixir Compatibility and Deprecations and Yocto Project releases meta-erlang supports the below versions:
Erlang:
Elixir:
Gleam:
Yocto:
meta-erlang provides specific branches for each YP/OE release. So, please stick with one of the supported branches to avoid compatible problems:
- walnascar
- styhead
- scarthgap
- nanbield
- mickledore
- langdale
- kirkstone
- honister
- hardknott
- gatesgarth
- dunfell
- zeus
- warrior
Even though supporting a range of versions, users are recommended to checkout specific meta-erlang branch in order to find out the correct combination between Erlang/OTP versions. Due to how Erlang/OTP and YP/OE are made, it is not possible always to keep some versions without backporting or fixing cross compilation issues.
Other Information
This layer can provide the entire Erlang installation, from the base runtime (erlang) to a full erlang development environment with all of the bells and whistles (erlang-modules).
A list of all the packages provided can be found in the manifest file, at recipes-devtools/erlang/erlang-${PV}-manifest.inc. This file needs to be re-generated and new SRCREVs need to be added whenever the version hanges.
Contributing
You can send patches using the GitHub pull request process.
Maintainers
- João Henrique Ferreira de Freitas
<joaohf@gmail.com>