* [Buildroot] [PATCH v5 0/1] package/ivi-homescreen: new package
@ 2024-01-03 2:06 Adam Duskett
2024-01-03 2:06 ` [Buildroot] [PATCH v5 1/1] " Adam Duskett
0 siblings, 1 reply; 4+ messages in thread
From: Adam Duskett @ 2024-01-03 2:06 UTC (permalink / raw)
To: buildroot; +Cc: Adam Duskett
Included is v5 of the ivi-homescreen patches.
Changes include:
- Drop support for the file selector plugin. Amarula doesn't need it and I
wasn't asked to port the Zenity package. The file-selector plugin is
hardcoded to off.
- Add a more comprehensive commit log as to how I tested this package.
Adam Duskett (1):
package/ivi-homescreen: new package
DEVELOPERS | 1 +
package/Config.in | 1 +
package/ivi-homescreen/Config.in | 167 ++++++++++++++
package/ivi-homescreen/ivi-homescreen.hash | 3 +
package/ivi-homescreen/ivi-homescreen.mk | 245 +++++++++++++++++++++
5 files changed, 417 insertions(+)
create mode 100644 package/ivi-homescreen/Config.in
create mode 100644 package/ivi-homescreen/ivi-homescreen.hash
create mode 100644 package/ivi-homescreen/ivi-homescreen.mk
--
2.43.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH v5 1/1] package/ivi-homescreen: new package
2024-01-03 2:06 [Buildroot] [PATCH v5 0/1] package/ivi-homescreen: new package Adam Duskett
@ 2024-01-03 2:06 ` Adam Duskett
2024-01-06 17:28 ` Yann E. MORIN
0 siblings, 1 reply; 4+ messages in thread
From: Adam Duskett @ 2024-01-03 2:06 UTC (permalink / raw)
To: buildroot; +Cc: Adam Duskett
Much like flutter-pi, this package is a Flutter embedder used to run Flutter
applications. However, unlike Flutter-pi, this package requires a Wayland
compositor to run, which flutter-pi does not support. Furthermore, flutter-pi
lacks several plugins and features that ivi-homescreen supports, such as:
- Dart VM console redirection
- DLT logging
- Accessibility
- Compositor region
- Compositor surface
- Desktop Window
- Go Router
- Isolate
- Keyboard Manager
- Layer Playground
- Mouse Cursor
- PackageInfo
- Platform
- Platform Views
- Restoration
- URL Launcher
The following plugins and options are hardcoded to off:
- Crash handler: Requires a newer version of sentry-native.
- File selector: Requires the zenity package.
- Firebase-core: Requires the firebase-cpp-sdk package.
- BUILD_TEXTURE_NAVI_EGL_ROUTING: Fails to build.
- BUILD_TEXTURE_NAVI_RENDER_EGL: Fales to build.
- BUILD_TEXTURE_TEST_EGL: Fails to build.
This package has been tested on a x86_64 host with an AMD Ryzen 9 6900HS
with Docker 24.0.5:
- The following distributions:
- Fedora 39: Host system
- Ubuntu 22.04: Docker
- Debian 11: Docker
- The following targets:
- BR2_aarch64
- BR2_arm
- BR2_x86_64
With the following defconfig:
```
BR2_x86_64=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_64_GLIBC_STABLE=y
BR2_CCACHE=y
BR2_INIT_SYSTEMD=y
BR2_TARGET_GENERIC_GETTY_PORT="tty1"
BR2_SYSTEM_DEFAULT_PATH="/bin:/sbin:/usr/bin:/usr/sbin"
BR2_GENERATE_LOCALE="en_US.UTF-8"
BR2_ROOTFS_POST_BUILD_SCRIPT="board/pc/post-build.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="board/pc/post-image-efi.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.1.24"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/pc/linux.config"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
BR2_PACKAGE_FOOT=y
BR2_PACKAGE_IVI_HOMESCREEN=y
BR2_PACKAGE_IVI_HOMESCREEN_DART_VM_LOGGING=y
BR2_PACKAGE_IVI_HOMESCREEN_DLT=y
BR2_PACKAGE_IVI_HOMESCREEN_XDG_CLIENT=y
BR2_PACKAGE_IVI_HOMESCREEN_AGL_CLIENT=y
BR2_PACKAGE_IVI_HOMESCREEN_IVI_SHELL=y
BR2_PACKAGE_IVI_HOMESCREEN_EGL_TRANSPARENCY=y
BR2_PACKAGE_IVI_HOMESCREEN_EGL_ENABLE_3D=y
BR2_PACKAGE_IVI_HOMESCREEN_EGL_MULTISAMPLE=y
BR2_PACKAGE_IVI_HOMESCREEN_ACCESSIBILITY_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_COMP_REGION_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_COMP_SURF_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_DESKTOP_WINDOW_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_GO_ROUTER_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_INTEGRATION_TEST_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_ISOLATE_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_KEYBOARD_MANAGER_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_KEY_EVENT_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_LAYER_PLAYGROUND_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_LOGGING_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_MOUSE_CURSOR_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_PACKAGE_INFO_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_PLATFORM_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_PLATFORM_VIEWS_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_RESTORATION_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_TEXT_INPUT_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_URL_LAUNCHER_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_AUDIO_PLAYERS=y
BR2_PACKAGE_IVI_HOMESCREEN_FLUTTER_SECURE_STORAGE_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_GOOGLE_SIGN_IN_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_GSTREAMER_EGL_PLUGIN=y
BR2_PACKAGE_IVI_HOMESCREEN_OPENGL_TEXTURE_PLUGIN=y
BR2_PACKAGE_SWAY=y
BR2_PACKAGE_SWAY_SWAYBAR=y
BR2_PACKAGE_SWAY_SWAYBAR_TRAY=y
BR2_PACKAGE_SWAY_SWAYNAG=y
BR2_PACKAGE_FLUTTER_GALLERY=y
BR2_PACKAGE_MESA3D=y
BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VIRGL=y
BR2_PACKAGE_MESA3D_OSMESA_GALLIUM=y
BR2_PACKAGE_MESA3D_OPENGL_ES=y
BR2_PACKAGE_ACPID=y
BR2_PACKAGE_FLUTTER_ENGINE=y
BR2_PACKAGE_CONNMAN=y
BR2_PACKAGE_CONNMAN_WIFI=y
BR2_PACKAGE_CONNMAN_CLIENT=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_SIZE="512M"
BR2_TARGET_GRUB2=y
BR2_TARGET_GRUB2_X86_64_EFI=y
BR2_PACKAGE_HOST_DOSFSTOOLS=y
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y
```
The image is then booted using qemu with the following
command:
```
LIBGL_DRIVERS_PATH=/usr/lib64/dri \
FONTCONFIG_PATH=/etc/fonts \
qemu-system-x86_64 \
-enable-kvm \
-M pc \
-cpu host \
-m 1024M \
-bios /usr/share/OVMF/OVMF_CODE.fd \
-drive file=output/images/disk.img,if=virtio,format=raw \
-net nic,model=virtio \
-net user \
-device virtio-vga-gl \
-display gtk,gl=es,show-cursor=on \
-usb \
-device usb-ehci,id=ehci \
-device usb-tablet,bus=usb-bus.0
```
After logging in, type:
- mkdir -p /tmp/sway && export XDG_RUNTIME_DIR=/tmp/sway && sway
- bring up a terminal with `windows key + return`
- Type `homescreen --b=/usr/share/flutter/gallery/release/`
Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
---
DEVELOPERS | 1 +
package/Config.in | 1 +
package/ivi-homescreen/Config.in | 167 ++++++++++++++
package/ivi-homescreen/ivi-homescreen.hash | 3 +
package/ivi-homescreen/ivi-homescreen.mk | 245 +++++++++++++++++++++
5 files changed, 417 insertions(+)
create mode 100644 package/ivi-homescreen/Config.in
create mode 100644 package/ivi-homescreen/ivi-homescreen.hash
create mode 100644 package/ivi-homescreen/ivi-homescreen.mk
diff --git a/DEVELOPERS b/DEVELOPERS
index 646b8ee5a2..33f49fcddc 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -35,6 +35,7 @@ F: package/flutter-engine/
F: package/flutter-gallery/
F: package/flutter-pi/
F: package/flutter-sdk-bin/
+F: package/ivi-homescreen/
F: package/libutempter/
F: package/tllist/
F: support/testing/tests/package/test_flutter.py
diff --git a/package/Config.in b/package/Config.in
index 38c36428b9..5f3848d860 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -320,6 +320,7 @@ comment "Graphic applications"
source "package/glmark2/Config.in"
source "package/glslsandbox-player/Config.in"
source "package/gnuplot/Config.in"
+ source "package/ivi-homescreen/Config.in"
source "package/jhead/Config.in"
source "package/kmscube/Config.in"
source "package/libva-utils/Config.in"
diff --git a/package/ivi-homescreen/Config.in b/package/ivi-homescreen/Config.in
new file mode 100644
index 0000000000..b007ea47af
--- /dev/null
+++ b/package/ivi-homescreen/Config.in
@@ -0,0 +1,167 @@
+menuconfig BR2_PACKAGE_IVI_HOMESCREEN
+ bool "ivi-homescreen"
+ depends on BR2_PACKAGE_HOST_FLUTTER_SDK_BIN_ARCH_SUPPORTS
+ depends on BR2_PACKAGE_FLUTTER_ENGINE
+ select BR2_PACKAGE_HOST_FLUTTER_SDK_BIN
+ select BR2_PACKAGE_LIBXKBCOMMON
+ select BR2_PACKAGE_WAYLAND
+ select BR2_PACKAGE_WAYLAND_PROTOCOLS
+ select BR2_PACKAGE_WAYLAND_UTILS
+ help
+ Toyota's Flutter Embedder that communicates with Wayland
+ compositors.
+ Features:
+ - Strongly Typed (C++)
+ - Lightweight
+ - Platform Channels enabled/disabled via CMake
+ - OpenGL Texture Framework
+ - Compositor Sub-surface/Region support
+ - Vulkan / EGL backend support
+
+ https://github.com/toyota-connected/ivi-homescreen
+
+if BR2_PACKAGE_IVI_HOMESCREEN
+
+config BR2_PACKAGE_IVI_HOMESCREEN_DART_VM_LOGGING
+ bool "Dart VM console redirection"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_DLT
+ bool "DLT logging"
+
+comment "Clients"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_XDG_CLIENT
+ bool "xdg"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_AGL_CLIENT
+ bool "AGL"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_IVI_SHELL
+ bool "ivi-shell"
+
+comment "EGL options"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_EGL_TRANSPARENCY
+ bool "Transparency"
+ depends on BR2_PACKAGE_HAS_LIBEGL
+
+comment "Transparency support needs an EGL backend"
+ depends on !BR2_PACKAGE_HAS_LIBEGL
+
+config BR2_PACKAGE_IVI_HOMESCREEN_EGL_ENABLE_3D
+ bool "3D support"
+ depends on BR2_PACKAGE_HAS_LIBEGL
+ help
+ Build with EGL Stencil, Depth, and Stencil
+
+comment "3D support needs an EGL backend"
+ depends on !BR2_PACKAGE_HAS_LIBEGL
+
+config BR2_PACKAGE_IVI_HOMESCREEN_EGL_MULTISAMPLE
+ bool "Multisample support"
+ depends on BR2_PACKAGE_HAS_LIBEGL
+ help
+ Build with EGL Sample set to 4
+
+comment "Multisample support needs an EGL backend"
+ depends on !BR2_PACKAGE_HAS_LIBEGL
+comment "dependency-less plugins"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_ACCESSIBILITY_PLUGIN
+ bool "Accessibility"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_COMP_REGION_PLUGIN
+ bool "Compositor Region"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_COMP_SURF_PLUGIN
+ bool "Compositor Surface"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_DESKTOP_WINDOW_PLUGIN
+ bool "Desktop Window"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_GO_ROUTER_PLUGIN
+ bool "Go Router"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_INTEGRATION_TEST_PLUGIN
+ bool "Flutter Integration Test support"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_ISOLATE_PLUGIN
+ bool "Isolate"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_KEYBOARD_MANAGER_PLUGIN
+ bool "Keyboard Manager"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_KEY_EVENT_PLUGIN
+ bool "Key Event"
+config BR2_PACKAGE_IVI_HOMESCREEN_LAYER_PLAYGROUND_PLUGIN
+ bool "Layer Playground"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_LOGGING_PLUGIN
+ bool "Logging"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_MOUSE_CURSOR_PLUGIN
+ bool "Mouse Cursor"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_PACKAGE_INFO_PLUGIN
+ bool "PackageInfo"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_PLATFORM_PLUGIN
+ bool "Platform"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_PLATFORM_VIEWS_PLUGIN
+ bool "Platform Views"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_RESTORATION_PLUGIN
+ bool "Restoration"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_TEXT_INPUT_PLUGIN
+ bool "Text Input"
+
+config BR2_PACKAGE_IVI_HOMESCREEN_URL_LAUNCHER_PLUGIN
+ bool "URL Launcher"
+
+comment "plugins with external dependencies"
+config BR2_PACKAGE_IVI_HOMESCREEN_AUDIO_PLAYERS
+ bool "Audio Players"
+ select BR2_PACKAGE_GSTREAMER1
+ select BR2_PACKAGE_GST1_PLUGINS_BASE
+ select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ALSA
+ select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOCONVERT
+ select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIORESAMPLE
+ select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VOLUME
+
+config BR2_PACKAGE_IVI_HOMESCREEN_FLUTTER_SECURE_STORAGE_PLUGIN
+ bool "Flutter Secure Storage"
+ select BR2_PACKAGE_LIBSECRET
+
+config BR2_PACKAGE_IVI_HOMESCREEN_GOOGLE_SIGN_IN_PLUGIN
+ bool "Google Sign In manager"
+ select BR2_PACKAGE_LIBCURL
+
+config BR2_PACKAGE_IVI_HOMESCREEN_GSTREAMER_EGL_PLUGIN
+ bool "GStreamer"
+ depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS
+ depends on BR2_PACKAGE_HAS_LIBEGL
+ select BR2_PACKAGE_FFMPEG
+ select BR2_PACKAGE_GSTREAMER1
+ select BR2_PACKAGE_GST1_PLUGINS_BASE
+ select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL
+ select BR2_PACKAGE_GST1_PLUGINS_BASE_LIB_OPENGL_EGL
+
+comment "GStreamer plugin needs an EGL backend"
+ depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS
+ depends on !BR2_PACKAGE_HAS_LIBEGL
+
+config BR2_PACKAGE_IVI_HOMESCREEN_OPENGL_TEXTURE_PLUGIN
+ bool "OpenGL Texture"
+ depends on BR2_PACKAGE_HAS_LIBEGL
+ select BR2_PACKAGE_IVI_HOMESCREEN_EGL_TEXTURE
+
+comment "OpenGL texture plugin needs an EGL backend"
+ depends on !BR2_PACKAGE_HAS_LIBEGL
+
+endif # BR2_PACKAGE_IVI_HOMESCREEN
+
+comment "flutter-auto needs flutter-engine"
+ depends on BR2_PACKAGE_HOST_FLUTTER_SDK_BIN_ARCH_SUPPORTS
+ depends on !BR2_PACKAGE_FLUTTER_ENGINE
diff --git a/package/ivi-homescreen/ivi-homescreen.hash b/package/ivi-homescreen/ivi-homescreen.hash
new file mode 100644
index 0000000000..c28de3ae1f
--- /dev/null
+++ b/package/ivi-homescreen/ivi-homescreen.hash
@@ -0,0 +1,3 @@
+# Locally calculated
+sha256 1ab2e7ab5f947482cb5529dbb6392e7e1945ceb0b593abde6b6279d7bd2fdb79 ivi-homescreen-5ab78a19e95c88cc5d6b173ab1260a211e78cf0a-br1.tar.gz
+sha256 6b96fa0a3def85caaf466caa2bd82d4ca4f22d106ff88f97a00c537c00cc714b LICENSE
diff --git a/package/ivi-homescreen/ivi-homescreen.mk b/package/ivi-homescreen/ivi-homescreen.mk
new file mode 100644
index 0000000000..760390c125
--- /dev/null
+++ b/package/ivi-homescreen/ivi-homescreen.mk
@@ -0,0 +1,245 @@
+################################################################################
+#
+# ivi-homescreen
+#
+################################################################################
+
+IVI_HOMESCREEN_VERSION = 5ab78a19e95c88cc5d6b173ab1260a211e78cf0a
+IVI_HOMESCREEN_SITE = https://github.com/toyota-connected/ivi-homescreen.git
+IVI_HOMESCREEN_SITE_METHOD = git
+IVI_HOMESCREEN_LICENSE = Apache-2.0
+IVI_HOMESCREEN_LICENSE_FILES = LICENSE
+IVI_HOMESCREEN_DEPENDENCIES = \
+ host-flutter-sdk-bin \
+ flutter-engine \
+ libxkbcommon \
+ wayland \
+ wayland-protocols \
+ wayland-utils
+
+IVI_HOMESCREEN_CONF_OPTS = \
+ -DBUILD_CRASH_HANDLER=OFF \
+ -DBUILD_PLUGIN_FILE_SELECTOR=OFF \
+ -DBUILD_PLUGIN_FIREBASE_CORE=OFF \
+ -DBUILD_TEXTURE_NAVI_EGL_ROUTING=OFF \
+ -DBUILD_TEXTURE_NAVI_RENDER_EGL=OFF \
+ -DBUILD_TEXTURE_TEST_EGL=OFF \
+ -DBUILD_UNIT_TESTS=OFF
+
+ifeq ($(BR2_PACKAGE_HAS_LIBEGL),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_EGL=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_EGL=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_EGL_TRANSPARENCY),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_TRANSPARENCY=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_TRANSPARENCY=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_EGL_ENABLE_3D),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_ENABLE_3D=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_ENABLE_3D=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_EGL_MULTISAMPLE),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_ENABLE_MULTISAMPLE=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_ENABLE_MULTISAMPLE=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_MESA3D_VULKAN_DRIVER),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_VULKAN=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_VULKAN=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_LIBDRM),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_DRM=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_DRM=OFF
+endif
+
+# Clients
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_XDG_CLIENT),y)
+IVI_HOMESCREEN_CONF_OPTS += -DENABLE_XDG_CLIENT=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DENABLE_XDG_CLIENT=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_AGL_CLIENT),y)
+IVI_HOMESCREEN_CONF_OPTS += -DENABLE_AGL_CLIENT=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DENABLE_AGL_CLIENT=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_IVI_SHELL),y)
+IVI_HOMESCREEN_CONF_OPTS += -DENABLE_IVI_SHELL_CLIENT=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DENABLE_IVI_SHELL_CLIENT=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_DART_VM_LOGGING),y)
+IVI_HOMESCREEN_CONF_OPTS += -DENABLE_DART_VM_LOGGING=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DENABLE_DART_VM_LOGGING=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_DLT),y)
+IVI_HOMESCREEN_CONF_OPTS += -DENABLE_DLT=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DENABLE_DLT=OFF
+endif
+# dependency-less plugins
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_ACCESSIBILITY_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_ACCESSIBILITY=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_ACCESSIBILITY=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_COMP_REGION_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_COMP_REGION=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_COMP_REGION=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_COMP_SURF_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_COMP_SURF=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_COMP_SURF=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_DESKTOP_WINDOW_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_DESKTOP_WINDOW=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_DESKTOP_WINDOW=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_GO_ROUTER_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_GO_ROUTER=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_GO_ROUTER=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_INTEGRATION_TEST_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_INTEGRATION_TEST=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_INTEGRATION_TEST=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_ISOLATE_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_ISOLATE=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_ISOLATE=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_KEYBOARD_MANAGER_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_KEYBOARD_MANAGER=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_KEYBOARD_MANAGER=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_KEY_EVENT_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_KEY_EVENT=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_KEY_EVENT=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_LAYER_PLAYGROUND_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_LAYER_PLAYGROUND=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_LAYER_PLAYGROUND=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_LOGGING_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_LOGGING=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_LOGGING=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_MOUSE_CURSOR_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_MOUSE_CURSOR=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_MOUSE_CURSOR=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_PACKAGE_INFO_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_PACKAGE_INFO=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_PACKAGE_INFO=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_PLATFORM_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_PLATFORM=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_PLATFORM=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_PLATFORM_VIEWS_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_PLATFORM_VIEWS=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_PLATFORM_VIEWS=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_RESTORATION_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_RESTORATION=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_RESTORATION=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_TEXT_INPUT_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_TEXT_INPUT=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_TEXT_INPUT=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_URL_LAUNCHER_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_URL_LAUNCHER=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_URL_LAUNCHER=OFF
+endif
+
+# "plugins with external dependencies"
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_AUDIO_PLAYERS),y)
+IVI_HOMESCREEN_DEPENDENCIES += gstreamer1 gst1-plugins-base
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_AUDIO_PLAYERS=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_AUDIO_PLAYERS=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_FLUTTER_SECURE_STORAGE_PLUGIN),y)
+IVI_HOMESCREEN_DEPENDENCIES += libsecret
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_SECURE_STORAGE=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_SECURE_STORAGE=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_GOOGLE_SIGN_IN_PLUGIN),y)
+IVI_HOMESCREEN_DEPENDENCIES += libcurl
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_GOOGLE_SIGN_IN=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_GOOGLE_SIGN_IN=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_GSTREAMER_EGL_PLUGIN),y)
+IVI_HOMESCREEN_DEPENDENCIES += ffmpeg gstreamer1 gst1-plugins-base
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_GSTREAMER_EGL=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += -DBUILD_PLUGIN_GSTREAMER_EGL=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_OPENGL_TEXTURE_PLUGIN),y)
+IVI_HOMESCREEN_CONF_OPTS += \
+ -DBUILD_PLUGIN_OPENGL_TEXTURE=ON \
+ -DBUILD_TEXTURE_EGL=ON
+else
+IVI_HOMESCREEN_CONF_OPTS += \
+ -DBUILD_PLUGIN_OPENGL_TEXTURE=OFF \
+ -DBUILD_TEXTURE_EGL=OFF
+endif
+
+$(eval $(cmake-package))
--
2.43.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Buildroot] [PATCH v5 1/1] package/ivi-homescreen: new package
2024-01-03 2:06 ` [Buildroot] [PATCH v5 1/1] " Adam Duskett
@ 2024-01-06 17:28 ` Yann E. MORIN
2024-01-06 18:16 ` Adam Duskett
0 siblings, 1 reply; 4+ messages in thread
From: Yann E. MORIN @ 2024-01-06 17:28 UTC (permalink / raw)
To: Adam Duskett; +Cc: buildroot
Adam, All,
On 2024-01-02 19:06 -0700, Adam Duskett spake thusly:
> Much like flutter-pi, this package is a Flutter embedder used to run Flutter
> applications. However, unlike Flutter-pi, this package requires a Wayland
> compositor to run, which flutter-pi does not support. Furthermore, flutter-pi
> lacks several plugins and features that ivi-homescreen supports, such as:
> - Dart VM console redirection
> - DLT logging
> - Accessibility
> - Compositor region
> - Compositor surface
> - Desktop Window
> - Go Router
> - Isolate
> - Keyboard Manager
> - Layer Playground
> - Mouse Cursor
> - PackageInfo
> - Platform
> - Platform Views
> - Restoration
> - URL Launcher
>
> The following plugins and options are hardcoded to off:
> - Crash handler: Requires a newer version of sentry-native.
> - File selector: Requires the zenity package.
> - Firebase-core: Requires the firebase-cpp-sdk package.
> - BUILD_TEXTURE_NAVI_EGL_ROUTING: Fails to build.
> - BUILD_TEXTURE_NAVI_RENDER_EGL: Fales to build.
> - BUILD_TEXTURE_TEST_EGL: Fails to build.
Thanks for the detailed commit log! It is a bit more descriptive than
explaining, but there is not much to explain, so OK. The part about the
hardcoded-off options *is* very a-propos, though. Thanks!
Still, I have a few questions, see below for the details, but here are
the few key points:
- licensing terms to extend
- inherited dependencies to propagate
- is at least a client required, or can we build with none?
- TLS-aware libcurl needed?
- missing _DEPENDENCIES to add or explain
- reduce verbosity of _CONF_OPTS where possible
Also, the following part, although interesting, is not really fit for a
commit log; it would have been better as a post-commit note, or in the
cover letter; it could even be used as the basis for a runtime test:
> This package has been tested on a x86_64 host with an AMD Ryzen 9 6900HS
> with Docker 24.0.5:
[--SNIP--]
> With the following defconfig:
[--SNIP--]
> The image is then booted using qemu with the following
> command:
[--SNIP--]
> After logging in, type:
> - mkdir -p /tmp/sway && export XDG_RUNTIME_DIR=/tmp/sway && sway
> - bring up a terminal with `windows key + return`
> - Type `homescreen --b=/usr/share/flutter/gallery/release/`
[--SNIP--]
... up to here.
> Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
> ---
[--SNIP--]
> diff --git a/package/ivi-homescreen/Config.in b/package/ivi-homescreen/Config.in
> new file mode 100644
> index 0000000000..b007ea47af
> --- /dev/null
> +++ b/package/ivi-homescreen/Config.in
> @@ -0,0 +1,167 @@
This file is big, so I'll chop off the parts that are OK, just to
concentrate on the key points (minor formatting issues like missing
empty lines are just ignored, and elided):
> +menuconfig BR2_PACKAGE_IVI_HOMESCREEN
> + bool "ivi-homescreen"
> + depends on BR2_PACKAGE_HOST_FLUTTER_SDK_BIN_ARCH_SUPPORTS
> + depends on BR2_PACKAGE_FLUTTER_ENGINE
> + select BR2_PACKAGE_HOST_FLUTTER_SDK_BIN
> + select BR2_PACKAGE_LIBXKBCOMMON
> + select BR2_PACKAGE_WAYLAND
> + select BR2_PACKAGE_WAYLAND_PROTOCOLS
> + select BR2_PACKAGE_WAYLAND_UTILS
It's not obvious what dependencies are inherited from either
BR2_PACKAGE_FLUTTER_ENGINE or BR2_PACKAGE_HOST_FLUTTER_SDK_BIN_ARCH_SUPPORTS,
so I would prefer they be duplicated, however, because then it is really
obvious.
It might seem superfluous, but with big graphic stacks, it's easy to get
lost, so at least the comment assesses the check was performed.
[--SNIP--]
> +comment "Clients"
> +
> +config BR2_PACKAGE_IVI_HOMESCREEN_XDG_CLIENT
> + bool "xdg"
> +
> +config BR2_PACKAGE_IVI_HOMESCREEN_AGL_CLIENT
> + bool "AGL"
> +
> +config BR2_PACKAGE_IVI_HOMESCREEN_IVI_SHELL
> + bool "ivi-shell"
Should we ensure there is at least one client enabled, or does it still
make sense to build ivi-homescreen without any client?
If we need at least one, then we can do the usual dance (I arbitrarily
choose XDG as the default client, adapt if another one makes more
sense):
menuconfig BR2_PACKAGE_IVI_HOMESCREEN
bool "ivi-homescreen"
select BR2_PACKAGE_IVI_HOMESCREEN_XDG_CLIENT if !BR2_PACKAGE_IVI_HOMESCREEN_HAS_CLIENT
config BR2_PACKAGE_IVI_HOMESCREEN_HAS_CLIENT
bool
config BR2_PACKAGE_IVI_HOMESCREEN_XDG_CLIENT
bool "xdg"
config BR2_PACKAGE_IVI_HOMESCREEN_AGL_CLIENT
bool "AGL"
select BR2_PACKAGE_IVI_HOMESCREEN_HAS_CLIENT
config BR2_PACKAGE_IVI_HOMESCREEN_IVI_SHELL
bool "ivi-shell"
select BR2_PACKAGE_IVI_HOMESCREEN_HAS_CLIENT
[--SNIP--]
> +comment "plugins with external dependencies"
> +config BR2_PACKAGE_IVI_HOMESCREEN_AUDIO_PLAYERS
> + bool "Audio Players"
> + select BR2_PACKAGE_GSTREAMER1
Again, it's not clear what the dependencies inherited via either
BR2_PACKAGE_FLUTTER_ENGINE or BR2_PACKAGE_HOST_FLUTTER_SDK_BIN_ARCH_SUPPORTS
are.
> + select BR2_PACKAGE_GST1_PLUGINS_BASE
> + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ALSA
> + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOCONVERT
> + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIORESAMPLE
> + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VOLUME
> +
> +config BR2_PACKAGE_IVI_HOMESCREEN_FLUTTER_SECURE_STORAGE_PLUGIN
> + bool "Flutter Secure Storage"
> + select BR2_PACKAGE_LIBSECRET
> +
> +config BR2_PACKAGE_IVI_HOMESCREEN_GOOGLE_SIGN_IN_PLUGIN
> + bool "Google Sign In manager"
> + select BR2_PACKAGE_LIBCURL
Doesn't that also need an SSL/TLS capable libcurl? If so, then select
BR2_PACKAGE_LIBCURL_FORCE_TLS, and look at the comment for that option.
[--SNIP--]
> +config BR2_PACKAGE_IVI_HOMESCREEN_OPENGL_TEXTURE_PLUGIN
> + bool "OpenGL Texture"
> + depends on BR2_PACKAGE_HAS_LIBEGL
> + select BR2_PACKAGE_IVI_HOMESCREEN_EGL_TEXTURE
BR2_PACKAGE_IVI_HOMESCREEN_EGL_TEXTURE is defined nowhere.
> +comment "OpenGL texture plugin needs an EGL backend"
> + depends on !BR2_PACKAGE_HAS_LIBEGL
> +
> +endif # BR2_PACKAGE_IVI_HOMESCREEN
> +
> +comment "flutter-auto needs flutter-engine"
s/flutter-auto/ivi-homescreen/
[--SNIP--]
> diff --git a/package/ivi-homescreen/ivi-homescreen.mk b/package/ivi-homescreen/ivi-homescreen.mk
> new file mode 100644
> index 0000000000..760390c125
> --- /dev/null
> +++ b/package/ivi-homescreen/ivi-homescreen.mk
> @@ -0,0 +1,245 @@
> +################################################################################
> +#
> +# ivi-homescreen
> +#
> +################################################################################
> +
> +IVI_HOMESCREEN_VERSION = 5ab78a19e95c88cc5d6b173ab1260a211e78cf0a
> +IVI_HOMESCREEN_SITE = https://github.com/toyota-connected/ivi-homescreen.git
> +IVI_HOMESCREEN_SITE_METHOD = git
> +IVI_HOMESCREEN_LICENSE = Apache-2.0
> +IVI_HOMESCREEN_LICENSE_FILES = LICENSE
The licensing is going to be a bit more complex: ivi-homescreen bundles
a few third-parties (in the aptly named third_party/ top-level
directory); I quickly had a look, and they have various other licensing
terms:
third_party/agl/protocol/ MIT
third_party/asio-1-28-1/asio/ BSL-1.0
It also has a (partial?) flutter copy, which also bundles a few
third-parties of its own:
third_party/flutter/
third_party/flutter/third_party/rapidjson/include/rapidjson/ MIT
third_party/flutter/third_party/dart/runtime/include/ BSD-style
Note that one refers to a LICENSE file, which is missing.
third_party/googletest/ BSD-3c
third_party/sanitizers-cmake/ MIT
third_party/spdlog-1.12.0/ MIT
third_party/weston/protocol/ MIT
The above is not exhaustive, so more research is needed.
[--SNIP--]
> +ifeq ($(BR2_PACKAGE_HAS_LIBEGL),y)
> +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_EGL=ON
Why is there no dependency on libegl?
> +else
> +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_EGL=OFF
> +endif
>
> +ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_EGL_TRANSPARENCY),y)
> +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_TRANSPARENCY=ON
> +else
> +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_TRANSPARENCY=OFF
> +endif
> +
> +ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_EGL_ENABLE_3D),y)
> +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_ENABLE_3D=ON
> +else
> +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_ENABLE_3D=OFF
> +endif
> +
> +ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_EGL_MULTISAMPLE),y)
> +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_ENABLE_MULTISAMPLE=ON
> +else
> +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_ENABLE_MULTISAMPLE=OFF
> +endif
> +
> +ifeq ($(BR2_PACKAGE_MESA3D_VULKAN_DRIVER),y)
> +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_VULKAN=ON
Why is a dependency on mesa3d not needed here?
> +else
> +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_VULKAN=OFF
> +endif
> +
> +ifeq ($(BR2_PACKAGE_LIBDRM),y)
> +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_DRM=ON
Ditto: don't we need a dependency on libdrm?
> +else
> +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_DRM=OFF
> +endif
Otherwise, all those ifeq-else-endif blocks are a bit verbose. I know
we use such constructs, but there is an alternative solution that is
less verbose, and quite fitting when there is no dependency to add with
the symbol:
IVI_HOMESCREEN_CONF_OPTS += \
-DBUILD_EGL_TRANSPARENCY=$(if $(BR2_PACKAGE_IVI_HOMESCREEN_EGL_TRANSPARENCY),ON,OFF) \
-DBUILD_EGL_ENABLE_3D=$(if $(BR2_PACKAGE_IVI_HOMESCREEN_EGL_ENABLE_3D),ON,OFF) \
-DBUILD_EGL_ENABLE_MULTISAMPLE=$(if $(BR2_PACKAGE_IVI_HOMESCREEN_EGL_MULTISAMPLE),ON,OFF) \
-DENABLE_XDG_CLIENT=$(if $(BR2_PACKAGE_IVI_HOMESCREEN_XDG_CLIENT),ON,OFF) \
-DENABLE_DLT=$(if $(BR2_PACKAGE_IVI_HOMESCREEN_DLT),ON,OFF) \
...
And keep using ifeq-else-endif blocks when there is an actual dependency
to add.
(The big users of such constructs are opencv3 and opencv4, but there are
a few others as well.)
Thank you for working on such complex packages! There is nothing really
major above, and I could have fixed most when applying, except for a few
questions I couldn't easily find the answer for.
Regards,
Yann E. MORIN.
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Buildroot] [PATCH v5 1/1] package/ivi-homescreen: new package
2024-01-06 17:28 ` Yann E. MORIN
@ 2024-01-06 18:16 ` Adam Duskett
0 siblings, 0 replies; 4+ messages in thread
From: Adam Duskett @ 2024-01-06 18:16 UTC (permalink / raw)
To: Yann E. MORIN; +Cc: buildroot
Yann;
Thanks for the thorough review!
On Sat, Jan 6, 2024 at 10:28 AM Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>
> Adam, All,
>
> On 2024-01-02 19:06 -0700, Adam Duskett spake thusly:
> > Much like flutter-pi, this package is a Flutter embedder used to run Flutter
> > applications. However, unlike Flutter-pi, this package requires a Wayland
> > compositor to run, which flutter-pi does not support. Furthermore, flutter-pi
> > lacks several plugins and features that ivi-homescreen supports, such as:
> > - Dart VM console redirection
> > - DLT logging
> > - Accessibility
> > - Compositor region
> > - Compositor surface
> > - Desktop Window
> > - Go Router
> > - Isolate
> > - Keyboard Manager
> > - Layer Playground
> > - Mouse Cursor
> > - PackageInfo
> > - Platform
> > - Platform Views
> > - Restoration
> > - URL Launcher
> >
> > The following plugins and options are hardcoded to off:
> > - Crash handler: Requires a newer version of sentry-native.
> > - File selector: Requires the zenity package.
> > - Firebase-core: Requires the firebase-cpp-sdk package.
> > - BUILD_TEXTURE_NAVI_EGL_ROUTING: Fails to build.
> > - BUILD_TEXTURE_NAVI_RENDER_EGL: Fales to build.
> > - BUILD_TEXTURE_TEST_EGL: Fails to build.
>
> Thanks for the detailed commit log! It is a bit more descriptive than
> explaining, but there is not much to explain, so OK. The part about the
> hardcoded-off options *is* very apropos, though. Thanks!
>
No worries!
> Still, I have a few questions; see below for the details, but here are
> the few key points:
> - licensing terms to extend
> - inherited dependencies to propagate
> - is at least a client required, or can we build with none?
> - TLS-aware libcurl needed?
> - missing _DEPENDENCIES to add or explain
> - reduce verbosity of _CONF_OPTS where possible
>
> Also, the following part, although interesting, is not really fit for a
> commit log; it would have been better as a post-commit note, or in the
> cover letter; it could even be used as the basis for a runtime test:
>
> > This package has been tested on a x86_64 host with an AMD Ryzen 9 6900HS
> > with Docker 24.0.5:
> [--SNIP--]
> > With the following defconfig:
> [--SNIP--]
> > The image is then booted using qemu with the following
> > command:
> [--SNIP--]
> > After logging in, type:
> > - mkdir -p /tmp/sway && export XDG_RUNTIME_DIR=/tmp/sway && sway
> > - bring up a terminal with `windows key + return`
> > - Type `homescreen --b=/usr/share/flutter/gallery/release/`
> [--SNIP--]
>
> ... up to here.
>
Sounds good. I can include it in a cover letter. Although I included
it here for record-keeping
for any user who may want to try this package out. Let me know what
you want to do.
> > Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
> > ---
> [--SNIP--]
> > diff --git a/package/ivi-homescreen/Config.in b/package/ivi-homescreen/Config.in
> > new file mode 100644
> > index 0000000000..b007ea47af
> > --- /dev/null
> > +++ b/package/ivi-homescreen/Config.in
> > @@ -0,0 +1,167 @@
>
> This file is big, so I'll chop off the parts that are OK, just to
> concentrate on the key points (minor formatting issues like missing
> empty lines are just ignored and elided):
>
> > +menuconfig BR2_PACKAGE_IVI_HOMESCREEN
> > + bool "ivi-homescreen"
> > + depends on BR2_PACKAGE_HOST_FLUTTER_SDK_BIN_ARCH_SUPPORTS
> > + depends on BR2_PACKAGE_FLUTTER_ENGINE
> > + select BR2_PACKAGE_HOST_FLUTTER_SDK_BIN
> > + select BR2_PACKAGE_LIBXKBCOMMON
> > + select BR2_PACKAGE_WAYLAND
> > + select BR2_PACKAGE_WAYLAND_PROTOCOLS
> > + select BR2_PACKAGE_WAYLAND_UTILS
>
> It's not obvious what dependencies are inherited from either
> BR2_PACKAGE_FLUTTER_ENGINE or BR2_PACKAGE_HOST_FLUTTER_SDK_BIN_ARCH_SUPPORTS,
> so I would prefer they be duplicated, however, because then it is really
> obvious.
If you want me to do include the dependencies of Flutter and
Flutter-engine, that is quite OK.
I was following the convention of flutter-pi and flutter-gallery.
Would you like me to change those
as well?
>
> It might seem superfluous, but with big graphic stacks, it's easy to get
> lost, so at least the comment assesses the check was performed.
>
> [--SNIP--]
> > +comment "Clients"
> > +
> > +config BR2_PACKAGE_IVI_HOMESCREEN_XDG_CLIENT
> > + bool "xdg"
> > +
> > +config BR2_PACKAGE_IVI_HOMESCREEN_AGL_CLIENT
> > + bool "AGL"
> > +
> > +config BR2_PACKAGE_IVI_HOMESCREEN_IVI_SHELL
> > + bool "ivi-shell"
>
> Should we ensure there is at least one client enabled, or does it still
> make sense to build ivi-homescreen without any client?
>
> If we need at least one, then we can do the usual dance (I arbitrarily
> choose XDG as the default client, adapt if another one makes more
> sense):
>
> menuconfig BR2_PACKAGE_IVI_HOMESCREEN
> bool "ivi-homescreen"
> select BR2_PACKAGE_IVI_HOMESCREEN_XDG_CLIENT if !BR2_PACKAGE_IVI_HOMESCREEN_HAS_CLIENT
>
> config BR2_PACKAGE_IVI_HOMESCREEN_HAS_CLIENT
> bool
>
> config BR2_PACKAGE_IVI_HOMESCREEN_XDG_CLIENT
> bool "xdg"
>
> config BR2_PACKAGE_IVI_HOMESCREEN_AGL_CLIENT
> bool "AGL"
> select BR2_PACKAGE_IVI_HOMESCREEN_HAS_CLIENT
>
> config BR2_PACKAGE_IVI_HOMESCREEN_IVI_SHELL
> bool "ivi-shell"
> select BR2_PACKAGE_IVI_HOMESCREEN_HAS_CLIENT
>
> [--SNIP--]
> > +comment "plugins with external dependencies"
> > +config BR2_PACKAGE_IVI_HOMESCREEN_AUDIO_PLAYERS
> > + bool "Audio Players"
> > + select BR2_PACKAGE_GSTREAMER1
>
> Again, it's not clear what the dependencies inherited via either
Well, presumably, the top-level dependencies! Although now I
understand why you want all the top-level
dependencies of flutter-engine to be listed. Makes sense!
> BR2_PACKAGE_FLUTTER_ENGINE or BR2_PACKAGE_HOST_FLUTTER_SDK_BIN_ARCH_SUPPORTS
> are.
>
> > + select BR2_PACKAGE_GST1_PLUGINS_BASE
> > + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ALSA
> > + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOCONVERT
> > + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIORESAMPLE
> > + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VOLUME
> > +
> > +config BR2_PACKAGE_IVI_HOMESCREEN_FLUTTER_SECURE_STORAGE_PLUGIN
> > + bool "Flutter Secure Storage"
> > + select BR2_PACKAGE_LIBSECRET
> > +
> > +config BR2_PACKAGE_IVI_HOMESCREEN_GOOGLE_SIGN_IN_PLUGIN
> > + bool "Google Sign In manager"
> > + select BR2_PACKAGE_LIBCURL
>
> Doesn't that also need an SSL/TLS capable libcurl? If so, then select
> BR2_PACKAGE_LIBCURL_FORCE_TLS, and look at the comment for that option.
>
Good point, I'll add it in the next patch.
> [--SNIP--]
> > +config BR2_PACKAGE_IVI_HOMESCREEN_OPENGL_TEXTURE_PLUGIN
> > + bool "OpenGL Texture"
> > + depends on BR2_PACKAGE_HAS_LIBEGL
> > + select BR2_PACKAGE_IVI_HOMESCREEN_EGL_TEXTURE
>
> BR2_PACKAGE_IVI_HOMESCREEN_EGL_TEXTURE is defined nowhere.
>
Will fix in the next revision
> > +comment "OpenGL texture plugin needs an EGL backend"
> > + depends on !BR2_PACKAGE_HAS_LIBEGL
> > +
> > +endif # BR2_PACKAGE_IVI_HOMESCREEN
> > +
> > +comment "flutter-auto needs flutter-engine"
>
> s/flutter-auto/ivi-homescreen/
>
> [--SNIP--]
> > diff --git a/package/ivi-homescreen/ivi-homescreen.mk b/package/ivi-homescreen/ivi-homescreen.mk
> > new file mode 100644
> > index 0000000000..760390c125
> > --- /dev/null
> > +++ b/package/ivi-homescreen/ivi-homescreen.mk
> > @@ -0,0 +1,245 @@
> > +################################################################################
> > +#
> > +# ivi-homescreen
> > +#
> > +################################################################################
> > +
> > +IVI_HOMESCREEN_VERSION = 5ab78a19e95c88cc5d6b173ab1260a211e78cf0a
> > +IVI_HOMESCREEN_SITE = https://github.com/toyota-connected/ivi-homescreen.git
> > +IVI_HOMESCREEN_SITE_METHOD = git
> > +IVI_HOMESCREEN_LICENSE = Apache-2.0
> > +IVI_HOMESCREEN_LICENSE_FILES = LICENSE
>
> The licensing is going to be a bit more complex: ivi-homescreen bundles
> a few third-parties (in the aptly named third_party/ top-level
> directory); I quickly had a look, and they have various other licensing
> terms:
>
> third_party/agl/protocol/ MIT
> third_party/asio-1-28-1/asio/ BSL-1.0
>
> It also has a (partial?) flutter copy, which also bundles a few
> third-parties of its own:
>
> third_party/flutter/
> third_party/flutter/third_party/rapidjson/include/rapidjson/ MIT
> third_party/flutter/third_party/dart/runtime/include/ BSD-style
>
> Note that one refers to a LICENSE file, which is missing.
>
> third_party/googletest/ BSD-3c
> third_party/sanitizers-cmake/ MIT
> third_party/spdlog-1.12.0/ MIT
> third_party/weston/protocol/ MIT
>
> The above is not exhaustive, so more research is needed.
>
Will do. I assume a simple IVI_HOMESCREEN_DEPENDENCIES += "${LICENSE}" works?
> [--SNIP--]
> > +ifeq ($(BR2_PACKAGE_HAS_LIBEGL),y)
> > +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_EGL=ON
>
> Why is there no dependency on libegl?
Good point
>
> > +else
> > +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_EGL=OFF
> > +endif
> >
> > +ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_EGL_TRANSPARENCY),y)
> > +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_TRANSPARENCY=ON
> > +else
> > +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_TRANSPARENCY=OFF
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_EGL_ENABLE_3D),y)
> > +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_ENABLE_3D=ON
> > +else
> > +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_ENABLE_3D=OFF
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_IVI_HOMESCREEN_EGL_MULTISAMPLE),y)
> > +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_ENABLE_MULTISAMPLE=ON
> > +else
> > +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_EGL_ENABLE_MULTISAMPLE=OFF
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_MESA3D_VULKAN_DRIVER),y)
> > +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_VULKAN=ON
>
> Why is a dependency on mesa3d not needed here?
>
> > +else
> > +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_VULKAN=OFF
> > +endif
> > +
> > +ifeq ($(BR2_PACKAGE_LIBDRM),y)
> > +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_DRM=ON
>
> Ditto: don't we need a dependency on libdrm?
>
> > +else
> > +IVI_HOMESCREEN_CONF_OPTS += -DBUILD_BACKEND_WAYLAND_DRM=OFF
> > +endif
>
> Otherwise, all those ifeq-else-endif blocks are a bit verbose. I know
> we use such constructs, but there is an alternative solution that is
> less verbose, and quite fitting when there is no dependency to add with
> the symbol:
>
> IVI_HOMESCREEN_CONF_OPTS += \
> -DBUILD_EGL_TRANSPARENCY=$(if $(BR2_PACKAGE_IVI_HOMESCREEN_EGL_TRANSPARENCY),ON,OFF) \
> -DBUILD_EGL_ENABLE_3D=$(if $(BR2_PACKAGE_IVI_HOMESCREEN_EGL_ENABLE_3D),ON,OFF) \
> -DBUILD_EGL_ENABLE_MULTISAMPLE=$(if $(BR2_PACKAGE_IVI_HOMESCREEN_EGL_MULTISAMPLE),ON,OFF) \
> -DENABLE_XDG_CLIENT=$(if $(BR2_PACKAGE_IVI_HOMESCREEN_XDG_CLIENT),ON,OFF) \
> -DENABLE_DLT=$(if $(BR2_PACKAGE_IVI_HOMESCREEN_DLT),ON,OFF) \
> ...
>
I debated on this and went against it because everything else was
already in an ifeq-else-endif block. My OCD couldn't handle it.
I'll be glad to switch it!
> And keep using ifeq-else-endif blocks when there is an actual dependency
> to add.
>
> (The big users of such constructs are opencv3 and opencv4, but there are
> a few others as well.)
>
> Thank you for working on such complex packages! There is nothing really
> major above, and I could have fixed most when applying, except for a few
> questions I couldn't easily find the answer for.
>
No worries! I'll send a new version soon.
> Regards,
> Yann E. MORIN.
>
> --
> .-----------------.--------------------.------------------.--------------------.
> | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
> | +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no |
> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
> '------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-01-06 18:16 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-03 2:06 [Buildroot] [PATCH v5 0/1] package/ivi-homescreen: new package Adam Duskett
2024-01-03 2:06 ` [Buildroot] [PATCH v5 1/1] " Adam Duskett
2024-01-06 17:28 ` Yann E. MORIN
2024-01-06 18:16 ` Adam Duskett
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox