[Buildroot] [PATCH v2 2/3] package/waffle: new package
Romain Naour
romain.naour at smile.fr
Mon Sep 17 19:59:46 UTC 2018
Hi Thomas,
Le 16/09/2018 à 23:30, Thomas Petazzoni a écrit :
> Hello Romain,
>
> On Sun, 11 Feb 2018 17:21:35 +0100, Romain Naour wrote:
>> Backport an upstream patch fixing a build issue with musl toolchains.
>> Add a new patch fixing build with Wayand without X11.
>>
>> Signed-off-by: Romain Naour <romain.naour at gmail.com>
>
> I finally took some time to look at this package again, and I think the
> dependencies are not correctly handled.
Thank you :)
>
>> +config BR2_PACKAGE_WAFFLE
>> + bool "waffle"
>> + depends on BR2_PACKAGE_XORG7 || BR2_PACKAGE_WAYLAND
>
> Due to this dependency, you cannot do a build which has just mesa3d as
> a gbm/egl provider + udev, which is a valid configuration supported by
> waffle.
>
> I.e, the following defconfig builds waffle properly:
>
> BR2_arm=y
> BR2_cortex_a8=y
> BR2_TOOLCHAIN_EXTERNAL=y
> BR2_INIT_NONE=y
> BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
> BR2_SYSTEM_BIN_SH_NONE=y
> # BR2_PACKAGE_BUSYBOX is not set
> BR2_PACKAGE_MESA3D=y
> BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST=y
> BR2_PACKAGE_MESA3D_OPENGL_EGL=y
> BR2_PACKAGE_WAFFLE=y
> # BR2_TARGET_ROOTFS_TAR is not set
>
>> + depends on BR2_PACKAGE_HAS_LIBGL || BR2_PACKAGE_HAS_LIBEGL
>> + # OpenGL ES (1,2,3) libraries are loaded at runtime when needed
>> + # in addition to LIBGL or LIBEGL.
>> + depends on BR2_PACKAGE_HAS_LIBGLES
>
> This dependency means that you cannot build waffle at all if there's no
> GLES support. Therefore a desktop configuration that provides GL will
> not allow building waffle. That's not good.
>
> Looking more closely into the Waffle build system, it has four
> "backends", each having their own dependencies. At least one "backend"
> must be enabled, otherwise Waffle will refuse to build. The "backends"
> are:
>
> - glx, which needs full OpenGL + x11-xcb
> - wayland, which needs wayland-client, wayland-egl and EGL
> - x11-egl, which needs x11-xcb and EGL
> - gbm, which needs gbm, libudev and EGL
>
> So the easiest is perhaps to map this to hidden Config.in options,
> maybe something like:
>
> config BR2_PACKAGE_WAFFLE_SUPPORTS_GLX
> bool
> default y if BR2_PACKAGE_HAS_LIBGL && BR2_PACKAGE_XORG7
>
> config BR2_PACKAGE_WAFFLE_SUPPORTS_WAYLAND
> bool
> default y if BR2_PACKAGE_WAYLAND && BR2_PACKAGE_HAS_LIBEGL_WAYLAND
>
> config BR2_PACKAGE_WAFFLE_SUPPORTS_X11_EGL
> bool
> default y if BR2_PACKAGE_HAS_LIBEGL && BR2_PACKAGE_XORG7
>
> config BR2_PACKAGE_WAFFLE_SUPPORTS_GBM
> bool
> # mesa3d is for now the only GBM provider, and it is enabled
> # together with its EGL support
> default y if BR2_PACKAGE_HAS_LIBEGL && BR2_PACKAGE_MESA3D_OPENGL_EGL && BR2_PACKAGE_HAS_UDEV
I believe this comment will be not correct as soon as the libgbm virtual package
will be merged.
>
> config BR2_PACKAGE_WAFFLE
> bool "waffle"
> depends on BR2_PACKAGE_WAFFLE_SUPPORTS_GLX || \
> BR2_PACKAGE_WAFFLE_SUPPORTS_WAYLAND || \
> BR2_PACKAGE_WAFFLE_SUPPORTS_X11_EGL || \
> BR2_PACKAGE_WAFFLE_SUPPORTS_GBM
> select BR2_PACKAGE_XLIB_LIBX11 if BR2_PACKAGE_WAFFLE_SUPPORTS_GLX || BR2_PACKAGE_WAFFLE_SUPPORTS_X11_EGL
> select BR2_PACKAGE_LIBXCB if BR2_PACKAGE_WAFFLE_SUPPORTS_GLX || BR2_PACKAGE_WAFFLE_SUPPORTS_X11_EGL
>
> I don't think we need a Config.in comment to document those
> dependencies. They are anyway waaaay too complicated to be summarized
> in a Config.in comment.
agree
>
>> diff --git a/package/waffle/waffle.hash b/package/waffle/waffle.hash
>> new file mode 100644
>> index 0000000000..5dfb976f2f
>> --- /dev/null
>> +++ b/package/waffle/waffle.hash
>> @@ -0,0 +1,3 @@
>> +# Locally calculated
>> +sha256 d662f6743f688dc5ea4b7d29f558eb54bd8f57350080f04a006693d22e5d1d5b waffle-v1.5.2.tar.gz
>> +sha256 630844d1911c8a1b7b888a1de9097c4860b7e381362fd5aa64141d58ab7ecc9b LICENSE.txt
>> diff --git a/package/waffle/waffle.mk b/package/waffle/waffle.mk
>> new file mode 100644
>> index 0000000000..741bc8e349
>> --- /dev/null
>> +++ b/package/waffle/waffle.mk
>> @@ -0,0 +1,48 @@
>> +################################################################################
>> +#
>> +# waffle
>> +#
>> +################################################################################
>> +
>> +WAFFLE_VERSION = v1.5.2
>> +WAFFLE_SITE = $(call github,waffle-gl,waffle,$(WAFFLE_VERSION))
>> +WAFFLE_INSTALL_STAGING = YES
>> +WAFFLE_LICENSE = BSD-2-Clause
>> +WAFFLE_LICENSE_FILES = LICENSE.txt
>> +
>> +WAFFLE_DEPENDENCIES = host-pkgconf
>> +
>> +WAFFLE_CONF_OPTS = -Dwaffle_build_tests=OFF \
>> + -Dwaffle_build_examples=OFF \
>> + -Dwaffle_build_manpages=OFF \
>> + -Dwaffle_build_htmldocs=OFF
>> +
>> +ifeq ($(BR2_PACKAGE_WAYLAND)$(BR2_PACKAGE_HAS_LIBEGL_WAYLAND),yy)
>
> You can replace this condition with BR2_PACKAGE_WAFFLE_SUPPORTS_WAYLAND.
>
>> +WAFFLE_DEPENDENCIES += libegl wayland
>> +WAFFLE_CONF_OPTS += -Dwaffle_has_wayland=ON
>> +else
>> +WAFFLE_CONF_OPTS += -Dwaffle_has_wayland=OFF
>> +endif
>> +
>> +ifeq ($(BR2_PACKAGE_XLIB_LIBX11)$(BR2_PACKAGE_LIBXCB)$(BR2_PACKAGE_HAS_LIBEGL),yyy)
>
> This one by BR2_PACKAGE_WAFFLE_SUPPORTS_X11_EGL
>
>> +WAFFLE_DEPENDENCIES += libegl libxcb xlib_libX11
>> +WAFFLE_CONF_OPTS += -Dwaffle_has_x11_egl=ON
>> +else
>> +WAFFLE_CONF_OPTS += -Dwaffle_has_x11_egl=OFF
>> +endif
>> +
>> +ifeq ($(BR2_PACKAGE_XLIB_LIBX11)$(BR2_PACKAGE_LIBXCB)$(BR2_PACKAGE_HAS_LIBGL),yyy)
>
> This one by BR2_PACKAGE_WAFFLE_SUPPORTS_GLX
>
>> +WAFFLE_DEPENDENCIES += libgl libxcb xlib_libX11
>> +WAFFLE_CONF_OPTS += -Dwaffle_has_glx=ON
>> +else
>> +WAFFLE_CONF_OPTS += -Dwaffle_has_glx=OFF
>> +endif
>> +
>> +ifeq ($(BR2_PACKAGE_MESA3D_OPENGL_EGL)$(BR2_PACKAGE_HAS_UDEV),yy)
>
> And this one by BR2_PACKAGE_WAFFLE_SUPPORTS_GBM
>
>> +WAFFLE_DEPENDENCIES += libegl mesa3d udev
>
> I would say adding mesa3d here in the dependencies is a bit useless,
> because libegl is provided by mesa3d anyway when
> BR2_PACKAGE_MESA3D_OPENGL_EGL.
>
> You had a "depends on BR2_PACKAGE_HAS_LIBGLES" because waffle can use
> OpenGLES. But it seems like a runtime dependency, not a build time
> dependency. Could you check this ?
Sure, I'll respin these patches asap.
Best regards,
Romain
>
> Best regards,
>
> Thomas
>
More information about the buildroot
mailing list