Enable running audio services on host for KVM demo 02/29702/2
authorScott Murray <scott.murray@konsulko.com>
Tue, 20 Feb 2024 20:17:17 +0000 (15:17 -0500)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Fri, 8 Mar 2024 18:27:03 +0000 (18:27 +0000)
Changes:
- Add agl-kvm-host-audio feature for configuring other changes.
- Make installation of packagegroup-agl-ivi-service-platform in the
  KVM host versus IVI images dependent on the agl-kvm-host-audio
  feature.  Some recipe dependencies are tweaked by the feature
  being specified to avoid accidentally pulling things into the
  IVI guest images.
- Add KVM demo specific configuration for applications affected by
  running the databroker on the host versus in the IVI guest, and
  use it if the agl-kvm-host-kuksa feature is enabled.

Bug-AGL: SPEC-5082

Change-Id: I3a6e6216a90e4d260c20f0b048e6332466aef4ff
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl-demo/+/29702
ci-image-boot-test: Jenkins Job builder account
ci-image-build: Jenkins Job builder account
Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
Tested-by: Jenkins Job builder account
24 files changed:
recipes-demo/agl-service-radio/agl-service-radio_git.bb
recipes-demo/agl-service-radio/files/radio.conf.kvm-demo [new file with mode: 0644]
recipes-demo/flutter-cluster-dashboard/files/cluster-dashboard.yaml.demo
recipes-demo/flutter-cluster-dashboard/files/kvm.conf [new file with mode: 0644]
recipes-demo/flutter-cluster-dashboard/flutter-cluster-dashboard_git.bb
recipes-demo/flutter-ics-homescreen/files/ics-homescreen.yaml.kvm-demo [new file with mode: 0644]
recipes-demo/flutter-ics-homescreen/files/kvm.conf [new file with mode: 0644]
recipes-demo/flutter-ics-homescreen/flutter-ics-homescreen_git.bb
recipes-demo/libqtappfw/libqtappfw_git.bb
recipes-demo/navigation/ondemandnavi/navigation.conf.kvm-demo [new file with mode: 0644]
recipes-demo/navigation/ondemandnavi_git.bb
recipes-demo/navigation/tbtnavi/kvm.conf [new file with mode: 0644]
recipes-demo/navigation/tbtnavi/tbtnavi.conf.kvm-demo [new file with mode: 0644]
recipes-demo/navigation/tbtnavi_git.bb
recipes-platform/images/agl-image-ivi.bb
recipes-platform/images/agl-ivi-demo-features.inc
recipes-platform/images/agl-ivi-demo-platform-flutter.bb
recipes-platform/images/agl-ivi-demo-platform.bb
recipes-platform/images/agl-kvm-demo-platform.bb
recipes-platform/packagegroups/packagegroup-agl-demo-cluster-support.bb [deleted file]
recipes-platform/packagegroups/packagegroup-agl-ivi-multimedia.bb
templates/feature/agl-kvm-host-audio/50_local.conf.inc [new file with mode: 0644]
templates/feature/agl-kvm-host-audio/README_feature_agl-kvm-host-kuksa.md [new file with mode: 0644]
templates/feature/agl-kvm-host-audio/included.dep [new file with mode: 0644]

index 7664e5a..89c18ae 100644 (file)
@@ -17,7 +17,8 @@ DEPENDS = " \
     libusb-compat \
 "
 
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-radio;protocol=https;branch=${AGL_BRANCH}"
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-radio;protocol=https;branch=${AGL_BRANCH} \
+           file://radio.conf.kvm-demo"
 SRCREV  = "7f26a2d06410fd3a2768612b9c9daf869778e480"
 
 PV = "2.0+git${SRCPV}"
@@ -27,4 +28,20 @@ inherit meson pkgconfig systemd
 
 SYSTEMD_SERVICE:${PN} = "agl-service-radio.service"
 
+do_install:append() {
+    install -D -m 0644 ${WORKDIR}/radio.conf.kvm-demo ${D}${sysconfdir}/xdg/AGL.conf
+}
+
+PACKAGE_BEFORE_PN += "${PN}-conf-kvm-demo"
+
 FILES:${PN} += "${systemd_system_unitdir}"
+
+FILES:${PN}-conf-kvm-demo += " \
+    ${sysconfdir}/xdg/AGL.conf \
+"
+
+RDEPENDS:${PN} += " \
+    gstreamer1.0 \
+    gstreamer1.0-plugins-base \
+    gstreamer1.0-pipewire \
+"
diff --git a/recipes-demo/agl-service-radio/files/radio.conf.kvm-demo b/recipes-demo/agl-service-radio/files/radio.conf.kvm-demo
new file mode 100644 (file)
index 0000000..d855eb4
--- /dev/null
@@ -0,0 +1,2 @@
+[radio]
+bind=0.0.0.0
index bab0a6b..32545c2 100644 (file)
@@ -1,3 +1,4 @@
 hostname: 192.168.10.2
 authorization : "/etc/xdg/AGL/cluster-dashboard/cluster-dashboard.token"
 use-tls : true
+tls-server-name : "localhost"
diff --git a/recipes-demo/flutter-cluster-dashboard/files/kvm.conf b/recipes-demo/flutter-cluster-dashboard/files/kvm.conf
new file mode 100644 (file)
index 0000000..0a38143
--- /dev/null
@@ -0,0 +1,3 @@
+[Unit]
+Wants=network-online.target
+After=network-online.target
index 3577593..1dde42d 100644 (file)
@@ -14,6 +14,7 @@ SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/flutter-instrument-clust
     file://cluster-dashboard.yaml \
     file://cluster-dashboard.yaml.demo \
     file://cluster-dashboard.token \
+    file://kvm.conf \
 "
 
 PV = "1.0+git${SRCPV}"
@@ -36,6 +37,8 @@ SYSTEMD_SERVICE:${PN} = "flutter-cluster-dashboard.service"
 do_install:append() {
     install -D -m 0644 ${WORKDIR}/${BPN}.service ${D}${systemd_system_unitdir}/${BPN}.service
 
+    install -D -m 0644 ${WORKDIR}/kvm.conf ${D}${systemd_system_unitdir}/${BPN}.service.d/kvm.conf
+
     install -D -m 0644 ${WORKDIR}/${APP_CONFIG} ${D}${datadir}/flutter/${BPN}.json
 
     install -d ${D}${sysconfdir}/xdg/AGL/cluster-dashboard
@@ -60,7 +63,10 @@ RCONFLICTS:${PN}-conf = "${PN}-conf-demo"
 ALTERNATIVE:${PN}-conf = "cluster-dashboard.yaml"
 ALTERNATIVE_TARGET_${PN}-conf = "${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.default"
 
-FILES:${PN}-conf-demo += "${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.demo"
+FILES:${PN}-conf-demo += " \
+    ${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.demo \
+    ${systemd_system_unitdir}/flutter-cluster-dashboard.service.d/kvm.conf \
+"
 RDEPENDS:${PN}-conf-demo = "${PN}"
 RPROVIDES:${PN}-conf-demo = "cluster-dashboard.yaml"
 RCONFLICTS:${PN}-conf-demo = "${PN}-conf"
diff --git a/recipes-demo/flutter-ics-homescreen/files/ics-homescreen.yaml.kvm-demo b/recipes-demo/flutter-ics-homescreen/files/ics-homescreen.yaml.kvm-demo
new file mode 100644 (file)
index 0000000..22e7e39
--- /dev/null
@@ -0,0 +1,10 @@
+kuksa:
+  hostname : 172.16.10.1
+  port : 55555
+  authorization : "/etc/xdg/AGL/ics-homescreen/ics-homescreen.token"
+  use-tls : true
+  tls-server-name : localhost
+radio:
+  hostname : 172.16.10.1
+mpd:
+  hostname : 172.16.10.1
diff --git a/recipes-demo/flutter-ics-homescreen/files/kvm.conf b/recipes-demo/flutter-ics-homescreen/files/kvm.conf
new file mode 100644 (file)
index 0000000..0a38143
--- /dev/null
@@ -0,0 +1,3 @@
+[Unit]
+Wants=network-online.target
+After=network-online.target
index dd50df7..6dacebb 100644 (file)
@@ -10,8 +10,10 @@ SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/flutter-ics-homescreen;p
   file://flutter-ics-homescreen.json \
   file://flutter-ics-homescreen.service \
   file://ics-homescreen.yaml \
+  file://ics-homescreen.yaml.kvm-demo \
   file://ics-homescreen.token \
   file://radio-presets.yaml \
+  file://kvm.conf \
 "
 SRCREV = "5587c6ae79b482fbff26442bb239d7d7eb55a337"
 
@@ -22,7 +24,7 @@ FLUTTER_APPLICATION_INSTALL_PREFIX = "/flutter"
 
 FLUTTER_BUILD_ARGS = "bundle -v"
 
-inherit flutter-app systemd
+inherit flutter-app systemd update-alternatives
 
 APP_CONFIG = "${BPN}.json"
 
@@ -36,6 +38,8 @@ APP_AOT_EXTRA:append = " ${DISABLE_BG_ANIMATION}"
 do_install:append() {
     install -D -m 0644 ${WORKDIR}/${BPN}.service ${D}${systemd_system_unitdir}/${BPN}.service
 
+    install -D -m 0644 ${WORKDIR}/kvm.conf ${D}${systemd_system_unitdir}/${BPN}.service.d/kvm.conf
+
     install -D -m 0644 ${WORKDIR}/${APP_CONFIG} ${D}${datadir}/flutter/${BPN}.json
 
     # VIS authorization token file for KUKSA.val should ideally not
@@ -43,17 +47,38 @@ do_install:append() {
     # until a packaging/sandboxing/MAC scheme is (re)implemented or
     # something like OAuth is plumbed in as an alternative.
     install -d ${D}${sysconfdir}/xdg/AGL/ics-homescreen
-    install -m 0644 ${WORKDIR}/ics-homescreen.yaml ${D}${sysconfdir}/xdg/AGL/
+    install -m 0644 ${WORKDIR}/ics-homescreen.yaml ${D}${sysconfdir}/xdg/AGL/ics-homescreen.yaml.default
+    install -m 0644 ${WORKDIR}/ics-homescreen.yaml.kvm-demo ${D}${sysconfdir}/xdg/AGL/
     install -m 0644 ${WORKDIR}/ics-homescreen.token ${D}${sysconfdir}/xdg/AGL/ics-homescreen/
     install -m 0644 ${WORKDIR}/radio-presets.yaml ${D}${sysconfdir}/xdg/AGL/ics-homescreen/
 }
 
+ALTERNATIVE_LINK_NAME[ics-homescreen.yaml] = "${sysconfdir}/xdg/AGL/ics-homescreen.yaml"
+
 FILES:${PN} += "${datadir} ${sysconfdir}/xdg/AGL"
 
 RDEPENDS:${PN} += " \
     flutter-auto \
     agl-flutter-env \
     applaunchd \
-    agl-service-radio \
-    mpd \
+    ${@bb.utils.contains('AGL_FEATURES', 'agl-kvm-host-audio', '', 'agl-service-radio mpd', d)} \
+"
+
+PACKAGE_BEFORE_PN += "${PN}-conf ${PN}-conf-kvm-demo"
+
+FILES:${PN}-conf += "${sysconfdir}/xdg/AGL/ics-homescreen.yaml.default"
+RDEPENDS:${PN}-conf = "${PN}"
+RPROVIDES:${PN}-conf = "ics-homescreen.yaml"
+RCONFLICTS:${PN}-conf = "${PN}-conf-kvm-demo"
+ALTERNATIVE:${PN}-conf = "ics-homescreen.yaml"
+ALTERNATIVE_TARGET_${PN}-conf = "${sysconfdir}/xdg/AGL/ics-homescreen.yaml.default"
+
+FILES:${PN}-conf-kvm-demo += " \
+    ${sysconfdir}/xdg/AGL/ics-homescreen.yaml.kvm-demo \
+    ${systemd_system_unitdir}/flutter-ics-homescreen.service.d/kvm.conf \
 "
+RDEPENDS:${PN}-conf-kvm-demo = "${PN}"
+RPROVIDES:${PN}-conf-kvm-demo = "ics-homescreen.yaml"
+RCONFLICTS:${PN}-conf-kvm-demo = "${PN}-conf"
+ALTERNATIVE:${PN}-conf-kvm-demo = "ics-homescreen.yaml"
+ALTERNATIVE_TARGET_${PN}-conf-kvm-demo = "${sysconfdir}/xdg/AGL/ics-homescreen.yaml.kvm-demo"
index 6c90808..85d20f4 100644 (file)
@@ -32,6 +32,10 @@ inherit meson pkgconfig
 
 EXTRA_OEMESON += "-Dprotos=${STAGING_INCDIR}"
 
-RRECOMMENDS:${PN} += "bluez5 connman mpd"
+RRECOMMENDS:${PN} += " \
+    bluez5 \
+    connman \
+    ${@bb.utils.contains('AGL_FEATURES', 'agl-kvm-host-audio', '', 'mpd', d)} \
+"
 
 BBCLASSEXTEND = "nativesdk"
diff --git a/recipes-demo/navigation/ondemandnavi/navigation.conf.kvm-demo b/recipes-demo/navigation/ondemandnavi/navigation.conf.kvm-demo
new file mode 100644 (file)
index 0000000..6da2579
--- /dev/null
@@ -0,0 +1,4 @@
+[kuksa-client]
+hostname = "172.16.10.1"
+tls-server-name = "localhost"
+authorization = "/etc/xdg/AGL/navigation/navigation.token"
index 5fa27aa..7bfa000 100644 (file)
@@ -12,13 +12,14 @@ PV = "2.0+git${SRCPV}"
 
 SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/ondemandnavi;protocol=https;branch=${AGL_BRANCH} \
            file://navigation.conf \
+           file://navigation.conf.kvm-demo \
            file://navigation.token \
 "
 SRCREV = "d6b883ef6bdb63fb501b03d64c9a32bc29b7b2c7"
 
 S = "${WORKDIR}/git"
 
-inherit qmake5 pkgconfig agl-app
+inherit qmake5 pkgconfig agl-app update-alternatives
 
 AGL_APP_ID = "navigation"
 AGL_APP_NAME = "Navigation"
@@ -32,10 +33,29 @@ do_install:append() {
     # until a packaging/sandboxing/MAC scheme is (re)implemented or
     # something like OAuth is plumbed in as an alternative.
     install -d ${D}${sysconfdir}/xdg/AGL/navigation
-    install -m 0644 ${WORKDIR}/navigation.conf ${D}${sysconfdir}/xdg/AGL/
+    install -m 0644 ${WORKDIR}/navigation.conf ${D}${sysconfdir}/xdg/AGL/navigation.conf.default
+    install -m 0644 ${WORKDIR}/navigation.conf.kvm-demo ${D}${sysconfdir}/xdg/AGL/
     install -m 0644 ${WORKDIR}/navigation.token ${D}${sysconfdir}/xdg/AGL/navigation/
 }
 
+ALTERNATIVE_LINK_NAME[navigation.conf] = "${sysconfdir}/xdg/AGL/navigation.conf"
+
+PACKAGE_BEFORE_PN += "${PN}-conf ${PN}-conf-kvm-demo"
+
+FILES:${PN}-conf += "${sysconfdir}/xdg/AGL/navigation.conf.default"
+RDEPENDS:${PN}-conf = "${PN}"
+RPROVIDES:${PN}-conf = "navigation.conf"
+RCONFLICTS:${PN}-conf = "${PN}-conf-kvm-demo"
+ALTERNATIVE:${PN}-conf = "navigation.conf"
+ALTERNATIVE_TARGET_${PN}-conf = "${sysconfdir}/xdg/AGL/navigation.conf.default"
+
+FILES:${PN}-conf-kvm-demo += "${sysconfdir}/xdg/AGL/navigation.conf.kvm-demo"
+RDEPENDS:${PN}-conf-kvm-demo = "${PN}"
+RPROVIDES:${PN}-conf-kvm-demo = "navigation.conf"
+RCONFLICTS:${PN}-conf-kvm-demo = "${PN}-conf"
+ALTERNATIVE:${PN}-conf-kvm-demo = "navigation.conf"
+ALTERNATIVE_TARGET_${PN}-conf-kvm-demo = "${sysconfdir}/xdg/AGL/navigation.conf.kvm-demo"
+
 RDEPENDS:${PN} += " \
     qtwayland \
     qtbase-qmlplugins \
diff --git a/recipes-demo/navigation/tbtnavi/kvm.conf b/recipes-demo/navigation/tbtnavi/kvm.conf
new file mode 100644 (file)
index 0000000..324bac3
--- /dev/null
@@ -0,0 +1,3 @@
+[Unit]
+Wants=network-online.target flutter-ics-homescreen.service
+After=network-online.target flutter-ics-homescreen.service
diff --git a/recipes-demo/navigation/tbtnavi/tbtnavi.conf.kvm-demo b/recipes-demo/navigation/tbtnavi/tbtnavi.conf.kvm-demo
new file mode 100644 (file)
index 0000000..6e891fa
--- /dev/null
@@ -0,0 +1,4 @@
+[kuksa-client]
+hostname = "172.16.10.1"
+tls-server-name = "localhost"
+authorization = "/etc/xdg/AGL/tbtnavi/tbtnavi.token"
index b621381..b3703c5 100644 (file)
@@ -27,19 +27,23 @@ PV = "2.0+git${SRCPV}"
 SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/tbtnavi;protocol=https;branch=${AGL_BRANCH} \
            file://tbtnavi.service \
            file://tbtnavi.conf \
+           file://tbtnavi.conf.kvm-demo \
            file://tbtnavi.token \
+           file://kvm.conf \
 "
 SRCREV = "f00c1e19f5c4cbcd185c8043f3062612bf1537f7"
 
 S = "${WORKDIR}/git"
 
-inherit meson systemd pkgconfig
+inherit meson systemd pkgconfig update-alternatives
 
 SYSTEMD_SERVICE:${PN} = "${BPN}.service"
 
 do_install:append() {
     install -D -m 0644 ${WORKDIR}/${BPN}.service ${D}${systemd_system_unitdir}/${BPN}.service
 
+    install -D -m 0644 ${WORKDIR}/kvm.conf ${D}${systemd_system_unitdir}/${BPN}.service.d/kvm.conf
+
     # Currently using default global client and CA certificates
     # for KUKSA.val SSL, installing app specific ones would go here.
 
@@ -48,10 +52,13 @@ do_install:append() {
     # until a packaging/sandboxing/MAC scheme is (re)implemented or
     # something like OAuth is plumbed in as an alternative.
     install -d ${D}${sysconfdir}/xdg/AGL/tbtnavi
-    install -m 0644 ${WORKDIR}/tbtnavi.conf ${D}${sysconfdir}/xdg/AGL/
+    install -m 0644 ${WORKDIR}/tbtnavi.conf ${D}${sysconfdir}/xdg/AGL/tbtnavi.conf.default
+    install -m 0644 ${WORKDIR}/tbtnavi.conf.kvm-demo ${D}${sysconfdir}/xdg/AGL/
     install -m 0644 ${WORKDIR}/tbtnavi.token ${D}${sysconfdir}/xdg/AGL/tbtnavi/
 }
 
+ALTERNATIVE_LINK_NAME[tbtnavi.conf] = "${sysconfdir}/xdg/AGL/tbtnavi.conf"
+
 RDEPENDS:${PN} += " \
     qtwayland \
     qtbase-qmlplugins \
@@ -60,3 +67,22 @@ RDEPENDS:${PN} += " \
     ondemandnavi-config \
     libqtappfw \
 "
+
+PACKAGE_BEFORE_PN += "${PN}-conf ${PN}-conf-kvm-demo"
+
+FILES:${PN}-conf += "${sysconfdir}/xdg/AGL/tbtnavi.conf.default"
+RDEPENDS:${PN}-conf = "${PN}"
+RPROVIDES:${PN}-conf = "tbtnavi.conf"
+RCONFLICTS:${PN}-conf = "${PN}-conf-kvm-demo"
+ALTERNATIVE:${PN}-conf = "tbtnavi.conf"
+ALTERNATIVE_TARGET_${PN}-conf = "${sysconfdir}/xdg/AGL/tbtnavi.conf.default"
+
+FILES:${PN}-conf-kvm-demo += " \
+    ${sysconfdir}/xdg/AGL/tbtnavi.conf.kvm-demo \
+    ${systemd_system_unitdir}/tbtnavi.service.d/kvm.conf \
+"
+RDEPENDS:${PN}-conf-kvm-demo = "${PN}"
+RPROVIDES:${PN}-conf-kvm-demo = "tbtnavi.conf"
+RCONFLICTS:${PN}-conf-kvm-demo = "${PN}-conf"
+ALTERNATIVE:${PN}-conf-kvm-demo = "tbtnavi.conf"
+ALTERNATIVE_TARGET_${PN}-conf-kvm-demo = "${sysconfdir}/xdg/AGL/tbtnavi.conf.kvm-demo"
index 165a45b..69d0ed9 100644 (file)
@@ -14,7 +14,7 @@ IMAGE_INSTALL += " \
     packagegroup-agl-ivi-navigation \
     packagegroup-agl-ivi-identity \
     packagegroup-agl-ivi-services-applaunchd \
-    packagegroup-agl-ivi-services-platform \
+    ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-audio", "", "packagegroup-agl-ivi-services-platform", d)} \
     iproute2 \
     "
 
index eb4d253..9aabaaf 100644 (file)
@@ -1,7 +1,12 @@
 require agl-demo-features.inc
 
 FEATURE_PACKAGES_agl-demo-preload = "packagegroup-agl-demo-preload"
-FEATURE_PACKAGES_agl-demo-cluster-support = "packagegroup-agl-demo-cluster-support"
+
+FEATURE_PACKAGES_agl-demo-cluster-support = " \
+    tbtnavi \
+    ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "tbtnavi-conf-kvm-demo", "tbtnavi-conf", d)} \
+    ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "", "kuksa-databroker-agl-demo-cluster", d)} \
+"
 
 IMAGE_FEATURES += " \
     ${@bb.utils.contains("DISTRO_FEATURES", "agl-devel", "can-test-tools" , "", d)} \
index a50c00b..558acd1 100644 (file)
@@ -4,5 +4,7 @@ DESCRIPTION = "AGL Flutter Demo Platform image"
 
 AGL_APPS_INSTALL += " \
     flutter-ics-homescreen \
+    ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "flutter-ics-homescreen-conf-kvm-demo", "flutter-ics-homescreen-conf", d)} \
     ondemandnavi \
+    ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "ondemandnavi-conf-kvm-demo", "ondemandnavi-conf", d)} \
 "
index 318bae4..2854462 100644 (file)
@@ -6,6 +6,7 @@ AGL_APPS_INSTALL += " \
     dashboard \
     hvac \
     ondemandnavi \
+    ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "ondemandnavi-conf-kvm-demo", "ondemandnavi-conf", d)} \
     settings \
     mediaplayer \
     messaging \
index feafe2e..ddb2ddb 100644 (file)
@@ -30,6 +30,29 @@ IMAGE_INSTALL += " \
     alsa-utils \
 "
 
+# Until virtio sound is workable with QEMU, run the audio using
+# services on the host for a better demo experience.  At the
+# moment, this also includes the HVAC service since it does not
+# make sense to try to make things more fine-grained with respect
+# to configuration for where things expect to find the databroker.
+# It will need to be revisited when virtio-snd, virtio-gpio, etc.
+# become feasible to use.
+HOST_AUDIO_INSTALL = " \
+    packagegroup-agl-ivi-services-platform \
+    agl-service-radio-conf-kvm-demo \
+    packagegroup-pipewire \
+    wireplumber-config-agl \
+    wireplumber-policy-config-agl \
+    mpd \
+    udisks2 \
+    ${@bb.utils.contains("DISTRO_FEATURES", "agl-devel", "packagegroup-pipewire-tools mpc" , "", d)} \
+"
+
+IMAGE_INSTALL += "\
+    ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "kuksa-databroker-agl-demo-cluster", "", d)} \
+    ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-audio", "${HOST_AUDIO_INSTALL}", "", d)} \
+"
+
 # Potential size reduction options
 #IMAGE_LINGUAS = " "
 #NO_RECOMMENDATIONS = "1"
diff --git a/recipes-platform/packagegroups/packagegroup-agl-demo-cluster-support.bb b/recipes-platform/packagegroups/packagegroup-agl-demo-cluster-support.bb
deleted file mode 100644 (file)
index 10e26dc..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-SUMMARY = "Extra software and configuration for cluster demo with AGL IVI profile demo platform"
-
-LICENSE = "MIT"
-
-inherit packagegroup
-
-PROVIDES = "${PACKAGES}"
-PACKAGES = "\
-    packagegroup-agl-demo-cluster-support \
-"
-
-RDEPENDS:${PN} += "\
-    tbtnavi \
-    kuksa-databroker-agl-demo-cluster \
-"
index 8865a9f..78c96fa 100644 (file)
@@ -21,5 +21,5 @@ RDEPENDS:${PN} += "\
     ${@bb.utils.contains('DISTRO_FEATURES', 'pipewire', '${PIPEWIRE_PACKAGES}', '', d)} \
     gstreamer1.0-plugins-base-meta \
     gstreamer1.0-plugins-good-meta \
-    mpd \
+    ${@bb.utils.contains('AGL_FEATURES', 'agl-kvm-host-audio', '', 'mpd', d)} \
     "
diff --git a/templates/feature/agl-kvm-host-audio/50_local.conf.inc b/templates/feature/agl-kvm-host-audio/50_local.conf.inc
new file mode 100644 (file)
index 0000000..7bd20e3
--- /dev/null
@@ -0,0 +1 @@
+AGL_FEATURES += "agl-kvm-host-audio"
diff --git a/templates/feature/agl-kvm-host-audio/README_feature_agl-kvm-host-kuksa.md b/templates/feature/agl-kvm-host-audio/README_feature_agl-kvm-host-kuksa.md
new file mode 100644 (file)
index 0000000..93a4b9a
--- /dev/null
@@ -0,0 +1,17 @@
+---
+description: Feature agl-kvm-host-audio
+authors: Scott Murray <scott.murray@konsulko.com>
+---
+
+### Feature agl-kvm-host-audio
+
+* Enables support for running audio services on host in KVM+QEMU demo images
+
+### Dependent features pulled by agl-kvm-host-audio
+
+The following features are pulled:
+
+* agl-kvm agl-kvm-host-kuksa
+
+Note that enabling this feature results in a configuration where building images
+other than agl-kvm-demo-platform will likely not give the desired results.
diff --git a/templates/feature/agl-kvm-host-audio/included.dep b/templates/feature/agl-kvm-host-audio/included.dep
new file mode 100644 (file)
index 0000000..f1f0a2f
--- /dev/null
@@ -0,0 +1 @@
+agl-kvm agl-kvm-host-kuksa