API/ABI changes review for EFL
Enlightenment Founation Library (EFL) is a collection of libraries for handling many common tasks a developer may have such as data structures, communication, rendering, widgets and more.
There are many components inside EFL. They also build various things like shared libraries, loadable plug-in modules and also binary executables. Different elements will end up being licensed differently too.
All library source is in the src/lib/
directory. All binaries are in
src/bin/
. All loadable modules are in src/modules/
. All data files are
in the data/
directory. Licensing details are listed in COPYING
and
the licenses/
directory.
Attention: EFL is under active development. Feel free to report bugs here or to the official repo, instabilities or feature wishes.
For more documentation please see: www.enlightenment.org/doc
EFL is primarily developed on Linux (GNU/Linux) and should work on most distributions as long as dependencies are provided. It has been compiled and run also on Windows (using MSYS2 + mingw-w64) - please see windows docs, Mac OS X, FreeBSD and NetBSD.
Platform | Downloads (stable) | Downloads (preview) | How to Install |
---|---|---|---|
Source | 64-bit | 64-bit | |
Ubuntu | Instructions | ||
ArchLinux | Instructions | ||
Debian | Instructions | ||
Fedora | Instructions | ||
FreeBSD | Instructions | ||
OpenBSD | Instructions | ||
OpenSUSE | Instructions | ||
Yokto | Instructions | ||
MacOS | Instructions | ||
Windows | Instructions |
EFL requires a C and C++ compiler by default (C++ exists mostly to interface to C++ libraries like Bullet and our C++ bindings). Find detailed list in requirements wiki page.
You may also want wayland support when on Linux. This enables support for EFL to target wayland support for client applications. To do this supply:
-Dwl=true
For more modern framebuffer support you may want drm/kms rendering support so enable this. This is what you also want for wayland compositor support in enlightenment as it will want to be able to render to a modern framebuffer target with atomic buffer swapping. To do this provide:
-Ddrm=true
Legacy fbcon support also exists, but you probably no longer want to use this as it is not maintained anymore. This supports basic frame-buffers like /dev/fb as well as input via /dev/input for keyboards and mice in a basic way. Enable this with:
-Dfb=true
You may want to change the install prefix for EFL with:
--prefix=/path/to/prefix
The default prefix if not given is "/usr/local". Many people like to use prefixes like /opt/e or /opt/efl or /home/USERNAME/software etc.
You can affect compilation optimization, debugging and other factors
by setting your CFLAGS
environment variable (and CXXFLAGS
). Be aware
that to ensure ABI stability you should use the exact same CFLAGS
/
CXXFLAGS
for all the build of EFL and any applications/libraries that
depend on them.
There are many other configure options that can be used, but in general it is not a good idea to go enabling or disabling things unless you wish to break things. The defaults are well tested, with the above recommended options also being well tested. Go much further and your mileage may vary wildly. Disabling features is a good way of breaking EFL functionality, so it is not recommended to mess with these without understanding the implications. The defaults have been carefully considered to provide full functionality so users will not be missing anything.
Meson is the build system used for this project. For more information please see mesonbuild.com
You will need normal build tooling installed such as a compiler (gcc or clang for example), pkg-config, ninja, any relevant package-dev or package-devel packages if your distribution splits out development headers (e.g. libc6-dev) etc.
Depending on where dependencies, you might have to set your
PKG_CONFIG_PATH
environment variable like:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig
Also note that some distributions like to add extra arch directories to your library locations so you might have to have more like:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig
You will need to ensure that the destination library directory (e.g.
/usr/local/lib
is in your /etc/ld.so.conf or /etc/ld.so.conf.d/
files and after installing anything that installs libraries you
re-run ldconfig
. Please see relevant documentation on ldconfig and
ld.so.conf for your distribution.
You might also want to add the destination bin dir to your environment variable PATH (see documentation on your shell PATH variable) such as:
export PATH=/usr/local/bin:/usr/bin:/bin
Normal compilation in /usr/local:
meson . build
ninja -C build
sudo ninja -C build install
For meson build generic options:
meson --help
For a list of project specific options supported:
cat meson_options.txt
To set 1 or more project specific options:
meson --prefix=/path/to -Doption=value [-Dother=value2] [...] . build
To display current configuration:
meson configure build
The above will only work after at least the following is done:
meson . build
How to clean out the build and config and start fresh:
rm -rf build
How to make a dist tarball and check its build: (must do it from git tree clone and commit all changes to git first)
ninja -C build dist
How to change prefix:
meson --prefix=/path/to/prefix . build
How to install in a specific destination directory for packaging:
DESTDIR=/path/to/destdir ninja -C build install
How to build with verbose output (full commands run):
ninja -C build -v
NOTE: Nvidia OpenGL-ES/EGL seems to have bugs and performance issues. All other drivers work just fine except Nvidia with OpenGL-ES/EGL. Users have reported stuttering and graphical glitches and sometimes windows not updating. If you want the best results and are stuck on Nvidia and unable to change that, then:
- Make sure you do not enable Wayland i.e. Meson option
-Dwl=false
(this is default anyway if not provided) - Make sure you do not enable DRM i.e. Meson option
-Ddrm=false
(this is default anyway if not provided) - Make sure OpenGL is full i.e. Meson option
-Dopengl=full
GitHub Discussions is a feature to enable fluid and open discussions within the community for topics that are not related to code, unlike issues.
This is an experiment we are trying in our repositories to see if it helps move discussions out of issues so that issues remain actionable by the team or members of the community. There should be no expectation that EFL development team members are regular participants in the discussions. Individual EFL development team members may choose to participate in discussions, but the expectation is that community members help drive discussions so that team members can focus on issues.
Create or join a discussion.