diff options
97 files changed, 2193 insertions, 1474 deletions
diff --git a/meta-agl-bsp/conf/include/agl_qemuarm.inc b/meta-agl-bsp/conf/include/agl_qemuarm.inc index 2449e1800..8a41757ef 100644 --- a/meta-agl-bsp/conf/include/agl_qemuarm.inc +++ b/meta-agl-bsp/conf/include/agl_qemuarm.inc @@ -16,5 +16,5 @@ QB_MEM:qemuarm = "-m 2048" # Changes to make runqemu work out-of-the-box QB_AUDIO_DRV:qemuarm := "alsa" QB_MACHINE:qemuarm := "-machine virt-2.11 -smp 4" -QB_OPT_APPEND:qemuarm := "-show-cursor -device VGA,vgamem_mb=64,edid=on -device qemu-xhci -device usb-tablet -device usb-kbd -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0" +QB_OPT_APPEND:qemuarm := "-device VGA,vgamem_mb=64,edid=on -device qemu-xhci -device usb-tablet -device usb-kbd" QB_KERNEL_CMDLINE_APPEND:qemuarm := "console=ttyAMA0 verbose vmalloc=256M" diff --git a/meta-agl-bsp/conf/include/agl_qemuarm64.inc b/meta-agl-bsp/conf/include/agl_qemuarm64.inc index 46d3b4c39..8e292c50b 100644 --- a/meta-agl-bsp/conf/include/agl_qemuarm64.inc +++ b/meta-agl-bsp/conf/include/agl_qemuarm64.inc @@ -16,5 +16,5 @@ QB_MEM:qemuarm64 = "-m 2048" # Changes to make runqemu work out-of-the-box QB_AUDIO_DRV:qemuarm64 := "alsa" QB_MACHINE:qemuarm64 := "-machine virt -smp 4" -QB_OPT_APPEND:qemuarm64 := " -show-cursor -device VGA,vgamem_mb=64,edid=on -device qemu-xhci -device usb-tablet -device usb-kbd -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0" +QB_OPT_APPEND:qemuarm64 := " -device VGA,vgamem_mb=64,edid=on -device qemu-xhci -device usb-tablet -device usb-kbd" QB_KERNEL_CMDLINE_APPEND:qemuarm64 := "console=ttyAMA0,115200n8 verbose"
\ No newline at end of file diff --git a/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc b/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc index 64e13642e..fb67fd976 100644 --- a/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc +++ b/meta-agl-bsp/conf/include/agl_rcar-nogfx.inc @@ -58,13 +58,3 @@ BBMASK += "meta-renesas/meta-rcar-gen3/recipes-graphics/cogl/cogl-1.0_1.%.bbappe # packagegroup bbclass is inherited. This can be removed when upstream # is fixed to add the required PACKAGE_ARCH = "${MACHINE_ARCH}". PACKAGE_ARCH:pn-packagegroup-multimedia-libs = "${MACHINE_ARCH}" - -# Mask out BSP layer gstreamer* 1.22.x bbappends for now, as the BSP -# effectively is building 1.20.x plugins and packaging them as 1.22, -# which breaks building various things. The whole directory is not -# commented out because we still want the vspfilter plugin. -# The BBMASKs need to be here instead of agl_rcar.ing since without -# them there are issues with the gstreamer1.0-plugins-bad patches in -# meta-agl-core not applying. -BBMASK += "meta-renesas/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-omx" -BBMASK += "meta-renesas/meta-rcar-gen3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-" diff --git a/meta-agl-bsp/conf/include/agl_rk3588.inc b/meta-agl-bsp/conf/include/agl_rk3588.inc new file mode 100644 index 000000000..4c3f6990f --- /dev/null +++ b/meta-agl-bsp/conf/include/agl_rk3588.inc @@ -0,0 +1,12 @@ +# Add for gstreamer plugins ugly +LICENSE_FLAGS_ACCEPTED:append = " commercial" +MACHINE_FEATURES:append:rk3588 = " multimedia" + +BBMASK += " \ + meta-rockchip/recipes-multimedia/gstreamer \ + meta-rockchip/recipes-graphics/wayland/weston_%.bbappend \ + " + +MACHINE_EXTRA_RRECOMMENDS:append = " \ + alsa-state \ +" diff --git a/meta-agl-bsp/conf/include/agl_visionfive2.inc b/meta-agl-bsp/conf/include/agl_visionfive2.inc new file mode 100644 index 000000000..1b4cb5339 --- /dev/null +++ b/meta-agl-bsp/conf/include/agl_visionfive2.inc @@ -0,0 +1 @@ +PERF:forcevariable = "" diff --git a/meta-agl-bsp/conf/machine/include/virtio.inc b/meta-agl-bsp/conf/machine/include/virtio.inc index 6f8a638a0..1e4875b5d 100644 --- a/meta-agl-bsp/conf/machine/include/virtio.inc +++ b/meta-agl-bsp/conf/machine/include/virtio.inc @@ -15,9 +15,6 @@ RDEPENDS:${KERNEL_PACKAGE_NAME}-base = "" # Use a common kernel recipe for all VirtIO machines PREFERRED_PROVIDER_virtual/kernel ??= "linux-yocto" -# Use newer kernel -PREFERRED_VERSION_linux-yocto = "5.15.%" - EXTRA_IMAGEDEPENDS += "qemu-native qemu-helper-native" IMAGE_CLASSES += "qemuboot" diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_11.0.3.imx.bbappend b/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_12.0.3.imx.bbappend index ca162e28f..ca162e28f 100644 --- a/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_11.0.3.imx.bbappend +++ b/meta-agl-bsp/meta-freescale-layer/recipes-graphics/wayland/weston_12.0.3.imx.bbappend diff --git a/meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch b/meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch deleted file mode 100644 index 82f15f88c..000000000 --- a/meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 7335a36d0b5c1c597566f9aa3f458a5b6817c3b4 Mon Sep 17 00:00:00 2001 -From: aurel32 <aurelien@aurel32.net> -Date: Fri, 22 Mar 2024 14:21:13 -0700 -Subject: [PATCH] PR #1644: unscaledcycleclock: remove RISC-V support - -Imported from GitHub PR https://github.com/abseil/abseil-cpp/pull/1644 - -Starting with Linux 6.6 [1], RDCYCLE is a privileged instruction on RISC-V and can't be used directly from userland. There is a sysctl option to change that as a transition period, but it will eventually disappear. - -The RDTIME instruction is another less accurate alternative, however its frequency varies from board to board, and there is currently now way to get its frequency from userland [2]. - -Therefore this patch just removes the code for unscaledcycleclock on RISC-V. Without processor specific implementation, abseil relies on std::chrono::steady_clock::now().time_since_epoch() which is basically a wrapper around clock_gettime (CLOCK_MONOTONIC), which in turns use __vdso_clock_gettime(). On RISC-V this VDSO is just a wrapper around RDTIME correctly scaled to use nanoseconds units. - -This fixes the testsuite on riscv64, tested on a VisionFive 2 board. - -[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc4c07c89aada16229084eeb93895c95b7eabaa3 -[2] https://github.com/abseil/abseil-cpp/pull/1631 -Merge 43356a2548cfde76e164d446cb69004b488c6a71 into 76f8011beabdaee872b5fde7546e02407b220cb1 - -Merging this change closes #1644 - -COPYBARA_INTEGRATE_REVIEW=https://github.com/abseil/abseil-cpp/pull/1644 from aurel32:rv64-no-unscaledcycleclock 43356a2548cfde76e164d446cb69004b488c6a71 -PiperOrigin-RevId: 618286262 -Change-Id: Ie4120a727e7d0bb185df6e06ea145c780ebe6652 - -Upstream-Status: Backport [https://github.com/abseil/abseil-cpp/commit/7335a36d] -[Adapted to apply on top of meta-oe's patch stack] -Signed-off-by: Scott Murray <scott.murray@konsulko.com> ---- - .../absl/base/internal/unscaledcycleclock.cc | 12 ------------ - .../absl/base/internal/unscaledcycleclock_config.h | 5 ++--- - 2 files changed, 2 insertions(+), 15 deletions(-) - -diff --git a/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc b/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc -index f11fecb..103b4f6 100644 ---- a/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc -+++ b/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc -@@ -121,18 +121,6 @@ double UnscaledCycleClock::Frequency() { - return aarch64_timer_frequency; - } - --#elif defined(__riscv) -- --int64_t UnscaledCycleClock::Now() { -- int64_t virtual_timer_value; -- asm volatile("rdcycle %0" : "=r"(virtual_timer_value)); -- return virtual_timer_value; --} -- --double UnscaledCycleClock::Frequency() { -- return base_internal::NominalCPUFrequency(); --} -- - #elif defined(_M_IX86) || defined(_M_X64) - - #pragma intrinsic(__rdtsc) -diff --git a/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h b/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h -index 5e232c1..83552fc 100644 ---- a/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h -+++ b/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h -@@ -22,7 +22,6 @@ - // The following platforms have an implementation of a hardware counter. - #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \ - ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \ -- defined(__riscv) || \ - defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC)) - #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1 - #else -@@ -54,8 +53,8 @@ - #if ABSL_USE_UNSCALED_CYCLECLOCK - // This macro can be used to test if UnscaledCycleClock::Frequency() - // is NominalCPUFrequency() on a particular platform. --#if (defined(__i386__) || defined(__x86_64__) || defined(__riscv) || \ -- defined(_M_IX86) || defined(_M_X64)) -+#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || \ -+ defined(_M_X64)) - #define ABSL_INTERNAL_UNSCALED_CYCLECLOCK_FREQUENCY_IS_CPU_FREQUENCY - #endif - #endif --- -2.44.0 - diff --git a/meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio_1.62.%.bbappend b/meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio_1.62.%.bbappend deleted file mode 100644 index 2bf47126f..000000000 --- a/meta-agl-bsp/meta-python/recipes-devtools/python/python3-grpcio_1.62.%.bbappend +++ /dev/null @@ -1,3 +0,0 @@ -FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" - -SRC_URI += "file://0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch" diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/cogent-symlinks/recipes-bsp/ti-bt b/meta-agl-bsp/meta-rcar-gen3-adas/cogent-symlinks/recipes-bsp/ti-bt deleted file mode 120000 index 13ea60b90..000000000 --- a/meta-agl-bsp/meta-rcar-gen3-adas/cogent-symlinks/recipes-bsp/ti-bt +++ /dev/null @@ -1 +0,0 @@ -../../../../../bsp/meta-rcar/meta-rcar-gen3-adas/recipes-bsp/ti-bt
\ No newline at end of file diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc b/meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc index 0c344a471..40d0ef0cb 100644 --- a/meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc +++ b/meta-agl-bsp/meta-rcar-gen3-adas/conf/include/rcar-gen3-adas.inc @@ -6,8 +6,7 @@ # recipes. AGL_FEATURES:append:rcar-gen3 = " kingfisher" -IMAGE_NAME:rcar-gen3 = "${IMAGE_BASENAME}-${MACHINE}-kf${IMAGE_VERSION_SUFFIX}" -IMAGE_LINK_NAME:rcar-gen3 = "${IMAGE_BASENAME}-${MACHINE}-kf" +IMAGE_MACHINE_SUFFIX = "-${MACHINE}-kf" TOOLCHAIN_OUTPUTNAME:rcar-gen3 = "${SDK_NAME}-kf-toolchain-${SDK_VERSION}" # Radio packages @@ -15,6 +14,5 @@ IMAGE_INSTALL:append:rcar-gen3 = " \ si-tools \ si-init \ linux-firmware-wl18xx \ - ti-bt \ ti-bt-firmware \ " diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend index 7121bd168..9a5347b68 100644 --- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend +++ b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/si-tools/si-tools.bbappend @@ -6,23 +6,7 @@ SRC_URI += " \ EXTRA_OEMAKE:append = " 'LDFLAGS=${LDFLAGS}'" -do_install() { - install -d ${D}${bindir} - install -d ${D}${nonarch_base_libdir}/firmware/radio/ - - install -m 755 si_ctl ${D}${bindir} - install -m 755 si_flash ${D}${bindir} - for file in ${SCRIPTS}; do - install -m 755 ${S}/scripts/$file ${D}${bindir} - sed -e 's,^\(SI_ARGS\s*=\s*\).*,\1"/dev/i2c-12 0x65",' -i ${D}${bindir}/$file - done - - for file in ${FIRMWARE}; do - install -m 644 ${S}/firmware/$file ${D}${nonarch_base_libdir}/firmware/radio/ - done -} - -FILES:${PN} = " \ - ${bindir} \ - ${nonarch_base_libdir}/firmware/radio \ -" +# Setting LDFLAGS fixes the QA issue, disable INSANE_SKIP over-ride +# done in the recipe +INSANE_SKIP:${PN} = "" +INSANE_SKIP:${PN}-dev = ""
\ No newline at end of file diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt-firmware/ti-bt-firmware_git.bbappend b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt-firmware/ti-bt-firmware_git.bbappend deleted file mode 100644 index 52bee656d..000000000 --- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt-firmware/ti-bt-firmware_git.bbappend +++ /dev/null @@ -1,6 +0,0 @@ -do_install() { - install -d ${D}${nonarch_base_libdir}/firmware/ti-connectivity/ - cp *.bts ${D}${nonarch_base_libdir}/firmware/ti-connectivity/ -} - -FILES:${PN} = "${nonarch_base_libdir}/firmware/ti-connectivity/*" diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt/ti-uim.service b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt/ti-uim.service deleted file mode 100644 index 214e60707..000000000 --- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt/ti-uim.service +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=User Mode Init Manager for TI shared transport -Before=bluetooth.service - -[Service] -ExecStartPre=-/sbin/modprobe -q btwilink -ExecStart=/usr/bin/uim -f /sys/devices/platform/kim - -[Install] -WantedBy=multi-user.target diff --git a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt_%.bbappend b/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt_%.bbappend deleted file mode 100644 index 55d570fc7..000000000 --- a/meta-agl-bsp/meta-rcar-gen3-adas/recipes-bsp/ti-bt/ti-bt_%.bbappend +++ /dev/null @@ -1,18 +0,0 @@ -inherit systemd - -FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" - -SRC_URI += "file://ti-uim.service" - -SYSTEMD_SERVICE:${PN} = "ti-uim.service" - -PR = "r0" -PV = "0.1+git${SRCPV}" - -do_install:append() { - # We do not want the blacklist - rm -f ${D}/${sysconfdir}/modprobe.d/ti_bt.conf - - install -d ${D}${systemd_unitdir}/system/ - install -m 0644 ${WORKDIR}/ti-uim.service ${D}${systemd_unitdir}/system -} diff --git a/meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state.bbappend b/meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state.bbappend new file mode 100644 index 000000000..784560131 --- /dev/null +++ b/meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state.bbappend @@ -0,0 +1,3 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" + +PACKAGE_ARCH = "${MACHINE_ARCH}" diff --git a/meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state/asound.state b/meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state/asound.state new file mode 100644 index 000000000..8f20169ba --- /dev/null +++ b/meta-agl-bsp/meta-rockchip/recipes-bsp/alsa-state/alsa-state/asound.state @@ -0,0 +1,659 @@ +state.realtekrt5616co { + control.1 { + iface CARD + name 'Headphone Jack' + value true + comment { + access read + type BOOLEAN + count 1 + } + } + control.2 { + iface MIXER + name 'Receive PATH3 Source Select' + value 'From SDI3' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'From SDI0' + item.1 'From SDI1' + item.2 'From SDI2' + item.3 'From SDI3' + } + } + control.3 { + iface MIXER + name 'Receive PATH2 Source Select' + value 'From SDI2' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'From SDI0' + item.1 'From SDI1' + item.2 'From SDI2' + item.3 'From SDI3' + } + } + control.4 { + iface MIXER + name 'Receive PATH1 Source Select' + value 'From SDI1' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'From SDI0' + item.1 'From SDI1' + item.2 'From SDI2' + item.3 'From SDI3' + } + } + control.5 { + iface MIXER + name 'Receive PATH0 Source Select' + value 'From SDI0' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'From SDI0' + item.1 'From SDI1' + item.2 'From SDI2' + item.3 'From SDI3' + } + } + control.6 { + iface MIXER + name 'Transmit SDO3 Source Select' + value 'From PATH3' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'From PATH0' + item.1 'From PATH1' + item.2 'From PATH2' + item.3 'From PATH3' + } + } + control.7 { + iface MIXER + name 'Transmit SDO2 Source Select' + value 'From PATH2' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'From PATH0' + item.1 'From PATH1' + item.2 'From PATH2' + item.3 'From PATH3' + } + } + control.8 { + iface MIXER + name 'Transmit SDO1 Source Select' + value 'From PATH1' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'From PATH0' + item.1 'From PATH1' + item.2 'From PATH2' + item.3 'From PATH3' + } + } + control.9 { + iface MIXER + name 'Transmit SDO0 Source Select' + value 'From PATH0' + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 'From PATH0' + item.1 'From PATH1' + item.2 'From PATH2' + item.3 'From PATH3' + } + } + control.10 { + iface MIXER + name 'I2STDM Digital Loopback Mode' + value Disabled + comment { + access 'read write' + type ENUMERATED + count 1 + item.0 Disabled + item.1 Mode1 + item.2 Mode2 + item.3 'Mode2 Swap' + } + } + control.11 { + iface PCM + name 'PCM Read Wait Time MS' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 10000 (step 1)' + } + } + control.12 { + iface PCM + name 'PCM Write Wait Time MS' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 10000 (step 1)' + } + } + control.13 { + iface MIXER + name 'HP Playback Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.14 { + iface MIXER + name 'HPVOL Playback Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.15 { + iface MIXER + name 'HP Playback Volume' + value.0 31 + value.1 31 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 39' + dbmin -4650 + dbmax 1200 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.16 { + iface MIXER + name 'OUT Playback Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.17 { + iface MIXER + name 'OUT Channel Switch' + value.0 false + value.1 false + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.18 { + iface MIXER + name 'OUT Playback Volume' + value.0 31 + value.1 31 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 39' + dbmin -4650 + dbmax 1200 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.19 { + iface MIXER + name 'DAC1 Playback Volume' + value.0 175 + value.1 175 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 175' + dbmin -65625 + dbmax 0 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.20 { + iface MIXER + name 'IN1 Boost Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 8' + dbmin 0 + dbmax 5200 + dbvalue.0 0 + } + } + control.21 { + iface MIXER + name 'IN2 Boost Volume' + value 0 + comment { + access 'read write' + type INTEGER + count 1 + range '0 - 8' + dbmin 0 + dbmax 5200 + dbvalue.0 0 + } + } + control.22 { + iface MIXER + name 'IN Capture Volume' + value.0 23 + value.1 23 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 31' + dbmin -3450 + dbmax 1200 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.23 { + iface MIXER + name 'ADC Capture Switch' + value.0 true + value.1 true + comment { + access 'read write' + type BOOLEAN + count 2 + } + } + control.24 { + iface MIXER + name 'ADC Capture Volume' + value.0 47 + value.1 47 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 127' + dbmin -17625 + dbmax 30000 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.25 { + iface MIXER + name 'ADC Boost Volume' + value.0 0 + value.1 0 + comment { + access 'read write' + type INTEGER + count 2 + range '0 - 3' + dbmin 0 + dbmax 3600 + dbvalue.0 0 + dbvalue.1 0 + } + } + control.26 { + iface MIXER + name 'RECMIXL INL1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.27 { + iface MIXER + name 'RECMIXL BST2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.28 { + iface MIXER + name 'RECMIXL BST1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.29 { + iface MIXER + name 'RECMIXR INR1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.30 { + iface MIXER + name 'RECMIXR BST2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.31 { + iface MIXER + name 'RECMIXR BST1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.32 { + iface MIXER + name 'Stereo1 ADC MIXL ADC1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.33 { + iface MIXER + name 'Stereo1 ADC MIXR ADC1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.34 { + iface MIXER + name 'DAC MIXL Stereo ADC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.35 { + iface MIXER + name 'DAC MIXL INF1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.36 { + iface MIXER + name 'DAC MIXR Stereo ADC Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.37 { + iface MIXER + name 'DAC MIXR INF1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.38 { + iface MIXER + name 'Stereo DAC MIXL DAC L1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.39 { + iface MIXER + name 'Stereo DAC MIXL DAC R1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.40 { + iface MIXER + name 'Stereo DAC MIXR DAC R1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.41 { + iface MIXER + name 'Stereo DAC MIXR DAC L1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.42 { + iface MIXER + name 'OUT MIXL BST1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.43 { + iface MIXER + name 'OUT MIXL BST2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.44 { + iface MIXER + name 'OUT MIXL INL1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.45 { + iface MIXER + name 'OUT MIXL REC MIXL Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.46 { + iface MIXER + name 'OUT MIXL DAC L1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.47 { + iface MIXER + name 'OUT MIXR BST2 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.48 { + iface MIXER + name 'OUT MIXR BST1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.49 { + iface MIXER + name 'OUT MIXR INR1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.50 { + iface MIXER + name 'OUT MIXR REC MIXR Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.51 { + iface MIXER + name 'OUT MIXR DAC R1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.52 { + iface MIXER + name 'HPO MIX DAC1 Switch' + value true + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.53 { + iface MIXER + name 'HPO MIX HPVOL Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.54 { + iface MIXER + name 'LOUT MIX DAC L1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.55 { + iface MIXER + name 'LOUT MIX DAC R1 Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.56 { + iface MIXER + name 'LOUT MIX OUTVOL L Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } + control.57 { + iface MIXER + name 'LOUT MIX OUTVOL R Switch' + value false + comment { + access 'read write' + type BOOLEAN + count 1 + } + } +} diff --git a/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init.bbappend b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init.bbappend new file mode 100644 index 000000000..ab14bdbc2 --- /dev/null +++ b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init.bbappend @@ -0,0 +1,7 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" + +SRC_URI:append = " file://agl-compositor-rockchip.conf " + +do_install:append() { + install -m644 ${WORKDIR}/agl-compositor-rockchip.conf ${D}/${systemd_system_unitdir}/agl-compositor.service.d/agl-compositor-rockchip.conf +} diff --git a/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init/agl-compositor-rockchip.conf b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init/agl-compositor-rockchip.conf new file mode 100644 index 000000000..e85d7fa91 --- /dev/null +++ b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/agl-compositor-init/agl-compositor-rockchip.conf @@ -0,0 +1,2 @@ +[Service] +Environment=LD_PRELOAD=/usr/lib/libmali.so.1 diff --git a/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf.bbappend b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf.bbappend new file mode 100644 index 000000000..a7bebe3fc --- /dev/null +++ b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf.bbappend @@ -0,0 +1,7 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" + +SRC_URI:append = " \ + file://nanopct6_output.cfg \ +" + +WESTON_FRAGMENTS:append:nanopct6 = " nanopct6_output" diff --git a/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf/nanopct6_output.cfg b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf/nanopct6_output.cfg new file mode 100644 index 000000000..fbee86693 --- /dev/null +++ b/meta-agl-bsp/meta-rockchip/recipes-graphics/wayland/weston-ini-conf/nanopct6_output.cfg @@ -0,0 +1,7 @@ +[output] +name=HDMI-A-2 +mode=off + +[output] +name=DP-1 +transform=rotate-90 diff --git a/meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch b/meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch deleted file mode 100644 index 461df7a60..000000000 --- a/meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp/0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 7335a36d0b5c1c597566f9aa3f458a5b6817c3b4 Mon Sep 17 00:00:00 2001 -From: aurel32 <aurelien@aurel32.net> -Date: Fri, 22 Mar 2024 14:21:13 -0700 -Subject: [PATCH] PR #1644: unscaledcycleclock: remove RISC-V support - -Imported from GitHub PR https://github.com/abseil/abseil-cpp/pull/1644 - -Starting with Linux 6.6 [1], RDCYCLE is a privileged instruction on RISC-V and can't be used directly from userland. There is a sysctl option to change that as a transition period, but it will eventually disappear. - -The RDTIME instruction is another less accurate alternative, however its frequency varies from board to board, and there is currently now way to get its frequency from userland [2]. - -Therefore this patch just removes the code for unscaledcycleclock on RISC-V. Without processor specific implementation, abseil relies on std::chrono::steady_clock::now().time_since_epoch() which is basically a wrapper around clock_gettime (CLOCK_MONOTONIC), which in turns use __vdso_clock_gettime(). On RISC-V this VDSO is just a wrapper around RDTIME correctly scaled to use nanoseconds units. - -This fixes the testsuite on riscv64, tested on a VisionFive 2 board. - -[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc4c07c89aada16229084eeb93895c95b7eabaa3 -[2] https://github.com/abseil/abseil-cpp/pull/1631 -Merge 43356a2548cfde76e164d446cb69004b488c6a71 into 76f8011beabdaee872b5fde7546e02407b220cb1 - -Merging this change closes #1644 - -COPYBARA_INTEGRATE_REVIEW=https://github.com/abseil/abseil-cpp/pull/1644 from aurel32:rv64-no-unscaledcycleclock 43356a2548cfde76e164d446cb69004b488c6a71 -PiperOrigin-RevId: 618286262 -Change-Id: Ie4120a727e7d0bb185df6e06ea145c780ebe6652 - -Upstream-Status: Backport [https://github.com/abseil/abseil-cpp/commit/7335a36d] -[Adapted to apply on top of meta-oe's patch stack] -Signed-off-by: Scott Murray <scott.murray@konsulko.com> ---- - absl/base/internal/unscaledcycleclock.cc | 12 ------------ - absl/base/internal/unscaledcycleclock_config.h | 5 ++--- - 2 files changed, 2 insertions(+), 15 deletions(-) - -diff --git a/absl/base/internal/unscaledcycleclock.cc b/absl/base/internal/unscaledcycleclock.cc -index f11fecb3..103b4f6a 100644 ---- a/absl/base/internal/unscaledcycleclock.cc -+++ b/absl/base/internal/unscaledcycleclock.cc -@@ -121,18 +121,6 @@ double UnscaledCycleClock::Frequency() { - return aarch64_timer_frequency; - } - --#elif defined(__riscv) -- --int64_t UnscaledCycleClock::Now() { -- int64_t virtual_timer_value; -- asm volatile("rdcycle %0" : "=r"(virtual_timer_value)); -- return virtual_timer_value; --} -- --double UnscaledCycleClock::Frequency() { -- return base_internal::NominalCPUFrequency(); --} -- - #elif defined(_M_IX86) || defined(_M_X64) - - #pragma intrinsic(__rdtsc) -diff --git a/absl/base/internal/unscaledcycleclock_config.h b/absl/base/internal/unscaledcycleclock_config.h -index 5e232c1a..83552fc5 100644 ---- a/absl/base/internal/unscaledcycleclock_config.h -+++ b/absl/base/internal/unscaledcycleclock_config.h -@@ -22,7 +22,6 @@ - // The following platforms have an implementation of a hardware counter. - #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \ - ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \ -- defined(__riscv) || \ - defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC)) - #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1 - #else -@@ -54,8 +53,8 @@ - #if ABSL_USE_UNSCALED_CYCLECLOCK - // This macro can be used to test if UnscaledCycleClock::Frequency() - // is NominalCPUFrequency() on a particular platform. --#if (defined(__i386__) || defined(__x86_64__) || defined(__riscv) || \ -- defined(_M_IX86) || defined(_M_X64)) -+#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || \ -+ defined(_M_X64)) - #define ABSL_INTERNAL_UNSCALED_CYCLECLOCK_FREQUENCY_IS_CPU_FREQUENCY - #endif - #endif --- -2.44.0 - diff --git a/meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp_20240116.2.bbappend b/meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp_20240116.2.bbappend deleted file mode 100644 index 2bf47126f..000000000 --- a/meta-agl-bsp/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp_20240116.2.bbappend +++ /dev/null @@ -1,3 +0,0 @@ -FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" - -SRC_URI += "file://0001-PR-1644-unscaledcycleclock-remove-RISC-V-support.patch" diff --git a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/files/0001-XEN-on-RPi4-1GB-lmitation-workaround-XEN-tries-to-al.patch b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/files/0001-XEN-on-RPi4-1GB-lmitation-workaround-XEN-tries-to-al.patch deleted file mode 100644 index d83c65257..000000000 --- a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/files/0001-XEN-on-RPi4-1GB-lmitation-workaround-XEN-tries-to-al.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 2701d65271686dff0cb39ab7da1e821f5dede61e Mon Sep 17 00:00:00 2001 -From: Leonid Lazarev <leonid.lazarev@mera.com> -Date: Tue, 21 Apr 2020 17:28:16 +0300 -Subject: [PATCH] XEN on RPi4 1GB lmitation workaround: XEN tries to allocated - the memopry for dom0 within first 4GB, but for some reason raspberry pi only - allows to load kernel from 1st GB. Push XEN to allocate first bank for dom0 - from 1st GB - ---- - xen/arch/arm/domain_build.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c -index dd9c3b73ba..8501a8c8aa 100644 ---- a/xen/arch/arm/domain_build.c -+++ b/xen/arch/arm/domain_build.c -@@ -281,7 +281,7 @@ static void __init allocate_memory_11(struct domain *d, - */ - while ( order >= min_low_order ) - { -- for ( bits = order ; bits <= (lowmem ? 32 : PADDR_BITS); bits++ ) -+ for ( bits = order ; bits <= (lowmem ? 30 : PADDR_BITS); bits++ ) - { - pg = alloc_domheap_pages(d, order, MEMF_bits(bits)); - if ( pg != NULL ) --- -2.17.1 - diff --git a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-mkimage-rpi4.bb b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-mkimage-rpi4.bb deleted file mode 100644 index b857cb19f..000000000 --- a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-mkimage-rpi4.bb +++ /dev/null @@ -1,29 +0,0 @@ -DESCRIPTION = "Xen hypervisor u-boot image" -LICENSE = "GPL-2.0-only" -SECTION = "console/tools" - -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" - - - -ALLOW_EMPTY:${PN} = "1" -FILES:${PN} = "" -S = "${WORKDIR}" - -DEPENDS = "u-boot-mkimage-native " - -# Only for aarch64 -COMPATIBLE_MACHINE = "(-)" -COMPATIBLE_MACHINE:aarch64 = "(.*)" - -PACKAGE_ARCH = "${MACHINE_ARCH}" - -do_configure[noexec] = "1" -do_deploy[noexec] = "1" - -do_compile[depends] += "xen:do_deploy" - -# Uboot compatible image -do_compile () { - uboot-mkimage -A arm64 -C none -T kernel -a 0x48080000 -e 0x48080000 -n "XEN" -d ${DEPLOY_DIR_IMAGE}/xen-${MACHINE} ${DEPLOY_DIR_IMAGE}/xen-${MACHINE}.uImage -} diff --git a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-tools_git.bbappend b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-tools_git.bbappend deleted file mode 100644 index a67200618..000000000 --- a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen-tools_git.bbappend +++ /dev/null @@ -1,11 +0,0 @@ - -# make the package specific to the machine for now -PACKAGE_ARCH = "${MACHINE_ARCH}" - -# rpi4 -LIC_FILES_CHKSUM:raspberrypi4 = "file://COPYING;md5=4295d895d4b5ce9d070263d52f030e49" -XEN_REL:raspberrypi4 = "4.13" -SRCREV:raspberrypi4 = "721f2c323ca55c77857c93e7275b4a93a0e15e1f" -SRC_URI:raspberrypi4 = " \ - git://xenbits.xen.org/xen.git;branch=${XEN_BRANCH} \ - " diff --git a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen_git.bbappend b/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen_git.bbappend deleted file mode 100644 index 2d63e1841..000000000 --- a/meta-agl-bsp/virtualization-layer/recipes-extended/xen/xen_git.bbappend +++ /dev/null @@ -1,18 +0,0 @@ -FILESEXTRAPATHS:prepend := "${THISDIR}/files:" - -# make the package machine-specific -PACKAGE_ARCH = "${MACHINE_ARCH}" - -# rpi4 specifics -LIC_FILES_CHKSUM:raspberrypi4 = "file://COPYING;md5=4295d895d4b5ce9d070263d52f030e49" -XEN_REL:raspberrypi4 = "4.13" - -SRCREV:raspberrypi4 = "721f2c323ca55c77857c93e7275b4a93a0e15e1f" -SRC_URI:append:raspberrypi4 = " file://0001-XEN-on-RPi4-1GB-lmitation-workaround-XEN-tries-to-al.patch" - -#due to incorrect xen binary preparation in external library, we add additional deploy -do_deploy:append:raspberrypi4() { - if [ -f ${B}/xen/xen ]; then - install -m 0644 ${B}/xen/xen ${DEPLOYDIR}/xen-${MACHINE} - fi -} diff --git a/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa/0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch b/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa/0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch deleted file mode 100644 index d27696056..000000000 --- a/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa/0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 737ccb36c0faf275037e5e96a263c89a44886ddd Mon Sep 17 00:00:00 2001 -From: Marius Vlad <marius.vlad@collabora.com> -Date: Mon, 19 Dec 2022 11:51:28 +0200 -Subject: [PATCH] virgl/virgl_driinfo.h.in: Disable by default emulated BGRA - - and swizzling - -Workaround in place for virtio aarch64 to avoid graphical artefacts when -first time booting up on PVR host driver. - -Introduced with patch 'virgl: Always enable emulated BGRA and swizzling -unless specifically told not to' in mesa-20.3.0. - -Signed-off-by: Marius Vlad <marius.vlad@collabora.com> ---- - src/gallium/drivers/virgl/virgl_driinfo.h.in | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/gallium/drivers/virgl/virgl_driinfo.h.in b/src/gallium/drivers/virgl/virgl_driinfo.h.in -index ec688f5..244021e 100644 ---- a/src/gallium/drivers/virgl/virgl_driinfo.h.in -+++ b/src/gallium/drivers/virgl/virgl_driinfo.h.in -@@ -8,8 +8,8 @@ - // 5. Implement the tweak in virglrenderer - DRI_CONF_SECTION_MISCELLANEOUS - DRI_CONF_FORMAT_L8_SRGB_ENABLE_READBACK(false) -- DRI_CONF_GLES_EMULATE_BGRA(true) -- DRI_CONF_GLES_APPLY_BGRA_DEST_SWIZZLE(true) -+ DRI_CONF_GLES_EMULATE_BGRA(false) -+ DRI_CONF_GLES_APPLY_BGRA_DEST_SWIZZLE(false) - DRI_CONF_GLES_SAMPLES_PASSED_VALUE(1024, 1, 400000000) - - /* --- -2.30.2 - diff --git a/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_24.%.bbappend b/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_24.%.bbappend deleted file mode 100644 index 0a6606ebf..000000000 --- a/meta-agl-bsp/virtualization-layer/recipes-graphics/mesa/mesa_24.%.bbappend +++ /dev/null @@ -1,3 +0,0 @@ -FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" - -SRC_URI += "file://0001-virgl-virgl_driinfo.h.in-Disable-by-default-emulated.patch" diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend deleted file mode 100644 index 5970414eb..000000000 --- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto-dev.bbappend +++ /dev/null @@ -1,10 +0,0 @@ -FILESEXTRAPATHS:prepend := "${THISDIR}/linux-yocto:" - -SRC_URI:append:virtio-all = " \ - git://gerrit.automotivelinux.org/gerrit/src/agl-yocto-kernel-meta.git;protocol=https;type=kmeta;name=agl-meta;destsuffix=agl-kernel-meta;branch=master \ - file://virtio-aarch64-${LINUX_KERNEL_TYPE}.scc \ -" - -SRCREV_agl-meta = "c5008f4ba9e1b9f11c1014b53477079e605ceab7" - -COMPATIBLE_MACHINE:virtio-aarch64 = "virtio-aarch64" diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc deleted file mode 100644 index 2d1570e9f..000000000 --- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-aarch64-standard.scc +++ /dev/null @@ -1,13 +0,0 @@ -# SPDX-License-Identifier: MIT -define KMACHINE virtio-aarch64 -define KTYPE standard -define KARCH arm64 - -include ktypes/standard/standard.scc nopatch -include arch/arm/aarch64.scc -include cfg/8250.scc -include cfg/virtio.scc -include bsp/virtio/agl-virtio.scc - -# enable the ability to run 32 bit apps -include arch/arm/32bit-compat.scc diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_6.6.bbappend b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_6.6.bbappend index 6952436a3..15cb9ea98 100644 --- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_6.6.bbappend +++ b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto_6.6.bbappend @@ -1,17 +1,6 @@ -FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" - -# Cannot just append to SRC_URI, as the metadata interferes with the -# AGL config fragment scheme -AGL_KERNEL_SRC:prepend:virtio-all = " \ - git://gerrit.automotivelinux.org/gerrit/src/agl-yocto-kernel-meta.git;protocol=https;type=kmeta;name=agl-meta;destsuffix=agl-kernel-meta;branch=kernel-5.15 \ - file://virtio-aarch64-${LINUX_KERNEL_TYPE}.scc \ -" - -SRCREV_agl-meta = "4deb7357eab5962b0553a5ad1f11be5ac35f9da9" - -AGL_KCONFIG_FRAGMENTS:append:virtio-all = " \ - virtio-drm.cfg \ - virtio-pci.cfg \ -" - +# NOTE: Has to be in bbappend itself because BitBake does not fully +# parse recipes when checking it COMPATIBLE_MACHINE:virtio-aarch64 = "virtio-aarch64" + +# Reuse base qemuarm64 machine to avoid needing our own kernel metadata +KMACHINE:virtio-aarch64 = "qemuarm64"
\ No newline at end of file diff --git a/meta-agl-core/conf/distro/poky-agl.conf b/meta-agl-core/conf/distro/poky-agl.conf index cd18f4c39..0810fe076 100644 --- a/meta-agl-core/conf/distro/poky-agl.conf +++ b/meta-agl-core/conf/distro/poky-agl.conf @@ -9,9 +9,9 @@ DISTRO_NAME = "Automotive Grade Linux" # Release flags -DISTRO_CODENAME = "ricefish" +DISTRO_CODENAME = "salmon" AGL_BRANCH = "master" -AGLVERSION = "17.92.0" +AGLVERSION = "18.90.0" # switch devel/release #AGLRELEASETYPE ?= "agldevelopment" @@ -29,8 +29,8 @@ DISTRO_BRANCH_VERSION_TAG = "${DISTRO_CODENAME}/${@'${DISTRO_VERSION}'.replace(' # reproducible builds: # Set the desired timestamps # E.g. update for (major) releases -export SOURCE_DATE_EPOCH = "1718892136" -REPRODUCIBLE_TIMESTAMP_ROOTFS = "1718892136" +export SOURCE_DATE_EPOCH = "1721815278" +REPRODUCIBLE_TIMESTAMP_ROOTFS = "1721815278" # SDK @@ -61,7 +61,7 @@ VIRTUAL-RUNTIME_initscripts = "" VIRTUAL-RUNTIME_base-utils-syslog = "" # network manager to use (possible values: systemd, connman) -VIRTUAL-RUNTIME_net_manager = "connman" +VIRTUAL-RUNTIME_net_manager ?= "connman" QEMU_TARGETS ?= "arm aarch64 i386 x86_64 riscv64" diff --git a/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc b/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc index 9681329be..ec64cedca 100644 --- a/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc +++ b/meta-agl-core/recipes-core/systemd/systemd_aglcore.inc @@ -12,8 +12,9 @@ PACKAGECONFIG:append = " \ iptc \ " -# SPEC-737: connmand also has a NTP client which races with systemd-timesyncd -PACKAGECONFIG:remove = "timesyncd" +PACKAGECONFIG:remove = " \ + ${@bb.utils.contains('VIRTUAL-RUNTIME_net_manager','systemd','','timesyncd',d)} \ +" # Enable systemd-coredump when agl-devel is set on PACKAGECONFIG:append:agl-devel = " coredump" diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb b/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb index 41240309b..79b13df71 100644 --- a/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb +++ b/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=fac6abe0003c4d142ff8fa1f18316df0" DEPENDS = "wayland wayland-protocols wayland-native weston" SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/agl-compositor.git;protocol=https;branch=${AGL_BRANCH}" -SRCREV = "18e93caca8ad397d504215d673765871b2c88f25" +SRCREV = "c8ffca8f9c67114ca424b88df0740943fe7768e3" AGL_BRANCH:aglnext = "next" SRCREV:aglnext = "${AUTOREV}" diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0001-backend-drm-don-t-leak-gem_handle_refcnt-in-drm_dest.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-backend-drm-don-t-leak-gem_handle_refcnt-in-drm_dest.patch new file mode 100644 index 000000000..0e3ab7613 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston/0001-backend-drm-don-t-leak-gem_handle_refcnt-in-drm_dest.patch @@ -0,0 +1,27 @@ +From fb60f9c16ce8865fbdcd181419f44b72af1aa3c2 Mon Sep 17 00:00:00 2001 +From: Ray Smith <rsmith@brightsign.biz> +Date: Tue, 19 Dec 2023 11:43:55 +0000 +Subject: [PATCH 1/2] backend-drm: don't leak gem_handle_refcnt in drm_destroy + +Signed-off-by: Ray Smith <rsmith@brightsign.biz> +--- + libweston/backend-drm/drm.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c +index 8092789..fcececb 100644 +--- a/libweston/backend-drm/drm.c ++++ b/libweston/backend-drm/drm.c +@@ -3364,6 +3364,9 @@ drm_destroy(struct weston_backend *backend) + weston_launcher_close(ec->launcher, device->drm.fd); + weston_launcher_destroy(ec->launcher); + ++ if (device->gem_handle_refcnt) ++ hash_table_destroy(device->gem_handle_refcnt); ++ + free(device->drm.filename); + free(device); + free(b); +-- +2.43.0 + diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Add-paint-node-destruction-into-weston_lay.patch b/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Add-paint-node-destruction-into-weston_lay.patch deleted file mode 100644 index 19eadcf7f..000000000 --- a/meta-agl-core/recipes-graphics/wayland/weston/0001-libweston-Add-paint-node-destruction-into-weston_lay.patch +++ /dev/null @@ -1,60 +0,0 @@ -From cfde02d47a503cbfd0629bbfe0cb776686af8a91 Mon Sep 17 00:00:00 2001 -From: Marius Vlad <marius.vlad@collabora.com> -Date: Tue, 9 Apr 2024 18:34:22 +0300 -Subject: [PATCH] libweston: Add paint node destruction into - weston_layer_entry_remove() - -This prevents a potential crash where users of -weston_layer_entry_insert/layer_entry_remove() would see when moving -views into a NULL layer (effectively unmapping the surface/view). - -Users that have migrated to the weston_view_move_to_layer() are immune -to this issue because that takes care paint node destruction. - -Signed-off-by: Marius Vlad <marius.vlad@collabora.com> ---- - libweston/compositor.c | 17 ++++++++++------- - 1 file changed, 10 insertions(+), 7 deletions(-) - -diff --git a/libweston/compositor.c b/libweston/compositor.c -index bb29b83b5..ea257bb90 100644 ---- a/libweston/compositor.c -+++ b/libweston/compositor.c -@@ -3980,17 +3980,10 @@ weston_view_move_to_layer(struct weston_view *view, - struct weston_layer_entry *layer) - { - bool was_mapped = view->is_mapped; -- struct weston_paint_node *pnode, *pntmp; - - if (layer == &view->layer_link) - return; - -- /* Remove all paint nodes because we have no idea what a layer change -- * does to view visibility on any output. -- */ -- wl_list_for_each_safe(pnode, pntmp, &view->paint_node_list, view_link) -- weston_paint_node_destroy(pnode); -- - view->surface->compositor->view_list_needs_rebuild = true; - - /* Damage the view's old region, and remove it from the layer. */ -@@ -4020,6 +4013,16 @@ weston_view_move_to_layer(struct weston_view *view, - WL_EXPORT void - weston_layer_entry_remove(struct weston_layer_entry *entry) - { -+ struct weston_paint_node *pnode, *pntmp; -+ struct weston_view *view; -+ -+ /* Remove all paint nodes because we have no idea what a layer change -+ * does to view visibility on any output. -+ */ -+ view = container_of(entry, struct weston_view, layer_link); -+ wl_list_for_each_safe(pnode, pntmp, &view->paint_node_list, view_link) -+ weston_paint_node_destroy(pnode); -+ - wl_list_remove(&entry->link); - wl_list_init(&entry->link); - entry->layer = NULL; --- -2.43.0 - diff --git a/meta-agl-core/recipes-graphics/wayland/weston/0002-backend-drm-always-create-gem_handle_refcnt-hash-tab.patch b/meta-agl-core/recipes-graphics/wayland/weston/0002-backend-drm-always-create-gem_handle_refcnt-hash-tab.patch new file mode 100644 index 000000000..0ae82088a --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston/0002-backend-drm-always-create-gem_handle_refcnt-hash-tab.patch @@ -0,0 +1,56 @@ +From 10fcfd66069c774e28f67b18afd329e4bcf9f5b3 Mon Sep 17 00:00:00 2001 +From: Ray Smith <rsmith@brightsign.biz> +Date: Tue, 19 Dec 2023 11:45:45 +0000 +Subject: [PATCH 2/2] backend-drm: always create gem_handle_refcnt hash table + +Devices created via drm_device_create have this hash table, but those +created via drm_backend_create don't. + +Signed-off-by: Ray Smith <rsmith@brightsign.biz> +--- + libweston/backend-drm/drm.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c +index fcececb..9d6a9cf 100644 +--- a/libweston/backend-drm/drm.c ++++ b/libweston/backend-drm/drm.c +@@ -3364,8 +3364,7 @@ drm_destroy(struct weston_backend *backend) + weston_launcher_close(ec->launcher, device->drm.fd); + weston_launcher_destroy(ec->launcher); + +- if (device->gem_handle_refcnt) +- hash_table_destroy(device->gem_handle_refcnt); ++ hash_table_destroy(device->gem_handle_refcnt); + + free(device->drm.filename); + free(device); +@@ -3867,10 +3866,13 @@ drm_backend_create(struct weston_compositor *compositor, + + device = zalloc(sizeof *device); + if (device == NULL) +- return NULL; ++ goto err_backend; + device->state_invalid = true; + device->drm.fd = -1; + device->backend = b; ++ device->gem_handle_refcnt = hash_table_create(); ++ if (!device->gem_handle_refcnt) ++ goto err_device; + + b->drm = device; + wl_list_init(&b->kms_list); +@@ -4108,6 +4110,10 @@ err_compositor: + if (b->gbm) + gbm_device_destroy(b->gbm); + #endif ++ hash_table_destroy(device->gem_handle_refcnt); ++err_device: ++ free(device); ++err_backend: + free(b); + return NULL; + } +-- +2.43.0 + diff --git a/meta-agl-core/recipes-graphics/wayland/weston_13.0_aglcore.inc b/meta-agl-core/recipes-graphics/wayland/weston_13.0_aglcore.inc index 843a068b4..0b5dae715 100644 --- a/meta-agl-core/recipes-graphics/wayland/weston_13.0_aglcore.inc +++ b/meta-agl-core/recipes-graphics/wayland/weston_13.0_aglcore.inc @@ -4,7 +4,8 @@ PACKAGECONFIG:append = "${@bb.utils.contains('DISTRO_FEATURES', 'weston-remoting SRC_URI:append = " \ file://0001-clients-Handle-missing-pointer_surface-is-there-s-no.patch \ - file://0001-libweston-Add-paint-node-destruction-into-weston_lay.patch \ + file://0001-backend-drm-don-t-leak-gem_handle_refcnt-in-drm_dest.patch \ + file://0002-backend-drm-always-create-gem_handle_refcnt-hash-tab.patch \ " diff --git a/meta-agl-core/recipes-kernel/linux/linux-agl-config-virtio.inc b/meta-agl-core/recipes-kernel/linux/linux-agl-config-virtio.inc new file mode 100644 index 000000000..e0d30b1f6 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux-agl-config-virtio.inc @@ -0,0 +1,8 @@ +AGL_KCONFIG_FRAGMENTS += " \ + virtio-${TUNE_ARCH} \ + virtio-drm.cfg \ + virtio-pci.cfg \ + virtio-scmi.cfg \ + sound-hda.cfg \ + virtio-snd.cfg \ +" diff --git a/meta-agl-core/recipes-kernel/linux/linux-agl-config.inc b/meta-agl-core/recipes-kernel/linux/linux-agl-config.inc index 4799a6180..5cf008a77 100644 --- a/meta-agl-core/recipes-kernel/linux/linux-agl-config.inc +++ b/meta-agl-core/recipes-kernel/linux/linux-agl-config.inc @@ -71,10 +71,6 @@ AGL_KCONFIG_FRAGMENTS:append:qemuall = " \ qemu-drm.cfg \ " -AGL_KCONFIG_FRAGMENTS:append:virtio-all = " \ - sound-hda.cfg \ -" - # Configuration for using the ARM virt machine (and not versatilepb) AGL_KCONFIG_FRAGMENTS:append:qemuarm = " qemuarm.cfg" diff --git a/meta-agl-core/recipes-kernel/linux/linux-agl.inc b/meta-agl-core/recipes-kernel/linux/linux-agl.inc index c318716fe..f41e35bc2 100644 --- a/meta-agl-core/recipes-kernel/linux/linux-agl.inc +++ b/meta-agl-core/recipes-kernel/linux/linux-agl.inc @@ -3,7 +3,8 @@ DEPENDS += "kern-tools-native" -include linux-agl-config.inc +require linux-agl-config.inc +include ${@bb.utils.contains('AGL_FEATURES', 'agl-virtio-guest', 'linux-agl-config-virtio.inc', '', d)} # returns all the elements from the src uri that are .cfg files def find_cfgs(d): diff --git a/meta-agl-core/recipes-kernel/linux/linux/virtio-aarch64.cfg b/meta-agl-core/recipes-kernel/linux/linux/virtio-aarch64.cfg new file mode 100644 index 000000000..25381e133 --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/virtio-aarch64.cfg @@ -0,0 +1,29 @@ +# SPDX-License-Identifier: MIT +# +# ARM64 +# +CONFIG_ARM64=y +CONFIG_64BIT=y + +# +# Bus support +# +CONFIG_ARM_AMBA=y + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y + +# +# RTC +# +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" + +# +# on-CPU RTC drivers +# +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_PL031=y diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-drm.cfg b/meta-agl-core/recipes-kernel/linux/linux/virtio-drm.cfg index 2facc345e..2facc345e 100644 --- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-drm.cfg +++ b/meta-agl-core/recipes-kernel/linux/linux/virtio-drm.cfg diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg b/meta-agl-core/recipes-kernel/linux/linux/virtio-pci.cfg index bbcaca312..bbcaca312 100644 --- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-pci.cfg +++ b/meta-agl-core/recipes-kernel/linux/linux/virtio-pci.cfg diff --git a/meta-agl-core/recipes-kernel/linux/linux/virtio-scmi.cfg b/meta-agl-core/recipes-kernel/linux/linux/virtio-scmi.cfg new file mode 100644 index 000000000..5ae01938e --- /dev/null +++ b/meta-agl-core/recipes-kernel/linux/linux/virtio-scmi.cfg @@ -0,0 +1,25 @@ +# Enable ARM_SCMI_PROTOCOL ("ARM System Control and Management Interface (SCMI) +# Message Protocol") config located in menu +# +# -> Device Drivers +# -> Firmware Drivers +# -> ARM System Control and Management Interface Protocol +# +# After that, in the same menu enabled: +# +# * ARM_SCMI_TRANSPORT_VIRTIO ("SCMI transport based on VirtIO") +# +# and disabled not used features: +# +# * ARM_SCMI_TRANSPORT_SMC ("SCMI transport based on SMC") +# * ARM_SCMI_POWER_DOMAIN ("SCMI power domain driver") + +CONFIG_ARM_SCMI_PROTOCOL=y +CONFIG_ARM_SCMI_HAVE_TRANSPORT=y +CONFIG_ARM_SCMI_HAVE_MSG=y +# CONFIG_ARM_SCMI_TRANSPORT_SMC is not set +CONFIG_ARM_SCMI_TRANSPORT_VIRTIO=y +# CONFIG_ARM_SCMI_POWER_DOMAIN is not set +# CONFIG_SENSORS_ARM_SCMI is not set +# CONFIG_COMMON_CLK_SCMI is not set +CONFIG_IIO_SCMI=y diff --git a/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch new file mode 100644 index 000000000..72b924337 --- /dev/null +++ b/meta-agl-core/recipes-multimedia/gstreamer1.0-plugins-bad/files/rcar-gen3/0001-Added-appid-and-title-support.patch @@ -0,0 +1,166 @@ +From df64f7e34d01a03957d78317ef9a1cf6d6b95055 Mon Sep 17 00:00:00 2001 +From: Marius Vlad <marius.vlad@collabora.com> +Date: Wed, 9 Aug 2023 14:34:19 +0300 +Subject: [PATCH] Added appid and title support + +Bug-AGL: SPEC-4870 +Signed-off-by: Marius Vlad <marius.vlad@collabora.com> +--- + ext/wayland/gstwaylandsink.c | 43 ++++++++++++++++++++++++++++++++++-- + ext/wayland/gstwaylandsink.h | 2 ++ + ext/wayland/wlwindow.c | 10 ++++++++- + ext/wayland/wlwindow.h | 2 +- + 4 files changed, 53 insertions(+), 4 deletions(-) + +diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c +index 4918154..f743cf2 100644 +--- a/ext/wayland/gstwaylandsink.c ++++ b/ext/wayland/gstwaylandsink.c +@@ -66,7 +66,9 @@ enum + PROP_DISPLAY, + PROP_FULLSCREEN, + PROP_USE_SUBSURFACE, +- PROP_SUPPRESS_INTERLACE ++ PROP_SUPPRESS_INTERLACE, ++ PROP_APP_ID, ++ PROP_TITLE + }; + + #define DEFAULT_USE_SUBSURFACE TRUE +@@ -229,6 +231,16 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass) + DEFAULT_SUPPRESS_INTERLACE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + ++ g_object_class_install_property (gobject_class, PROP_APP_ID, ++ g_param_spec_string ("appid", "Top-level application id", "Wayland " ++ "appid, as xdg_shell::set_app_id", ++ NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ g_object_class_install_property (gobject_class, PROP_TITLE, ++ g_param_spec_string ("title", "Top-level title", "Wayland " ++ "title, xdg_shell::set_title", ++ NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ + gst_type_mark_as_plugin_api (GST_TYPE_WAYLAND_VIDEO, 0); + } + +@@ -266,6 +278,16 @@ gst_wayland_sink_get_property (GObject * object, + g_value_set_string (value, sink->display_name); + GST_OBJECT_UNLOCK (sink); + break; ++ case PROP_APP_ID: ++ GST_OBJECT_LOCK (sink); ++ g_value_set_string (value, sink->app_id); ++ GST_OBJECT_UNLOCK (sink); ++ break; ++ case PROP_TITLE: ++ GST_OBJECT_LOCK (sink); ++ g_value_set_string (value, sink->title); ++ GST_OBJECT_UNLOCK (sink); ++ break; + case PROP_FULLSCREEN: + GST_OBJECT_LOCK (sink); + g_value_set_boolean (value, sink->fullscreen); +@@ -298,6 +320,16 @@ gst_wayland_sink_set_property (GObject * object, + sink->display_name = g_value_dup_string (value); + GST_OBJECT_UNLOCK (sink); + break; ++ case PROP_APP_ID: ++ GST_OBJECT_LOCK (sink); ++ sink->app_id = g_value_dup_string (value); ++ GST_OBJECT_UNLOCK (sink); ++ break; ++ case PROP_TITLE: ++ GST_OBJECT_LOCK (sink); ++ sink->title = g_value_dup_string (value); ++ GST_OBJECT_UNLOCK (sink); ++ break; + case PROP_FULLSCREEN: + GST_OBJECT_LOCK (sink); + gst_wayland_sink_set_fullscreen (sink, g_value_get_boolean (value)); +@@ -331,12 +363,18 @@ gst_wayland_sink_finalize (GObject * object) + gst_buffer_unref (sink->last_buffer); + if (sink->display) + g_object_unref (sink->display); ++ if (sink->title) ++ g_object_unref (sink->title); ++ if (sink->app_id) ++ g_object_unref (sink->app_id); + if (sink->window) + g_object_unref (sink->window); + if (sink->pool) + gst_object_unref (sink->pool); + + g_free (sink->display_name); ++ g_free (sink->title); ++ g_free (sink->app_id); + + g_mutex_clear (&sink->display_lock); + g_mutex_clear (&sink->render_lock); +@@ -768,7 +806,8 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) + if (!sink->window) { + /* if we were not provided a window, create one ourselves */ + sink->window = gst_wl_window_new_toplevel (sink->display, +- &sink->video_info, sink->fullscreen, &sink->render_lock); ++ &sink->video_info, sink->fullscreen, sink->app_id, sink->title, ++ &sink->render_lock); + g_signal_connect_object (sink->window, "closed", + G_CALLBACK (on_window_closed), sink, 0); + } +diff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h +index 46ea538..e6c94ae 100644 +--- a/ext/wayland/gstwaylandsink.h ++++ b/ext/wayland/gstwaylandsink.h +@@ -64,6 +64,8 @@ struct _GstWaylandSink + gboolean fullscreen; + + gchar *display_name; ++ gchar *app_id; ++ gchar *title; + + gboolean redraw_pending; + GMutex render_lock; +diff --git a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c +index 3aace87..16faec8 100644 +--- a/ext/wayland/wlwindow.c ++++ b/ext/wayland/wlwindow.c +@@ -255,7 +255,7 @@ gst_wl_window_ensure_fullscreen (GstWlWindow * window, gboolean fullscreen) + + GstWlWindow * + gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, +- gboolean fullscreen, GMutex * render_lock) ++ gboolean fullscreen, gchar *app_id, gchar *title, GMutex * render_lock) + { + GstWlWindow *window; + +@@ -288,6 +288,14 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, + + /* Finally, commit the xdg_surface state as toplevel */ + window->configured = FALSE; ++ if (app_id) ++ xdg_toplevel_set_app_id (window->xdg_toplevel, app_id); ++ else ++ xdg_toplevel_set_app_id (window->xdg_toplevel, "ext.wayland.waylandsink"); ++ if (title) ++ xdg_toplevel_set_title (window->xdg_toplevel, title); ++ else ++ xdg_toplevel_set_title (window->xdg_toplevel, "ext.wayland.waylandsink"); + wl_surface_commit (window->area_surface); + wl_display_flush (display->display); + +diff --git a/ext/wayland/wlwindow.h b/ext/wayland/wlwindow.h +index 034a5a5..6b525c8 100644 +--- a/ext/wayland/wlwindow.h ++++ b/ext/wayland/wlwindow.h +@@ -84,7 +84,7 @@ GType gst_wl_window_get_type (void); + void gst_wl_window_ensure_fullscreen (GstWlWindow * window, + gboolean fullscreen); + GstWlWindow *gst_wl_window_new_toplevel (GstWlDisplay * display, +- const GstVideoInfo * info, gboolean fullscreen, GMutex * render_lock); ++ const GstVideoInfo * info, gboolean fullscreen, gchar * app_id, gchar *title, GMutex * render_lock); + GstWlWindow *gst_wl_window_new_in_surface (GstWlDisplay * display, + struct wl_surface * parent, GMutex * render_lock); + +-- +2.35.1 + diff --git a/meta-agl-flutter/conf/include/agl-flutter.inc b/meta-agl-flutter/conf/include/agl-flutter.inc index 38db25e86..6d60bc4a2 100644 --- a/meta-agl-flutter/conf/include/agl-flutter.inc +++ b/meta-agl-flutter/conf/include/agl-flutter.inc @@ -1,3 +1,3 @@ AGL_FEATURES += "agl-flutter" -FLUTTER_SDK_TAG = "3.19.3" +FLUTTER_SDK_TAG = "3.24.2" diff --git a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery/flutter-gallery.service b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery/flutter-gallery.service deleted file mode 100644 index 0b29c3f82..000000000 --- a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery/flutter-gallery.service +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Requires=agl-compositor.service -After=agl-compositor.service - -[Service] -User=agl-driver -EnvironmentFile=/etc/default/flutter -EnvironmentFile=-/etc/default/flutter-gallery -Environment=XDG_RUNTIME_DIR=/run/user/1001/ -ExecStart=/usr/bin/flutter-auto --b=/usr/share/flutter/flutter-gallery/${FLUTTER_VERSION}/${FLUTTER_RUNTIME} --f --window-type=BG --xdg-shell-app-id=flutter-gallery - -[Install] -WantedBy=graphical.target diff --git a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery_aglflutter.inc b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery_aglflutter.inc deleted file mode 100644 index 68c07f188..000000000 --- a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery_aglflutter.inc +++ /dev/null @@ -1,13 +0,0 @@ -FILESEXTRAPATHS:prepend := "${THISDIR}/flutter-gallery:" - -SRC_URI += "file://flutter-gallery.service" - -inherit systemd - -do_install:append() { - install -D -m 0644 ${WORKDIR}/${BPN}.service ${D}${systemd_system_unitdir}/${BPN}.service -} - -RDEPENDS:${PN} += "agl-flutter-env" - -SYSTEMD_SERVICE:${PN} = "flutter-gallery.service" diff --git a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.service b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.service new file mode 100644 index 000000000..f3f4a94b1 --- /dev/null +++ b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.service @@ -0,0 +1,13 @@ +[Unit] +Requires=agl-compositor.service +After=agl-compositor.service + +[Service] +User=agl-driver +EnvironmentFile=/etc/default/flutter +EnvironmentFile=-/etc/default/flutter-samples-material-3-demo +Environment=XDG_RUNTIME_DIR=/run/user/1001/ +ExecStart=/usr/bin/flutter-auto -b /usr/share/flutter/flutter-samples-material-3-demo/${FLUTTER_VERSION}/${FLUTTER_RUNTIME} -xdg-shell-app-id flutter-samples-material-3-demo + +[Install] +WantedBy=graphical.target diff --git a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.toml b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.toml new file mode 100644 index 000000000..cb78ab0cd --- /dev/null +++ b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo/flutter-samples-material-3-demo.toml @@ -0,0 +1,5 @@ +[view] +window_type = "BG" +width = 1080 +height = 1920 +fullscreen = true diff --git a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery_%.bbappend b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo_%.bbappend index 835e86e66..0baa7a045 100644 --- a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-gallery_%.bbappend +++ b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo_%.bbappend @@ -1 +1 @@ -require ${@bb.utils.contains('AGL_FEATURES', 'agl-flutter', 'flutter-gallery_aglflutter.inc', '', d)} +require ${@bb.utils.contains('AGL_FEATURES', 'agl-flutter', 'flutter-samples-material-3-demo_aglflutter.inc', '', d)} diff --git a/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo_aglflutter.inc b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo_aglflutter.inc new file mode 100644 index 000000000..971756ad7 --- /dev/null +++ b/meta-agl-flutter/dynamic-layers/flutter-apps-layer/recipes-graphics/flutter-apps/first-party/flutter-samples-material-3-demo_aglflutter.inc @@ -0,0 +1,22 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/flutter-samples-material-3-demo:" + +SRC_URI += "file://flutter-samples-material-3-demo.service" + +APP_CONFIG = "flutter-samples-material-3-demo.toml" + +inherit systemd + +do_install:append() { + install -D -m 0644 ${WORKDIR}/${BPN}.service ${D}${systemd_system_unitdir}/${BPN}.service + + # determine build type based on what flutter-engine installed. + for runtime_mode in ${FLUTTER_RUNTIME_MODES} + do + install -D -m 0644 ${WORKDIR}/${APP_CONFIG} \ + ${D}${datadir}/flutter/${PUBSPEC_APPNAME}/${FLUTTER_SDK_VERSION}/${runtime_mode}/config.toml + done +} + +RDEPENDS:${PN} += "agl-flutter-env" + +SYSTEMD_SERVICE:${PN} = "flutter-samples-material-3-demo.service" diff --git a/meta-agl-flutter/recipes-graphics/toyota/files/0001-backend-wayland_egl-Add-a-fallback-eglConfig.patch b/meta-agl-flutter/recipes-graphics/toyota/files/0001-backend-wayland_egl-Add-a-fallback-eglConfig.patch new file mode 100644 index 000000000..f2195dddc --- /dev/null +++ b/meta-agl-flutter/recipes-graphics/toyota/files/0001-backend-wayland_egl-Add-a-fallback-eglConfig.patch @@ -0,0 +1,88 @@ +From 372b9c4edd42b67827b75863b978091ba5cff5cd Mon Sep 17 00:00:00 2001 +From: Marius Vlad <marius.vlad@collabora.com> +Date: Thu, 17 Oct 2024 17:25:41 +0300 +Subject: [PATCH 1/2] backend/wayland_egl: Add a fallback eglConfig + +This seems to aid flutter-auto at displaying an image on agl-rdp +with software rendering, and on agl-kvm with virgl. Makes uses of a fallback +eGLConfig (< 24 bit) and tries to use that one rather than the default one (24-bit). + +Bug-AGL: SPEC-5260 +Signed-off-by: Marius Vlad <marius.vlad@collabora.com> +--- + cmake/config_common.h.in | 17 ++++++++++++++++- + shell/backend/wayland_egl/egl.cc | 23 ++++++++++++++++++++--- + 2 files changed, 36 insertions(+), 4 deletions(-) + +diff --git a/cmake/config_common.h.in b/cmake/config_common.h.in +index 07ce9b7..2c54c67 100644 +--- a/cmake/config_common.h.in ++++ b/cmake/config_common.h.in +@@ -155,6 +155,21 @@ static constexpr std::array<EGLint, 27> kEglConfigAttribs = {{ + // clang-format on + }}; + ++ ++static constexpr std::array<EGLint, 27> kEglConfigAttribsFallBack = {{ ++ // clang-format off ++ EGL_SURFACE_TYPE, EGL_WINDOW_BIT, ++ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, ++ ++ EGL_RED_SIZE, 1, ++ EGL_GREEN_SIZE, 1, ++ EGL_BLUE_SIZE, 1, ++ EGL_ALPHA_SIZE, 2, ++ EGL_NONE // termination sentinel ++ // clang-format on ++}}; ++ ++ + // All vkCreate* functions take an optional allocator. For now, we select the + // default allocator by passing in a null pointer, and we highlight the argument + // by using the VKALLOC constant. +@@ -181,4 +196,4 @@ constexpr struct VkAllocationCallbacks* VKALLOC = nullptr; + #cmakedefine01 ENV32BIT + #cmakedefine01 ENV64BIT + +-#endif //CONFIG_COMMON_H_ +\ No newline at end of file ++#endif //CONFIG_COMMON_H_ +diff --git a/shell/backend/wayland_egl/egl.cc b/shell/backend/wayland_egl/egl.cc +index 99555d6..70164ba 100644 +--- a/shell/backend/wayland_egl/egl.cc ++++ b/shell/backend/wayland_egl/egl.cc +@@ -62,11 +62,28 @@ Egl::Egl(void* native_display, int buffer_size, bool debug) + break; + } + } +- free(configs); + if (m_config == nullptr) { +- spdlog::critical("did not find config with buffer size {}", m_buffer_size); +- assert(false); ++ // try with the fallback one ++ spdlog::critical("Could not use default EGLConfig trying with fallback."); ++ ret = eglChooseConfig(m_dpy, kEglConfigAttribsFallBack.data(), configs, ++ count, &n); ++ assert(ret && n >= 1); ++ ++ for (EGLint i = 0; i < n; i++) { ++ eglGetConfigAttrib(m_dpy, configs[i], EGL_BUFFER_SIZE, &size); ++ SPDLOG_DEBUG("Buffer size for config {} is {}", i, size); ++ if (m_buffer_size <= size) { ++ memcpy(&m_config, &configs[i], sizeof(EGLConfig)); ++ break; ++ } ++ } ++ if (m_config == nullptr) { ++ spdlog::critical("did not find config with buffer size {}", ++ m_buffer_size); ++ assert(false); ++ } + } ++ free(configs); + + m_context = eglCreateContext(m_dpy, m_config, EGL_NO_CONTEXT, + kEglContextAttribs.data()); +-- +2.43.0 + diff --git a/meta-agl-flutter/recipes-graphics/toyota/files/0001-flutter_desktop-Remove-asio-post-call.patch b/meta-agl-flutter/recipes-graphics/toyota/files/0001-flutter_desktop-Remove-asio-post-call.patch new file mode 100644 index 000000000..f9cfea44d --- /dev/null +++ b/meta-agl-flutter/recipes-graphics/toyota/files/0001-flutter_desktop-Remove-asio-post-call.patch @@ -0,0 +1,94 @@ +From a69dfff93b41b30ae8e237817548baf50d0c1287 Mon Sep 17 00:00:00 2001 +From: Marius Vlad <marius.vlad@collabora.com> +Date: Thu, 24 Oct 2024 14:45:35 +0300 +Subject: [PATCH] flutter_desktop: Remove asio::post call + +Do not dispatch/post the key event keycode using asio::post as that +seems to cause crashes as the messenger pointer seems to be go out of +scope or seems to be invalid. + +Bug-AGL: SPEC-5272 +Signed-off-by: Marius Vlad <marius.vlad@collabora.com> +--- + shell/platform/homescreen/flutter_desktop.cc | 65 ++++++++++---------- + 1 file changed, 31 insertions(+), 34 deletions(-) + +diff --git a/shell/platform/homescreen/flutter_desktop.cc b/shell/platform/homescreen/flutter_desktop.cc +index bb5be4b..5d26dd9 100644 +--- a/shell/platform/homescreen/flutter_desktop.cc ++++ b/shell/platform/homescreen/flutter_desktop.cc +@@ -161,40 +161,37 @@ std::future<bool> PostMessengerSendWithReply( + void* user_data) { + const auto promise(std::make_shared<std::promise<bool>>()); + auto promise_future(promise->get_future()); +- asio::post(*messenger->GetEngine()->platform_task_runner->GetStrandContext(), +- [&, promise, channel, message, message_size, reply, user_data]() { +- FlutterPlatformMessageResponseHandle* response_handle = nullptr; +- if (reply != nullptr && user_data != nullptr) { +- const FlutterEngineResult result = +- LibFlutterEngine->PlatformMessageCreateResponseHandle( +- messenger->GetEngine()->flutter_engine, reply, +- user_data, &response_handle); +- if (result != kSuccess) { +- spdlog::error("Failed to create response handle"); +- promise->set_value(false); +- return; +- } +- } +- +- auto platform_message = std::make_unique<FlutterPlatformMessage>(); +- platform_message->struct_size = sizeof(FlutterPlatformMessage); +- platform_message->channel = channel; +- platform_message->message = message; +- platform_message->message_size = message_size; +- platform_message->response_handle = response_handle; +- +- const FlutterEngineResult message_result = +- LibFlutterEngine->SendPlatformMessage( +- messenger->GetEngine()->flutter_engine, +- platform_message.release()); +- +- if (response_handle != nullptr) { +- LibFlutterEngine->PlatformMessageReleaseResponseHandle( +- messenger->GetEngine()->flutter_engine, response_handle); +- } +- +- promise->set_value(message_result == kSuccess); +- }); ++ ++ FlutterPlatformMessageResponseHandle* response_handle = nullptr; ++ if (reply != nullptr && user_data != nullptr) { ++ const FlutterEngineResult result = ++ LibFlutterEngine->PlatformMessageCreateResponseHandle( ++ messenger->GetEngine()->flutter_engine, reply, user_data, ++ &response_handle); ++ if (result != kSuccess) { ++ spdlog::error("Failed to create response handle"); ++ promise->set_value(false); ++ return promise_future; ++ } ++ } ++ ++ auto platform_message = std::make_unique<FlutterPlatformMessage>(); ++ platform_message->struct_size = sizeof(FlutterPlatformMessage); ++ platform_message->channel = channel; ++ platform_message->message = message; ++ platform_message->message_size = message_size; ++ platform_message->response_handle = response_handle; ++ ++ const FlutterEngineResult message_result = ++ LibFlutterEngine->SendPlatformMessage( ++ messenger->GetEngine()->flutter_engine, platform_message.release()); ++ ++ if (response_handle != nullptr) { ++ LibFlutterEngine->PlatformMessageReleaseResponseHandle( ++ messenger->GetEngine()->flutter_engine, response_handle); ++ } ++ ++ promise->set_value(message_result == kSuccess); + return promise_future; + } + +-- +2.43.0 + diff --git a/meta-agl-flutter/recipes-graphics/toyota/flutter-auto_aglflutter.inc b/meta-agl-flutter/recipes-graphics/toyota/flutter-auto_aglflutter.inc index 7ba85a34d..29c023fca 100644 --- a/meta-agl-flutter/recipes-graphics/toyota/flutter-auto_aglflutter.inc +++ b/meta-agl-flutter/recipes-graphics/toyota/flutter-auto_aglflutter.inc @@ -1,3 +1,12 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/files:" +EGLCONFIG_FALLBACK = "${@bb.utils.contains_any('AGL_FEATURES', 'agl-rdp agl-kvm-guest', '', 'file://0001-backend-wayland_egl-Add-a-fallback-eglConfig.patch', d)}" SRC_URI:append:use-nxp-bsp = " file://0001-Disable-on_frame_base_surface-wl_surface_commit.patch" +SRC_URI:append = " ${EGLCONFIG_FALLBACK}" + +# necessary to avoid crashing flutter-auto when a key keyboard event is emitted +SRC_URI:append = " file://0001-flutter_desktop-Remove-asio-post-call.patch" + +# Disable WIP webview plugin on 32-bit ARM platforms for now, as build +# failures have been seen on qemuarm and beaglebone. +PACKAGECONFIG:remove:arm = "webview_flutter_view" diff --git a/meta-agl-flutter/recipes-platform/images/agl-image-flutter-debug.bb b/meta-agl-flutter/recipes-platform/images/agl-image-flutter-debug.bb index c9c1f2980..9b4b08398 100644 --- a/meta-agl-flutter/recipes-platform/images/agl-image-flutter-debug.bb +++ b/meta-agl-flutter/recipes-platform/images/agl-image-flutter-debug.bb @@ -25,5 +25,5 @@ IMAGE_INSTALL += "\ \ flutter-engine-sdk-dev \ \ - flutter-gallery \ + flutter-samples-material-3-demo \ " diff --git a/meta-agl-flutter/recipes-platform/images/agl-image-flutter.bb b/meta-agl-flutter/recipes-platform/images/agl-image-flutter.bb index 0fdb7da08..700f540ed 100644 --- a/meta-agl-flutter/recipes-platform/images/agl-image-flutter.bb +++ b/meta-agl-flutter/recipes-platform/images/agl-image-flutter.bb @@ -12,5 +12,5 @@ IMAGE_INSTALL += "\ \ flutter-auto \ \ - flutter-gallery \ + flutter-samples-material-3-demo \ " diff --git a/meta-agl-flutter/tools/configs/_globals.json b/meta-agl-flutter/tools/configs/_globals.json index 4caf9e8a0..1830c8d40 100644 --- a/meta-agl-flutter/tools/configs/_globals.json +++ b/meta-agl-flutter/tools/configs/_globals.json @@ -1,5 +1,5 @@ { - "flutter-version": "3.19.3", + "flutter-version": "3.24.1", "github_token": "", "cookie_file": "" -}
\ No newline at end of file +} diff --git a/meta-agl-flutter/tools/configs/_repos.json b/meta-agl-flutter/tools/configs/_repos.json index 5bc0562e2..5fb8aa047 100644 --- a/meta-agl-flutter/tools/configs/_repos.json +++ b/meta-agl-flutter/tools/configs/_repos.json @@ -1,7 +1,12 @@ [ { "uri": "https://github.com/toyota-connected/ivi-homescreen.git", - "rev": "ea89b1de0a40c0d447ded305645556c978cfa696", + "rev": "e87c1797f838e20f0a4c1af309541d63986058ca", + "branch": "v2.0" + }, + { + "uri": "https://github.com/toyota-connected/ivi-homescreen-plugins.git", + "rev": "41d00635f89c064aa32f2cef3147c59b8f61694f", "branch": "v2.0" }, { diff --git a/meta-agl-flutter/tools/configs/agl-qemu-master.json b/meta-agl-flutter/tools/configs/agl-qemu-master.json index eba953f7d..dae014a58 100644 --- a/meta-agl-flutter/tools/configs/agl-qemu-master.json +++ b/meta-agl-flutter/tools/configs/agl-qemu-master.json @@ -21,11 +21,11 @@ "DEVICE_HOSTNAME": "localhost", "FLUTTER_AUTO_EXE": "flutter-auto --j=/tmp/${appName}/default_config.json --b=/tmp/${appName}", "PING_CMD": "(echo >/dev/tcp/localhost/${CONTAINER_SSH_PORT}) &>/dev/null && echo open || echo closed", - "DELETE_USER_PWD": "ssh -p ${CONTAINER_SSH_PORT} -t -oBatchMode=yes root@${DEVICE_HOSTNAME} passwd -d agl-driver", - "CREATE_BUNDLE_FOLDER": "ssh -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} mkdir -p /tmp/${appName}/data", - "COPY_PLATFORM_ID_TO_DEVICE": "scp -P ${CONTAINER_SSH_PORT} -r ${PLATFORM_ID_DIR}/default_config.json agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/", - "COPY_ASSETS_TO_DEVICE": "scp -P ${CONTAINER_SSH_PORT} -r ${localPath}/* agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/data/flutter_assets", - "DELETE_APP_FOLDER": "ssh -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} rm -rf /tmp/${appName}" + "DELETE_USER_PWD": "ssh -oStrictHostKeyChecking=no -p ${CONTAINER_SSH_PORT} -t -oBatchMode=yes root@${DEVICE_HOSTNAME} passwd -d agl-driver", + "CREATE_BUNDLE_FOLDER": "ssh -oStrictHostKeyChecking=no -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} mkdir -p /tmp/${appName}/data", + "COPY_PLATFORM_ID_TO_DEVICE": "scp -oStrictHostKeyChecking=no -P ${CONTAINER_SSH_PORT} -r ${PLATFORM_ID_DIR}/default_config.json agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/", + "COPY_ASSETS_TO_DEVICE": "scp -oStrictHostKeyChecking=no -P ${CONTAINER_SSH_PORT} -r ${localPath}/* agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/data/flutter_assets", + "DELETE_APP_FOLDER": "ssh -oStrictHostKeyChecking=no -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} rm -rf /tmp/${appName}" }, "runtime": { "config": { @@ -106,9 +106,9 @@ "postBuild": "bash -c \"${DELETE_USER_PWD}\"", "install": "bash -c \"${CREATE_BUNDLE_FOLDER} && ${COPY_PLATFORM_ID_TO_DEVICE} && ${COPY_ASSETS_TO_DEVICE}\"", "uninstall": "bash -c \"${DELETE_APP_FOLDER}\"", - "runDebug": "bash -c \"ssh -t -t -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} ${FLUTTER_AUTO_EXE}\"", + "runDebug": "bash -c \"ssh -oStrictHostKeyChecking=no -t -t -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} ${FLUTTER_AUTO_EXE}\"", "forwardPort": null, "forwardPortSuccessRegex": null, "screenshot": null } -}
\ No newline at end of file +} diff --git a/meta-agl-flutter/tools/configs/agl-qemu-octopus.json b/meta-agl-flutter/tools/configs/agl-qemu-octopus.json index dba5a8820..20e20e0c1 100644 --- a/meta-agl-flutter/tools/configs/agl-qemu-octopus.json +++ b/meta-agl-flutter/tools/configs/agl-qemu-octopus.json @@ -21,11 +21,11 @@ "DEVICE_HOSTNAME": "localhost", "FLUTTER_AUTO_EXE": "flutter-auto --j=/tmp/${appName}/default_config.json --b=/tmp/${appName}", "PING_CMD": "(echo >/dev/tcp/localhost/${CONTAINER_SSH_PORT}) &>/dev/null && echo open || echo closed", - "DELETE_USER_PWD": "ssh -p ${CONTAINER_SSH_PORT} -t -oBatchMode=yes root@${DEVICE_HOSTNAME} passwd -d agl-driver", - "CREATE_BUNDLE_FOLDER": "ssh -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} mkdir -p /tmp/${appName}/data", - "COPY_PLATFORM_ID_TO_DEVICE": "scp -P ${CONTAINER_SSH_PORT} -r ${PLATFORM_ID_DIR}/default_config.json agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/", - "COPY_ASSETS_TO_DEVICE": "scp -P ${CONTAINER_SSH_PORT} -r ${localPath}/* agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/data/flutter_assets", - "DELETE_APP_FOLDER": "ssh -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} rm -rf /tmp/${appName}" + "DELETE_USER_PWD": "ssh -oStrictHostKeyChecking=no -p ${CONTAINER_SSH_PORT} -t -oBatchMode=yes root@${DEVICE_HOSTNAME} passwd -d agl-driver", + "CREATE_BUNDLE_FOLDER": "ssh -oStrictHostKeyChecking=no -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} mkdir -p /tmp/${appName}/data", + "COPY_PLATFORM_ID_TO_DEVICE": "scp -oStrictHostKeyChecking=no -P ${CONTAINER_SSH_PORT} -r ${PLATFORM_ID_DIR}/default_config.json agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/", + "COPY_ASSETS_TO_DEVICE": "scp -oStrictHostKeyChecking=no -P ${CONTAINER_SSH_PORT} -r ${localPath}/* agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/data/flutter_assets", + "DELETE_APP_FOLDER": "ssh -oStrictHostKeyChecking=no -p ${CONTAINER_SSH_PORT} -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} rm -rf /tmp/${appName}" }, "runtime": { "config": { @@ -106,9 +106,9 @@ "postBuild": "bash -c \"${DELETE_USER_PWD}\"", "install": "bash -c \"${CREATE_BUNDLE_FOLDER} && ${COPY_PLATFORM_ID_TO_DEVICE} && ${COPY_ASSETS_TO_DEVICE}\"", "uninstall": "bash -c \"${DELETE_APP_FOLDER}\"", - "runDebug": "bash -c \"ssh -t -t -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} ${FLUTTER_AUTO_EXE}\"", + "runDebug": "bash -c \"ssh -oStrictHostKeyChecking=no -t -t -o BatchMode=yes agl-driver@${DEVICE_HOSTNAME} ${FLUTTER_AUTO_EXE}\"", "forwardPort": null, "forwardPortSuccessRegex": null, "screenshot": null } -}
\ No newline at end of file +} diff --git a/meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.0.json b/meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.0.json new file mode 100644 index 000000000..c03e34707 --- /dev/null +++ b/meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.0.json @@ -0,0 +1,112 @@ +{ + "id": "agl-qemu-ricefish-18.0.0", + "load": true, + "supported_archs": [ + "x86_64" + ], + "supported_host_types": [ + "darwin", + "ubuntu", + "fedora" + ], + "flutter_runtime": "debug", + "type": "qemu", + "env": { + "RELEASE_NAME": "ricefish", + "RELEASE_VERSION": "18.0.0", + "FLUTTER_VERSION": "3.24.1", + "QEMU_IMAGE": "agl-ivi-demo-flutter-qemux86-64.wic.vmdk", + "FLUTTER_DEBUG_PORT": "1234", + "FLUTTER_OBSERVATORY_HOST": "0.0.0.0", + "CONTAINER_SSH_PORT": "2222", + "DEVICE_HOSTNAME": "localhost", + "SCP_PREFIX": "scp -oStrictHostKeyChecking=no -P ${CONTAINER_SSH_PORT}", + "SSH_PREFIX": "ssh -oStrictHostKeyChecking=no -oBatchMode=yes -p ${CONTAINER_SSH_PORT}", + "FLUTTER_AUTO_EXE": "LIBCAMERA_LOG_LEVELS=*:ERROR XDG_RUNTIME_DIR=/run/user/1001/ flutter-auto --j=/tmp/${appName}/default_config.json --b=/tmp/${appName}", + "PING_CMD": "(echo >/dev/tcp/localhost/${CONTAINER_SSH_PORT}) &>/dev/null && echo open || echo closed", + "DELETE_USER_PWD": "${SSH_PREFIX} -t root@${DEVICE_HOSTNAME} passwd -d agl-driver", + "STOP_SERVICE": "${SSH_PREFIX} -t root@${DEVICE_HOSTNAME} systemctl stop flutter-ics-homescreen", + "DEBUG_ARTIFACT_PATH": "/usr/share/flutter/${FLUTTER_VERSION}/debug", + "CREATE_ICUDTL_SYMLINK": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} ln -sf ${DEBUG_ARTIFACT_PATH}/data/icudtl.dat /tmp/${appName}/data/icudtl.dat", + "CREATE_ENGINE_SYMLINK": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} ln -sf ${DEBUG_ARTIFACT_PATH}/lib/libflutter_engine.so /tmp/${appName}/lib/libflutter_engine.so", + "CREATE_BUNDLE_FOLDER": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} mkdir -p /tmp/${appName}{/data/flutter_assets,/lib}", + "COPY_PLATFORM_ID_TO_DEVICE": "${SCP_PREFIX} -r ${PLATFORM_ID_DIR}/default_config.json agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/", + "COPY_ASSETS_TO_DEVICE": "${SCP_PREFIX} -r ${localPath}/* agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/data/flutter_assets", + "DELETE_APP_FOLDER": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} rm -rf /tmp/${appName}" + }, + "runtime": { + "pre-requisites": { + "x86_64": { + "ubuntu": { + "cmds": [ + "sudo apt install -y qemu-system-x86-64" + ] + }, + "fedora": { + "cmds": [ + "sudo dnf install -y qemu" + ] + } + } + }, + "config": { + "view": [ + { + "window_type": "BG", + "width": 1920, + "height": 1080 + } + ] + }, + "artifacts": { + "http": { + "url": "https://download.automotivelinux.org/AGL/release/${RELEASE_NAME}/${RELEASE_VERSION}", + "artifacts": { + "x86_64": [ + { + "endpoint": "/qemux86-64/deploy/images/qemux86-64/${QEMU_IMAGE}.xz" + } + ] + } + } + }, + "qemu": { + "cmd": "qemu-system-${FORMAL_MACHINE_ARCH}", + "x86_64": { + "image": "${QEMU_IMAGE}", + "args": "-m 2048 ${QEMU_EXTRA} -hda ${QEMU_IMAGE} -cpu kvm64 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt -vga virtio -device virtio-rng-pci -serial mon:stdio -serial null -device intel-hda -device hda-duplex -device virtio-net-pci,netdev=net0,mac=${RANDOM_MAC} -netdev user,id=net0,hostfwd=tcp::${CONTAINER_SSH_PORT}-:22,hostfwd=tcp::${FLUTTER_DEBUG_PORT}-:${FLUTTER_DEBUG_PORT}" + }, + "extra": { + "darwin": "-smp cpus=8,sockets=1,cores=8,threads=1", + "ubuntu": "-bios OVMF.fd", + "fedora": "-bios /usr/share/edk2/ovmf/OVMF_CODE.fd" + } + }, + "post_cmds": [ + { + "cwd": "${PLATFORM_ID_DIR}", + "cmds": [ + "bash -c \"rm ${QEMU_IMAGE}|true\"", + "unxz --keep ${QEMU_IMAGE}.xz" + ] + } + ] + }, + "overwrite-existing": true, + "custom-device": { + "id": "agl-qemu-${RELEASE_NAME}", + "label": "AGL ${RELEASE_NAME}-${RELEASE_VERSION} QEMU Image", + "sdkNameAndVersion": "qemu-${RELEASE_NAME} ${RELEASE_VERSION}", + "platform": "linux-x64", + "enabled": true, + "ping": "bash -c \"${PING_CMD}\"", + "pingSuccessRegex": "open", + "postBuild": "bash -c \"${DELETE_USER_PWD}; ${STOP_SERVICE}\"; ", + "install": "bash -c \"${CREATE_BUNDLE_FOLDER} && ${COPY_PLATFORM_ID_TO_DEVICE} && ${COPY_ASSETS_TO_DEVICE} && ${CREATE_ICUDTL_SYMLINK} && ${CREATE_ENGINE_SYMLINK}\"", + "uninstall": "bash -c \"${DELETE_APP_FOLDER}\"", + "runDebug": "bash -c \"${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} ${FLUTTER_AUTO_EXE}\"", + "forwardPort": null, + "forwardPortSuccessRegex": null, + "screenshot": null + } +} diff --git a/meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.1.json b/meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.1.json new file mode 100644 index 000000000..fde1e13ac --- /dev/null +++ b/meta-agl-flutter/tools/configs/agl-qemu-ricefish-18.0.1.json @@ -0,0 +1,112 @@ +{ + "id": "agl-qemu-ricefish-18.0.1", + "load": true, + "supported_archs": [ + "x86_64" + ], + "supported_host_types": [ + "darwin", + "ubuntu", + "fedora" + ], + "flutter_runtime": "debug", + "type": "qemu", + "env": { + "RELEASE_NAME": "ricefish", + "RELEASE_VERSION": "18.0.1", + "FLUTTER_VERSION": "3.24.1", + "QEMU_IMAGE": "agl-ivi-demo-flutter-qemux86-64.wic.vmdk", + "FLUTTER_DEBUG_PORT": "1234", + "FLUTTER_OBSERVATORY_HOST": "0.0.0.0", + "CONTAINER_SSH_PORT": "2222", + "DEVICE_HOSTNAME": "localhost", + "SCP_PREFIX": "scp -oStrictHostKeyChecking=no -P ${CONTAINER_SSH_PORT}", + "SSH_PREFIX": "ssh -oStrictHostKeyChecking=no -oBatchMode=yes -p ${CONTAINER_SSH_PORT}", + "FLUTTER_AUTO_EXE": "LIBCAMERA_LOG_LEVELS=*:ERROR XDG_RUNTIME_DIR=/run/user/1001/ flutter-auto --j=/tmp/${appName}/default_config.json --b=/tmp/${appName}", + "PING_CMD": "(echo >/dev/tcp/localhost/${CONTAINER_SSH_PORT}) &>/dev/null && echo open || echo closed", + "DELETE_USER_PWD": "${SSH_PREFIX} -t root@${DEVICE_HOSTNAME} passwd -d agl-driver", + "STOP_SERVICE": "${SSH_PREFIX} -t root@${DEVICE_HOSTNAME} systemctl stop flutter-ics-homescreen", + "DEBUG_ARTIFACT_PATH": "/usr/share/flutter/${FLUTTER_VERSION}/debug", + "CREATE_ICUDTL_SYMLINK": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} ln -sf ${DEBUG_ARTIFACT_PATH}/data/icudtl.dat /tmp/${appName}/data/icudtl.dat", + "CREATE_ENGINE_SYMLINK": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} ln -sf ${DEBUG_ARTIFACT_PATH}/lib/libflutter_engine.so /tmp/${appName}/lib/libflutter_engine.so", + "CREATE_BUNDLE_FOLDER": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} mkdir -p /tmp/${appName}{/data/flutter_assets,/lib}", + "COPY_PLATFORM_ID_TO_DEVICE": "${SCP_PREFIX} -r ${PLATFORM_ID_DIR}/default_config.json agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/", + "COPY_ASSETS_TO_DEVICE": "${SCP_PREFIX} -r ${localPath}/* agl-driver@${DEVICE_HOSTNAME}:/tmp/${appName}/data/flutter_assets", + "DELETE_APP_FOLDER": "${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} rm -rf /tmp/${appName}" + }, + "runtime": { + "pre-requisites": { + "x86_64": { + "ubuntu": { + "cmds": [ + "sudo apt install -y qemu-system-x86-64" + ] + }, + "fedora": { + "cmds": [ + "sudo dnf install -y qemu" + ] + } + } + }, + "config": { + "view": [ + { + "window_type": "BG", + "width": 1920, + "height": 1080 + } + ] + }, + "artifacts": { + "http": { + "url": "https://download.automotivelinux.org/AGL/release/${RELEASE_NAME}/${RELEASE_VERSION}", + "artifacts": { + "x86_64": [ + { + "endpoint": "/qemux86-64/deploy/images/qemux86-64/${QEMU_IMAGE}.xz" + } + ] + } + } + }, + "qemu": { + "cmd": "qemu-system-${FORMAL_MACHINE_ARCH}", + "x86_64": { + "image": "${QEMU_IMAGE}", + "args": "-m 2048 ${QEMU_EXTRA} -hda ${QEMU_IMAGE} -cpu kvm64 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt -vga virtio -device virtio-rng-pci -serial mon:stdio -serial null -device intel-hda -device hda-duplex -device virtio-net-pci,netdev=net0,mac=${RANDOM_MAC} -netdev user,id=net0,hostfwd=tcp::${CONTAINER_SSH_PORT}-:22,hostfwd=tcp::${FLUTTER_DEBUG_PORT}-:${FLUTTER_DEBUG_PORT}" + }, + "extra": { + "darwin": "-smp cpus=8,sockets=1,cores=8,threads=1", + "ubuntu": "-bios OVMF.fd", + "fedora": "-bios /usr/share/edk2/ovmf/OVMF_CODE.fd" + } + }, + "post_cmds": [ + { + "cwd": "${PLATFORM_ID_DIR}", + "cmds": [ + "bash -c \"rm ${QEMU_IMAGE}|true\"", + "unxz --keep ${QEMU_IMAGE}.xz" + ] + } + ] + }, + "overwrite-existing": true, + "custom-device": { + "id": "agl-qemu-${RELEASE_NAME}", + "label": "AGL ${RELEASE_NAME}-${RELEASE_VERSION} QEMU Image", + "sdkNameAndVersion": "qemu-${RELEASE_NAME} ${RELEASE_VERSION}", + "platform": "linux-x64", + "enabled": true, + "ping": "bash -c \"${PING_CMD}\"", + "pingSuccessRegex": "open", + "postBuild": "bash -c \"${DELETE_USER_PWD}; ${STOP_SERVICE}\"; ", + "install": "bash -c \"${CREATE_BUNDLE_FOLDER} && ${COPY_PLATFORM_ID_TO_DEVICE} && ${COPY_ASSETS_TO_DEVICE} && ${CREATE_ICUDTL_SYMLINK} && ${CREATE_ENGINE_SYMLINK}\"", + "uninstall": "bash -c \"${DELETE_APP_FOLDER}\"", + "runDebug": "bash -c \"${SSH_PREFIX} agl-driver@${DEVICE_HOSTNAME} ${FLUTTER_AUTO_EXE}\"", + "forwardPort": null, + "forwardPortSuccessRegex": null, + "screenshot": null + } +} diff --git a/meta-agl-flutter/tools/configs/desktop-auto.json b/meta-agl-flutter/tools/configs/desktop-auto.json index 943bca085..977a20679 100644 --- a/meta-agl-flutter/tools/configs/desktop-auto.json +++ b/meta-agl-flutter/tools/configs/desktop-auto.json @@ -13,38 +13,33 @@ "env": { "HOMESCREEN_SRC_DIR": "${FLUTTER_WORKSPACE}/app/ivi-homescreen", "HOMESCREEN_BUILD_DIR": "${FLUTTER_WORKSPACE}/app/ivi-homescreen/build", - "HOMESCREEN_CMAKE_ARGS": "-DCMAKE_BUILD_TYPE=Debug -DEXE_OUTPUT_NAME=flutter-auto -DSANITIZE_ADDRESS=OFF -DENABLE_DLT=OFF -DBUILD_UNIT_TESTS=OFF -DBUILD_DOCS=OFF -DBUILD_CRASH_HANDLER=OFF -DLLVM_ROOT=/usr -DBUILD_PLUGIN_FILAMENT_VIEW=OFF -DENABLE_IVI_SHELL_CLIENT=OFF -DENABLE_XDG_CLIENT=ON -DENABLE_AGL_CLIENT=ON -DENABLE_LTO=ON -DDEBUG_PLATFORM_MESSAGES=OFF -DBUILD_BACKEND_WAYLAND_EGL=ON -DBUILD_BACKEND_WAYLAND_VULKAN=OFF -DBUILD_EGL_TRANSPARENCY=ON -DBUILD_EGL_ENABLE_3D=ON -DBUILD_EGL_ENABLE_MULTISAMPLE=ON -DBUILD_PLUGIN_PDF=OFF -DBUILD_PLUGIN_FILAMENT_VIEW=OFF -DBUILD_PLUGIN_NAV_RENDER_VIEW=ON -DBUILD_PLUGIN_LAYER_PLAYGROUND_VIEW=ON -DBUILD_PLUGIN_AUDIOPLAYERS_LINUX=ON -DBUILD_PLUGIN_URL_LAUNCHER=ON -DBUILD_PLUGIN_FILE_SELECTOR=ON -DBUILD_PLUGIN_CAMERA=OFF -DBUILD_PLUGIN_GO_ROUTER=ON -DBUILD_PLUGIN_SECURE_STORAGE=ON", - "HOMESCREEN_EXE": "SPDLOG_LEVEL=debug ${HOMESCREEN_BUILD_DIR}/shell/flutter-auto --j=${PLATFORM_ID_DIR_RELATIVE}/default_config.json --b=${PLATFORM_ID_DIR_RELATIVE}", + "HOMESCREEN_CMAKE_ARGS": "-DCMAKE_BUILD_TYPE=Debug -DEXE_OUTPUT_NAME=flutter-auto -DSANITIZE_ADDRESS=OFF -DENABLE_DLT=OFF -DBUILD_UNIT_TESTS=OFF -DBUILD_DOCS=OFF -DBUILD_CRASH_HANDLER=OFF -DLLVM_ROOT=/usr -DPLUGINS_DIR=${FLUTTER_WORKSPACE}/app/ivi-homescreen-plugins -DENABLE_IVI_SHELL_CLIENT=OFF -DENABLE_XDG_CLIENT=ON -DENABLE_AGL_SHELL_CLIENT=ON -DENABLE_LTO=ON -DDEBUG_PLATFORM_MESSAGES=OFF -DBUILD_BACKEND_WAYLAND_EGL=ON -DBUILD_BACKEND_WAYLAND_VULKAN=OFF -DBUILD_EGL_TRANSPARENCY=ON -DBUILD_EGL_ENABLE_3D=ON -DBUILD_EGL_ENABLE_MULTISAMPLE=ON -DBUILD_PLUGIN_PDF=OFF -DBUILD_PLUGIN_FILAMENT_VIEW=OFF -DBUILD_PLUGIN_NAV_RENDER_VIEW=ON -DBUILD_PLUGIN_AUDIOPLAYERS_LINUX=ON -DBUILD_PLUGIN_URL_LAUNCHER=ON -DBUILD_PLUGIN_FILE_SELECTOR=ON -DBUILD_PLUGIN_CAMERA=OFF -DBUILD_PLUGIN_GO_ROUTER=ON -DBUILD_PLUGIN_SECURE_STORAGE=ON -DBUILD_PLUGIN_DESKTOP_WINDOW_LINUX=ON -DBUILD_WATCHDOG=OFF", + "HOMESCREEN_EXE": "SPDLOG_LEVEL=debug ${HOMESCREEN_BUILD_DIR}/shell/flutter-auto -b ${PLATFORM_ID_DIR_RELATIVE}", "PING_CMD": "loginctl show-session $(awk '/tty/ {print $1}' <(loginctl)) -p Type", "CREATE_BUNDLE_FOLDER": "mkdir -p ${PLATFORM_ID_DIR_RELATIVE}/data", - "COPY_PLATFORM_ID_TO_BUNDLE_FOLDER": "cp -r ${PLATFORM_ID_DIR}/default_config.json ${PLATFORM_ID_DIR_RELATIVE}/", + "COPY_PLATFORM_ID_TO_BUNDLE_FOLDER": "cp -r ${PLATFORM_ID_DIR}/config.toml ${PLATFORM_ID_DIR_RELATIVE}/", "COPY_BUNDLE_FOLDER_TO_PLATOFRM_ID": "cp -r ${BUNDLE_FOLDER}/* ${PLATFORM_ID_DIR_RELATIVE}/", "CREATE_ASSET_SYMLINK": "ln -rsf build/flutter_assets ${PLATFORM_ID_DIR_RELATIVE}/data/flutter_assets", "STAGE_BUNDLE_FOLDER": "${CREATE_BUNDLE_FOLDER} && ${COPY_PLATFORM_ID_TO_BUNDLE_FOLDER} && ${COPY_BUNDLE_FOLDER_TO_PLATOFRM_ID} && ${CREATE_ASSET_SYMLINK}" - }, + }, "runtime": { "config": { - "view": [ - { - "width": 1920, - "height": 1080, - "cursor_theme": "DMZ-White", - "fullscreen": false - } - ] + "global": {"cursor_theme": "DMZ-White"}, + "view": {"width": 1024, "height": 768} }, "pre-requisites": { "x86_64": { "ubuntu": { "cmds": [ "sudo snap install cmake --classic", + "pip3 install clang", "sudo add-apt-repository -y ppa:kisak/kisak-mesa", "sudo apt update -y", "sudo apt install lsb-release wget software-properties-common gnupg apt-file", "sudo apt update", "sudo apt install -y libwayland-dev wayland-protocols mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev mesa-utils libxkbcommon-dev ninja-build", "sudo apt install -y build-essential libvulkan-dev vulkan-tools vulkan-validationlayers vulkan-utils libtool libsecret-1-dev libsdl2-dev libjpeg-dev zenity", - "sudo apt install -y libllvm-ocaml-dev llvm llvm-dev llvm-runtime clang clang-tools libclang-dev libclang1 clang-format python3-clang clangd clang-tidy lldb lld libc++-dev libc++abi-dev libunwind-dev libc++1 libc++abi1", + "sudo apt install -y libllvm-ocaml-dev llvm llvm-dev llvm-runtime clang clang-tools libclang-dev libclang1 clang-format clangd clang-tidy lldb lld libc++-dev libc++abi-dev libunwind-dev libc++1 libc++abi1", "sudo apt autoremove -y", "sudo apt clean -y", "cmake --version", @@ -73,7 +68,7 @@ "cwd": "${HOMESCREEN_BUILD_DIR}", "cmds": [ "cmake -GNinja ${HOMESCREEN_SRC_DIR} ${HOMESCREEN_CMAKE_ARGS}", - "ninja homescreen" + "ninja flutter-auto" ] } ] @@ -81,7 +76,7 @@ "overwrite-existing": true, "custom-device": { "id": "desktop-auto", - "label": "Toyota AGL flutter-auto", + "label": "Toyota flutter-auto", "sdkNameAndVersion": "flutter-auto x86_64", "platform": "linux-x64", "enabled": true, @@ -95,4 +90,4 @@ "forwardPortSuccessRegex": null, "screenshot": null } -}
\ No newline at end of file +} diff --git a/meta-netboot/recipes-core/initramfs-netboot/files/init.sh b/meta-netboot/recipes-core/initramfs-netboot/files/init.sh index 87a1acb80..4a4af3180 100644 --- a/meta-netboot/recipes-core/initramfs-netboot/files/init.sh +++ b/meta-netboot/recipes-core/initramfs-netboot/files/init.sh @@ -144,12 +144,21 @@ pivot_root . boot/initramfs || bail_out "pivot_root failed." if [[ -f /lib/systemd/system/connman.service ]]; then newopts="-r -n" iface=$(find_active_interface) - [[ -n "$iface" ]] && newopts="$newopts -I $iface" + # beside discovered iface, also ignore known renames + [[ -n "$iface" ]] && newopts="$newopts -I ${iface},enp2s0,enp3s0,end0,enp0s2,enp0s1 " log_info "Adjusting Connman command line. Will be: 'connmand $newopts'" sed -i "s|connmand -n\$|connmand $newopts|g" /lib/systemd/system/connman.service fi +# workaround for systemd-network-generator bringing the interface up/down/up +if [[ -f /usr/lib/systemd/system/systemd-network-generator.service ]] ; then + mkdir /etc/systemd/system/systemd-network-generator.service.d/ + echo "[Unit]" > /etc/systemd/system/systemd-network-generator.service.d/10_disable_nbd.conf + echo "ConditionKernelCommandLine=!nbd.server" >> /etc/systemd/system/systemd-network-generator.service.d/10_disable_nbd.conf +fi + + # also use /proc/net/pnp to generate /etc/resolv.conf rm -f /etc/resolv.conf grep -v bootserver /proc/net/pnp | sed 's/^domain/search/g' >/etc/resolv.conf diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua deleted file mode 100644 index 7e1794df0..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua +++ /dev/null @@ -1,27 +0,0 @@ -components = {} - -function load_module(m) - if not components[m] then - components[m] = { "libwireplumber-module-" .. m, type = "module" } - end -end - -function load_pw_module(m) - if not components[m] then - components[m] = { "libpipewire-module-" .. m, type = "pw_module" } - end -end - -function load_script(s, a) - if not components[s] then - components[s] = { s, type = "script/lua", args = a } - end -end - -function load_monitor(s, a) - load_script("monitors/" .. s .. ".lua", a) -end - -function load_access(s, a) - load_script("access/access-" .. s .. ".lua", a) -end diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf new file mode 100644 index 000000000..7dc8938fc --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf @@ -0,0 +1,5 @@ +context.properties = { + # F=fatal, E=critical, W=warning, N=notice, I=info, D=debug, T=trace + # See https://pipewire.pages.freedesktop.org/wireplumber/daemon/logging.html + log.level = "N" +} diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf new file mode 100644 index 000000000..d029887df --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf @@ -0,0 +1,29 @@ +# This configuration fragment sets up the split-instance profiles to include +# the standard "embedded" configuration of running systemwide without +# maintaining user state across reboots. +# In addition, runtime settings support is disabled on the device monitor +# instances, as it depends on the "sm-settings" metadata, which lives on the +# policy instance. In containerized setups (such as the IC demo), the policy +# instance runs in a container and the device monitors should not wait for it +# or depend on it in any other way. + +wireplumber.profiles = { + policy = { + inherits = [ mixin.systemwide-session, mixin.stateless ] + } + + audio = { + inherits = [ mixin.systemwide-session, mixin.stateless ] + support.settings = disabled + } + + bluetooth = { + inherits = [ mixin.systemwide-session, mixin.stateless ] + support.settings = disabled + } + + video-capture = { + inherits = [ mixin.systemwide-session, mixin.stateless ] + support.settings = disabled + } +} diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf new file mode 100644 index 000000000..9af95413b --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf @@ -0,0 +1,111 @@ +# Default AGL WirePlumber ALSA monitor configuration + +monitor.alsa.rules = [ + # + # Bump priority of well-known output devices + # Higher priority means it gets selected as the default if it's present + # + + # USB output + { + matches = [ + { + node.name = "~alsa_output.*" + api.alsa.card.driver = "USB-Audio" + } + ] + actions = { + update-props = { + priority.driver = 1300 + priority.session = 1300 + } + } + } + + # USB input + { + matches = [ + { + node.name = "~alsa_input.*" + api.alsa.card.driver = "USB-Audio" + } + ] + actions = { + update-props = { + priority.driver = 2300 + priority.session = 2300 + } + } + } + + # well-known internal output devices + { + matches = [ + # ak4613 + { + node.name = "~alsa_output.*" + api.alsa.card.id = "ak4613" + api.alsa.pcm.device = "0" + } + # imx8mq + { + node.name = "~alsa_output.*" + api.alsa.card.id = "wm8524audio" + } + # rcarsound + { + node.name = "~alsa_output.*" + api.alsa.card.id = "rcarsound" + api.alsa.pcm.device = "0" + } + # rpi3 + { + node.name = "~alsa_output.*" + api.alsa.pcm.name = "bcm2835 ALSA" + } + # nanopc-t6 + { + node.name = "~alsa_output.*" + api.alsa.card.id = "realtekrt5616co" + } + ] + actions = { + update-props = { + priority.driver = 1100 + priority.session = 1100 + } + } + } + + # well-known internal input devices + { + matches = [ + # ak4613 + { + node.name = "~alsa_input.*" + api.alsa.card.id = "ak4613" + } + # imx8mq + { + node.name = "~alsa_input.*" + api.alsa.card.id = "wm8524audio" + } + # rcarsound + { + node.name = "~alsa_input.*" + api.alsa.card.id = "rcarsound" + } + # nanopc-t6 + { + node.name = "~alsa_input.*" + api.alsa.card.id = "realtekrt5616co" + } + ] + actions = { + update-props = { + priority.driver = 2100 + priority.session = 2100 + } + } + } +] diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf new file mode 100644 index 000000000..db5b20dc2 --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf @@ -0,0 +1,41 @@ +# Default AGL WirePlumber Bluetooth monitor configuration + +monitor.bluez.properties = { + ## HFP/HSP backend (default: native). + ## Available values: any, none, hsphfpd, ofono, native + bluez5.hfphsp-backend = "ofono" +} + +monitor.bluez.rules = [ + { + matches = [ + { + ## This matches all bluetooth devices. + device.name = "~bluez_card.*" + } + ] + actions = { + update-props = { + ## Auto-connect as headset/sink on start up or when only partial + ## profiles have connected. + bluez5.auto-connect = [ hfp_hf hsp_hs a2dp_sink ] + } + } + } + + # Make output a2dp stream nodes go through the Multimedia sink + # We cannot match on "media.class" here because this property + # is not known before the node is created + { + matches = [ + { + api.bluez5.profile = "a2dp-source" + } + ] + actions = { + update-props = { + media.role = "Multimedia" + } + } + } +] diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf new file mode 100644 index 000000000..93687501c --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf @@ -0,0 +1,15 @@ +wireplumber.profiles = { + # Run on the "audio" instance, which runs the ALSA monitor on the host + audio = { + agl.script.pipewire-ic-ipc.alsa-suspend = required + } +} + +wireplumber.components = [ + # Mutes ALSA sinks when requested by pipewire-ic-ipc + { + name = alsa-suspend.lua, type = script/lua + provides = agl.script.pipewire-ic-ipc.alsa-suspend + requires = [ api.mixer ] + } +] diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf deleted file mode 100644 index 9077e3f45..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf +++ /dev/null @@ -1,74 +0,0 @@ -# WirePlumber daemon context configuration # - -context.properties = { - ## Properties to configure the PipeWire context and some modules - - application.name = "WirePlumber Bluetooth" - log.level = 2 - wireplumber.script-engine = lua-scripting - wireplumber.export-core = true - - #mem.mlock-all = false - #support.dbus = true -} - -context.spa-libs = { - #<factory-name regex> = <library-name> - # - # Used to find spa factory names. It maps an spa factory name - # regular expression to a library name that should contain - # that factory. - # - api.bluez5.* = bluez5/libspa-bluez5 - audio.convert.* = audioconvert/libspa-audioconvert - support.* = support/libspa-support -} - -context.modules = [ - #{ name = <module-name> - # [ args = { <key> = <value> ... } ] - # [ flags = [ [ ifexists ] [ nofail ] ] - #} - # - # PipeWire modules to load. - # If ifexists is given, the module is ignored when it is not found. - # If nofail is given, module initialization failures are ignored. - # - - # The native communication protocol. - { name = libpipewire-module-protocol-native } - - # Allows creating nodes that run in the context of the - # client. Is used by all clients that want to provide - # data to PipeWire. - { name = libpipewire-module-client-node } - - # Allows creating devices that run in the context of the - # client. Is used by the session manager. - { name = libpipewire-module-client-device } - - # Makes a factory for wrapping nodes in an adapter with a - # converter and resampler. - { name = libpipewire-module-adapter } - - # Allows applications to create metadata objects. It creates - # a factory for Metadata objects. - { name = libpipewire-module-metadata } - - # Provides factories to make session manager objects. - { name = libpipewire-module-session-manager } -] - -wireplumber.components = [ - #{ name = <component-name>, type = <component-type> } - # - # WirePlumber components to load - # - - # The lua scripting engine - { name = libwireplumber-module-lua-scripting, type = module } - - # The lua configuration file - # Other components are loaded from there - { name = bluetooth.lua, type = config/lua } -] diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua deleted file mode 100644 index 530f4cc62..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua +++ /dev/null @@ -1,110 +0,0 @@ --- Bluez monitor config file -- - -bluez_monitor = {} - -bluez_monitor.properties = { - -- These features do not work on all headsets, so they are enabled - -- by default based on the hardware database. They can also be - -- forced on/off for all devices by the following options: - - --["bluez5.enable-sbc-xq"] = true, - --["bluez5.enable-msbc"] = true, - --["bluez5.enable-hw-volume"] = true, - - -- See bluez-hardware.conf for the hardware database. - - -- Enabled headset roles (default: [ hsp_hs hfp_ag ]), this - -- property only applies to native backend. Currently some headsets - -- (Sony WH-1000XM3) are not working with both hsp_ag and hfp_ag - -- enabled, disable either hsp_ag or hfp_ag to work around it. - -- - -- Supported headset roles: hsp_hs (HSP Headset), - -- hsp_ag (HSP Audio Gateway), - -- hfp_hf (HFP Hands-Free), - -- hfp_ag (HFP Audio Gateway) - ["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]", - - -- Enabled A2DP codecs (default: all). - --["bluez5.codecs"] = "[ sbc sbc_xq aac ldac aptx aptx_hd aptx_ll aptx_ll_duplex faststream faststream_duplex ]", - - -- HFP/HSP backend (default: native). - -- Available values: any, none, hsphfpd, ofono, native - ["bluez5.hfphsp-backend"] = "ofono", - - -- Properties for the A2DP codec configuration - --["bluez5.default.rate"] = 48000, - --["bluez5.default.channels"] = 2, -} - -bluez_monitor.rules = { - -- An array of matches/actions to evaluate. - { - -- Rules for matching a device or node. It is an array of - -- properties that all need to match the regexp. If any of the - -- matches work, the actions are executed for the object. - matches = { - { - -- This matches all cards. - { "device.name", "matches", "bluez_card.*" }, - }, - }, - -- Apply properties on the matched object. - apply_properties = { - -- Auto-connect device profiles on start up or when only partial - -- profiles have connected. Disabled by default if the property - -- is not specified. - --["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]", - ["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink ]", - - -- Hardware volume control (default: [ hfp_ag hsp_ag a2dp_source ]) - --["bluez5.hw-volume"] = "[ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]", - - -- LDAC encoding quality - -- Available values: auto (Adaptive Bitrate, default) - -- hq (High Quality, 990/909kbps) - -- sq (Standard Quality, 660/606kbps) - -- mq (Mobile use Quality, 330/303kbps) - --["bluez5.a2dp.ldac.quality"] = "auto", - - -- AAC variable bitrate mode - -- Available values: 0 (cbr, default), 1-5 (quality level) - --["bluez5.a2dp.aac.bitratemode"] = 0, - - -- Profile connected first - -- Available values: a2dp-sink (default), headset-head-unit - --["device.profile"] = "a2dp-sink", - }, - }, - { - -- Make output hsp/hfp stream nodes go through the Communication endpoint - -- Unfortunately we cannot match on "media.class" because this property - -- is not known before the node is created - matches = { - { - { "api.bluez5.profile", "equals", "headset-audio-gateway" }, - { "factory.name", "matches", "*source*" }, - }, - }, - apply_properties = { - ["media.role"] = "Communication", - }, - }, - { - -- Make output a2dp stream nodes go through the Multimedia endpoint - -- Unfortunately we cannot match on "media.class" because this property - -- is not known before the node is created - matches = { - { - { "api.bluez5.profile", "equals", "a2dp-source" }, - }, - }, - apply_properties = { - ["media.role"] = "Multimedia", - }, - }, -} - -load_monitor("bluez", { - properties = bluez_monitor.properties, - rules = bluez_monitor.rules, -}) diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua deleted file mode 100644 index d07f7ab85..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua +++ /dev/null @@ -1,151 +0,0 @@ --- ALSA monitor config file -- - -alsa_monitor = {} - -alsa_monitor.properties = { - ["alsa.jack-device"] = false, - ["alsa.reserve"] = false, -} - -alsa_monitor.rules = { - -- enable ACP (PulseAudio-like profiles) - { - matches = { - { - { "device.name", "matches", "alsa_card.*" }, - }, - }, - apply_properties = { - ["api.alsa.use-acp"] = true, - }, - }, - - -- - -- Bump priority of well-known output devices - -- Higher priority means it gets selected as the default if it's present - -- - - -- USB card - { - matches = { - { - { "node.name", "matches", "alsa_output.*" }, - { "api.alsa.card.driver", "=", "USB-Audio" }, - }, - }, - apply_properties = { - ["priority.driver"] = 1300, - ["priority.session"] = 1300, - } - }, - - -- fiberdyne amp - { - matches = { - { - { "node.name", "matches", "alsa_output.*" }, - { "api.alsa.card.id", "=", "ep016ch" }, - }, - }, - apply_properties = { - ["priority.driver"] = 1200, - ["priority.session"] = 1200, - } - }, - - -- well-known internal devices - { - matches = { - { - -- ak4613 - { "node.name", "matches", "alsa_output.*" }, - { "api.alsa.card.id", "=", "ak4613" }, - { "api.alsa.pcm.device", "=", "0" }, - }, - { - -- imx8mq - { "node.name", "matches", "alsa_output.*" }, - { "api.alsa.card.id", "=", "wm8524audio" }, - }, - { - -- rcarsound - { "node.name", "matches", "alsa_output.*" }, - { "api.alsa.card.id", "=", "rcarsound" }, - { "api.alsa.pcm.device", "=", "0" }, - }, - { - -- rpi3 - { "node.name", "matches", "alsa_output.*" }, - { "api.alsa.pcm.name", "=", "bcm2835 ALSA" }, - }, - }, - apply_properties = { - ["priority.driver"] = 1100, - ["priority.session"] = 1100, - } - }, - - -- - -- Same for input devices - -- - - -- USB card - { - matches = { - { - { "node.name", "matches", "alsa_input.*" }, - { "api.alsa.card.driver", "=", "USB-Audio" }, - }, - }, - apply_properties = { - ["priority.driver"] = 2300, - ["priority.session"] = 2300, - } - }, - - -- microchip mic - { - matches = { - { - { "node.name", "matches", "alsa_input.*" }, - { "api.alsa.card.id", "=", "ep811ch" }, - }, - }, - apply_properties = { - ["priority.driver"] = 2200, - ["priority.session"] = 2200, - } - }, - - -- well-known internal devices - { - matches = { - { - -- ak4613 - { "node.name", "matches", "alsa_input.*" }, - { "api.alsa.card.id", "=", "ak4613" }, - }, - { - -- imx8mq - { "node.name", "matches", "alsa_input.*" }, - { "api.alsa.card.id", "=", "wm8524audio" }, - }, - { - -- rcarsound - { "node.name", "matches", "alsa_input.*" }, - { "api.alsa.card.id", "=", "rcarsound" }, - }, - }, - apply_properties = { - ["priority.driver"] = 2100, - ["priority.session"] = 2100, - } - }, -} - -function alsa_monitor.enable() - load_monitor("alsa", { - properties = alsa_monitor.properties, - rules = alsa_monitor.rules, - }) -end diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua deleted file mode 100644 index a4eb58ac8..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua +++ /dev/null @@ -1,48 +0,0 @@ --- V4L2 monitor config file -- - -v4l2_monitor = {} -v4l2_monitor.properties = {} - -v4l2_monitor.rules = { - -- An array of matches/actions to evaluate. - { - -- Rules for matching a device or node. It is an array of - -- properties that all need to match the regexp. If any of the - -- matches work, the actions are executed for the object. - matches = { - { - -- This matches all cards. - { "device.name", "matches", "v4l2_device.*" }, - }, - }, - -- Apply properties on the matched object. - apply_properties = { - -- ["device.nick"] = "My Device", - }, - }, - { - matches = { - { - -- Matches all sources. - { "node.name", "matches", "v4l2_input.*" }, - }, - { - -- Matches all sinks. - { "node.name", "matches", "v4l2_output.*" }, - }, - }, - apply_properties = { - --["node.nick"] = "My Node", - --["priority.driver"] = 100, - --["priority.session"] = 100, - --["node.pause-on-idle"] = false, - }, - }, -} - -function v4l2_monitor.enable() - load_monitor("v4l2", { - properties = v4l2_monitor.properties, - rules = v4l2_monitor.rules, - }) -end diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua deleted file mode 100644 index e0d332422..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua +++ /dev/null @@ -1,26 +0,0 @@ -device_defaults = {} - -device_defaults.properties = { - -- store preferences to the file system and restore them at startup; - -- when set to false, default nodes and routes are selected based on - -- their priorities and any runtime changes do not persist after restart - ["use-persistent-storage"] = false, -} - -function device_defaults.enable() - -- Selects appropriate default nodes and enables saving and restoring them - load_module("default-nodes", device_defaults.properties) - - -- Selects appropriate default routes ("ports" in pulseaudio terminology) - -- and enables saving and restoring them together with - -- their properties (per-route/port volume levels, channel maps, etc) - load_script("policy-device-routes.lua", device_defaults.properties) - - if device_defaults.properties["use-persistent-storage"] then - -- Enables functionality to save and restore default device profiles - load_module("default-profile") - - -- Save and restore stream-specific properties - load_script("restore-stream.lua") - end -end diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua deleted file mode 100644 index ecb7da476..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua +++ /dev/null @@ -1,20 +0,0 @@ --- Provide the "default" pw_metadata, which stores --- dynamic properties of pipewire objects in RAM -load_module("metadata") - --- Load devices -alsa_monitor.enable() -v4l2_monitor.enable() - --- Track/store/restore user choices about devices -device_defaults.enable() - --- Automatically suspends idle nodes after 3 seconds -load_script("suspend-node.lua") - --- Automatically sets device profiles to 'On' -load_script("policy-device-profile.lua") - --- Mute ALSA sinks when requested by pipewire-ic-ipc -load_module("mixer-api") -load_script("alsa-suspend.lua") diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf deleted file mode 100644 index 46ad11302..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf +++ /dev/null @@ -1,115 +0,0 @@ -# WirePlumber daemon context configuration # - -context.properties = { - ## Properties to configure the PipeWire context and some modules - - # 1=error/critical/warning, 2=message, 3=info, 4=debug, 5=trace - log.level = 2 - - wireplumber.script-engine = lua-scripting -} - -context.spa-libs = { - #<factory-name regex> = <library-name> - # - # Used to find spa factory names. It maps an spa factory name - # regular expression to a library name that should contain - # that factory. - # - api.alsa.* = alsa/libspa-alsa - api.bluez5.* = bluez5/libspa-bluez5 - api.v4l2.* = v4l2/libspa-v4l2 - api.libcamera.* = libcamera/libspa-libcamera - audio.convert.* = audioconvert/libspa-audioconvert - support.* = support/libspa-support -} - -context.modules = [ - #{ name = <module-name> - # [ args = { <key> = <value> ... } ] - # [ flags = [ [ ifexists ] [ nofail ] ] - #} - # - # PipeWire modules to load. - # If ifexists is given, the module is ignored when it is not found. - # If nofail is given, module initialization failures are ignored. - # - - # The native communication protocol. - { name = libpipewire-module-protocol-native } - - # Allows creating nodes that run in the context of the - # client. Is used by all clients that want to provide - # data to PipeWire. - { name = libpipewire-module-client-node } - - # Allows creating devices that run in the context of the - # client. Is used by the session manager. - { name = libpipewire-module-client-device } - - # Makes a factory for wrapping nodes in an adapter with a - # converter and resampler. - { name = libpipewire-module-adapter } - - # Allows applications to create metadata objects. It creates - # a factory for Metadata objects. - { name = libpipewire-module-metadata } - - # Provides factories to make session manager objects. - { name = libpipewire-module-session-manager } - - { name = libpipewire-module-filter-chain - args = { - node.description = "Equalizer Sink" - media.name = "Equalizer Sink" - filter.graph = { - nodes = [ - { - type = builtin - name = bass - label = bq_lowshelf - # the cut off freq of the bass filter can be adjusted here. - control = { "Freq" = 250.0 "Q" = 1.0 "Gain" = 0.0 } - } - { - type = builtin - name = treble - label = bq_peaking - # the cut off freq of the treble filter can be adjusted here. - control = { "Freq" = 6000.0 "Q" = 1.0 "Gain" = 0.0 } - } - ] - links = [ - { output = "bass:Out" input = "treble:In" } - ] - } - audio.channels = 2 - audio.position = [ FL FR ] - capture.props = { - node.name = "eq-sink" - media.class = Audio/Sink - # select the endpoint to which the node is attached - target.endpoint = "endpoint.multimedia" - node.passive = true - } - playback.props = { - node.name = "eq-output-stream" - node.passive = true - } - } - } -] - -wireplumber.components = [ - #{ name = <component-name>, type = <component-type> } - # - # WirePlumber components to load - # - - # The lua scripting engine - { name = libwireplumber-module-lua-scripting, type = module } - - # The lua configuration file(s) - # Other components are loaded from there - { name = host.lua, type = config/lua } -] diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb index 22ffe5bf3..db2c67dcf 100644 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl_git.bb @@ -6,12 +6,12 @@ SECTION = "multimedia" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" SRC_URI = "\ - file://bluetooth.lua.d/ \ - file://host.lua.d/ \ - file://00-functions.lua \ + file://20-AGL-log.conf \ + file://20-AGL-profiles.conf \ + file://30-AGL-alsa.conf \ + file://30-AGL-bluetooth.conf \ + file://50-AGL-pw-ic-ipc.conf \ file://alsa-suspend.lua \ - file://bluetooth.conf \ - file://wireplumber.conf \ file://wireplumber-bluetooth.conf \ " PACKAGE_ARCH = "${MACHINE_ARCH}" @@ -19,27 +19,20 @@ PACKAGE_ARCH = "${MACHINE_ARCH}" do_configure[noexec] = "1" do_compile[noexec] = "1" do_install:append() { - config_dir="${D}${sysconfdir}/wireplumber/" + config_dir="${D}${sysconfdir}/wireplumber/wireplumber.conf.d/" scripts_dir="${D}${datadir}/wireplumber/scripts/" dbus_config_dir="${D}${sysconfdir}/dbus-1/system.d/" systemd_dir="${D}${sysconfdir}/systemd/system/pipewire.service.wants/" + # install the configuration fragments install -d ${config_dir} - install -m 0644 ${WORKDIR}/00-functions.lua ${config_dir} + install -m 0644 ${WORKDIR}/20-AGL-log.conf ${config_dir} + install -m 0644 ${WORKDIR}/20-AGL-profiles.conf ${config_dir} + install -m 0644 ${WORKDIR}/30-AGL-alsa.conf ${config_dir} + install -m 0644 ${WORKDIR}/30-AGL-bluetooth.conf ${config_dir} + install -m 0644 ${WORKDIR}/50-AGL-pw-ic-ipc.conf ${config_dir} - # config of the main (host) instance - install -d ${config_dir}/host.lua.d/ - ln -s ../00-functions.lua ${config_dir}/host.lua.d/00-functions.lua - install -m 0644 ${WORKDIR}/host.lua.d/*.lua ${config_dir}/host.lua.d/ - install -m 0644 ${WORKDIR}/wireplumber.conf ${config_dir} - - # config of the bluetooth instance - install -d ${config_dir}/bluetooth.lua.d/ - ln -s ../00-functions.lua ${config_dir}/bluetooth.lua.d/00-functions.lua - install -m 0644 ${WORKDIR}/bluetooth.lua.d/*.lua ${config_dir}/bluetooth.lua.d/ - install -m 0644 ${WORKDIR}/bluetooth.conf ${config_dir} - - # install the alsa-suspend script, loaded by the main instance + # install the alsa-suspend script, loaded by the audio instance install -d ${scripts_dir} install -m 0644 ${WORKDIR}/alsa-suspend.lua ${scripts_dir} @@ -49,6 +42,8 @@ do_install:append() { # enable additional systemd services install -d ${systemd_dir} + ln -s ${systemd_system_unitdir}/wireplumber@.service ${systemd_dir}/wireplumber@audio.service + ln -s ${systemd_system_unitdir}/wireplumber@.service ${systemd_dir}/wireplumber@video-capture.service ln -s ${systemd_system_unitdir}/wireplumber@.service ${systemd_dir}/wireplumber@bluetooth.service } diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua deleted file mode 100644 index 7e1794df0..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/00-functions.lua +++ /dev/null @@ -1,27 +0,0 @@ -components = {} - -function load_module(m) - if not components[m] then - components[m] = { "libwireplumber-module-" .. m, type = "module" } - end -end - -function load_pw_module(m) - if not components[m] then - components[m] = { "libpipewire-module-" .. m, type = "pw_module" } - end -end - -function load_script(s, a) - if not components[s] then - components[s] = { s, type = "script/lua", args = a } - end -end - -function load_monitor(s, a) - load_script("monitors/" .. s .. ".lua", a) -end - -function load_access(s, a) - load_script("access/access-" .. s .. ".lua", a) -end diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-equalizer.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-equalizer.conf new file mode 100644 index 000000000..061eae96c --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-equalizer.conf @@ -0,0 +1,75 @@ +wireplumber.profiles = { + policy = { + agl.filter.equalizer-sink = required + } +} + +wireplumber.components = [ + { + name = libpipewire-module-filter-chain, type = pw-module + arguments = { + node.description = "Equalizer Sink" + media.name = "Equalizer Sink" + filter.graph = { + nodes = [ + { + type = builtin + name = bass + label = bq_lowshelf + # the cut off freq of the bass filter can be adjusted here. + control = { "Freq" = 250.0 "Q" = 1.0 "Gain" = 0.0 } + } + { + type = builtin + name = treble + label = bq_peaking + # the cut off freq of the treble filter can be adjusted here. + control = { "Freq" = 6000.0 "Q" = 1.0 "Gain" = 0.0 } + } + ] + links = [ + { output = "bass:Out" input = "treble:In" } + ] + } + audio.channels = 2 + audio.position = [ FL FR ] + capture.props = { + node.name = "eq-sink" + + # this is a sink filter, so it will appear as a sink in wpctl/pactl/etc, + # it will target a sink and can be chained with other sink smart filters + media.class = Audio/Sink + + # treat this as a smart filter + filter.smart = true + + # the unique name of the filter + filter.smart.name = "agl.filter.equalizer-sink" + + ## set this to always link the filter to a particular sink + ## or leave it unset in order to follow the default sink + #filter.smart.target = { node.name = "alsa_output.pci-0000_00_01.0.analog-stereo" } + + ## here you can specify filter dependencies, using their names + ## (filter.smart.name) if you set up many of them to be linked in a chain + #filter.smart.before = [] + #filter.smart.after = [] + } + playback.props = { + node.name = "eq-output-stream" + + # This must be set to ensure that the real audio sink is suspended + # when there is no active client stream linked + node.passive = true + + # Set this to avoid linking the filter to role-based sinks when + # role-based sinks are defined and node.stream.default-media-role is + # configured in the settings + media.role = "DSP" + } + } + provides = agl.filter.equalizer-sink + requires = [ pw.node-factory.adapter ] + after = [ support.standard-event-source ] + } +] diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-media-role-nodes.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-media-role-nodes.conf new file mode 100644 index 000000000..4e4f3323f --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/50-AGL-media-role-nodes.conf @@ -0,0 +1,184 @@ +wireplumber.profiles = { + policy = { + agl.policy.linking.role-based.loopbacks = required + } +} + +wireplumber.settings = { + # This sets a default media role to be applied to streams that don't have + # a role already set. This allows you to force all streams to go through + # the role loopbacks. If not set, then streams without a role will follow + # the standard desktop policy and will link to the default sink + node.stream.default-media-role = "Multimedia" + + # The volume level that is applied when ducking + # Note that this is a raw linear volume, not cubic (0.2 is 58%) + linking.role-based.duck-level = 0.2 + + # Do not allow changing the targets of streams via `target.object` metadata + linking.allow-moving-streams = false +} + +wireplumber.components.rules = [ + # This encodes common arguments and dependencies of the role loopbacks so that + # we don't have to repeateadly write them on all instances below + { + matches = [ + { + provides = "~loopback.sink.*" + } + ] + actions = { + merge = { + arguments = { + capture.props = { + # Explicitly mark all these sinks as valid role-based policy + # targets, meaning that any links between streams and these sinks + # will be managed by the role-based policy + policy.role-based.target = true + + audio.position = [ FL, FR ] + media.class = Audio/Sink + } + playback.props = { + # This must be set to ensure that the real audio sink is suspended + # when there is no active client stream linked + node.passive = true + # Set this to an unused role to make sure that loopbacks don't + # accidentally chain-link on to one another, especially when + # node.stream.default-media-role is configured in the settings + media.role = "Loopback" + } + } + requires = [ pw.node-factory.adapter ] + after = [ support.standard-event-source ] + } + } + } +] + +wireplumber.components = [ + { + type = virtual, provides = agl.policy.linking.role-based.loopbacks + requires = [ loopback.sink.role.multimedia + loopback.sink.role.speech-low + loopback.sink.role.custom-low + loopback.sink.role.navigation + loopback.sink.role.speech-high + loopback.sink.role.custom-high + loopback.sink.role.communication + loopback.sink.role.emergency ] + } + { + name = libpipewire-module-loopback, type = pw-module + arguments = { + node.name = "loopback.sink.role.multimedia" + node.description = "Multimedia" + capture.props = { + device.intended-roles = [ "Music", "Movie", "Game", "Multimedia" ] + policy.role-based.priority = 25 + policy.role-based.action.same-priority = "mix" + policy.role-based.action.lower-priority = "mix" + } + } + provides = loopback.sink.role.multimedia + } + { + name = libpipewire-module-loopback, type = pw-module + arguments = { + node.name = "loopback.sink.role.speech-low" + node.description = "Speech (Low Priority)" + capture.props = { + device.intended-roles = [ "Speech-Low" ] + policy.role-based.priority = 30 + policy.role-based.action.same-priority = "mix" + policy.role-based.action.lower-priority = "cork" + } + } + provides = loopback.sink.role.speech-low + } + { + name = libpipewire-module-loopback, type = pw-module + arguments = { + node.name = "loopback.sink.role.custom-low" + node.description = "Custom role (Low Priority)" + capture.props = { + device.intended-roles = [ "Custom-Low" ] + policy.role-based.priority = 35 + policy.role-based.action.same-priority = "mix" + policy.role-based.action.lower-priority = "cork" + } + } + provides = loopback.sink.role.custom-low + } + { + name = libpipewire-module-loopback, type = pw-module + arguments = { + node.name = "loopback.sink.role.navigation" + node.description = "Navigation" + capture.props = { + device.intended-roles = [ "Navigation" ] + policy.role-based.priority = 50 + policy.role-based.action.same-priority = "mix" + policy.role-based.action.lower-priority = "duck" + } + } + provides = loopback.sink.role.navigation + } + { + name = libpipewire-module-loopback, type = pw-module + arguments = { + node.name = "loopback.sink.role.speech-high" + node.description = "Speech (High Priority)" + capture.props = { + device.intended-roles = [ "Speech-High" ] + policy.role-based.priority = 60 + policy.role-based.action.same-priority = "mix" + policy.role-based.action.lower-priority = "cork" + } + } + provides = loopback.sink.role.speech-high + } + { + name = libpipewire-module-loopback, type = pw-module + arguments = { + node.name = "loopback.sink.role.custom-high" + node.description = "Custom role (High Priority)" + capture.props = { + device.intended-roles = [ "Custom-High" ] + policy.role-based.priority = 65 + policy.role-based.action.same-priority = "mix" + policy.role-based.action.lower-priority = "cork" + } + } + provides = loopback.sink.role.custom-high + } + { + name = libpipewire-module-loopback, type = pw-module + arguments = { + node.name = "loopback.sink.role.communication" + node.description = "Communication" + capture.props = { + device.intended-roles = [ "Communication" ] + policy.role-based.priority = 75 + policy.role-based.action.same-priority = "mix" + policy.role-based.action.lower-priority = "cork" + } + } + provides = loopback.sink.role.communication + } + { + name = libpipewire-module-loopback, type = pw-module + arguments = { + node.name = "loopback.sink.role.emergency" + node.description = "Emergency" + capture.props = { + device.intended-roles = [ "Emergency", "Alert" ] + policy.role-based.priority = 99 + policy.role-based.action.same-priority = "mix" + policy.role-based.action.lower-priority = "cork" + } + } + provides = loopback.sink.role.emergency + } +] diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf deleted file mode 100644 index 42f714849..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.conf +++ /dev/null @@ -1,73 +0,0 @@ -# WirePlumber daemon context configuration # - -context.properties = { - ## Properties to configure the PipeWire context and some modules - - application.name = "WirePlumber Policy" - log.level = 2 - wireplumber.script-engine = lua-scripting - wireplumber.export-core = false - - #mem.mlock-all = false - #support.dbus = true -} - -context.spa-libs = { - #<factory-name regex> = <library-name> - # - # Used to find spa factory names. It maps an spa factory name - # regular expression to a library name that should contain - # that factory. - # - audio.convert.* = audioconvert/libspa-audioconvert - support.* = support/libspa-support -} - -context.modules = [ - #{ name = <module-name> - # [ args = { <key> = <value> ... } ] - # [ flags = [ [ ifexists ] [ nofail ] ] - #} - # - # PipeWire modules to load. - # If ifexists is given, the module is ignored when it is not found. - # If nofail is given, module initialization failures are ignored. - # - - # The native communication protocol. - { name = libpipewire-module-protocol-native } - - # Allows creating nodes that run in the context of the - # client. Is used by all clients that want to provide - # data to PipeWire. - { name = libpipewire-module-client-node } - - # Allows creating devices that run in the context of the - # client. Is used by the session manager. - { name = libpipewire-module-client-device } - - # Makes a factory for wrapping nodes in an adapter with a - # converter and resampler. - { name = libpipewire-module-adapter } - - # Allows applications to create metadata objects. It creates - # a factory for Metadata objects. - { name = libpipewire-module-metadata } - - # Provides factories to make session manager objects. - { name = libpipewire-module-session-manager } -] - -wireplumber.components = [ - #{ name = <component-name>, type = <component-type> } - # - # WirePlumber components to load - # - - # The lua scripting engine - { name = libwireplumber-module-lua-scripting, type = module } - - # The lua configuration file - # Other components are loaded from there - { name = policy.lua, type = config/lua } -] diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua deleted file mode 100644 index 6814fce4d..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl/policy.lua.d/10-default-policy.lua +++ /dev/null @@ -1,137 +0,0 @@ --- Policy config file -- - -policy_config = {} - -policy_config.endpoints = { - -- [endpoint name] = { endpoint properties } - ["endpoint.capture"] = { - ["media.class"] = "Audio/Source", - ["role"] = "Capture", - }, - ["endpoint.multimedia"] = { - ["media.class"] = "Audio/Sink", - ["role"] = "Multimedia", - }, - ["endpoint.speech_low"] = { - ["media.class"] = "Audio/Sink", - ["role"] = "Speech-Low", - }, - ["endpoint.custom_low"] = { - ["media.class"] = "Audio/Sink", - ["role"] = "Custom-Low", - }, - ["endpoint.navigation"] = { - ["media.class"] = "Audio/Sink", - ["role"] = "Navigation", - }, - ["endpoint.speech_high"] = { - ["media.class"] = "Audio/Sink", - ["role"] = "Speech-High", - }, - ["endpoint.custom_high"] = { - ["media.class"] = "Audio/Sink", - ["role"] = "Custom-High", - }, - ["endpoint.communication"] = { - ["media.class"] = "Audio/Sink", - ["role"] = "Communication", - }, - ["endpoint.emergency"] = { - ["media.class"] = "Audio/Sink", - ["role"] = "Emergency", - }, -} - -policy_config.policy = { - ["move"] = false, -- moves session items when metadata target.node changes - ["follow"] = true, -- moves session items to the default device when it has changed - - -- Set to 'true' to disable channel splitting & merging on nodes and enable - -- passthrough of audio in the same format as the format of the device. - -- Note that this breaks JACK support; it is generally not recommended - ["audio.no-dsp"] = false, - - -- how much to lower the volume of lower priority streams when ducking - -- note that this is a linear volume modifier (not cubic as in pulseaudio) - ["duck.level"] = 0.2, - - ["roles"] = { - ["Capture"] = { - ["alias"] = { "Multimedia", "Music", "Voice", "Capture" }, - ["priority"] = 25, - ["action.default"] = "cork", - ["action.Capture"] = "mix", - ["media.class"] = "Audio/Source", - }, - ["Multimedia"] = { - ["alias"] = { "Movie", "Music", "Game" }, - ["priority"] = 25, - ["action.default"] = "mix", - }, - ["Speech-Low"] = { - ["priority"] = 30, - ["action.default"] = "cork", - ["action.Speech-Low"] = "mix", - }, - ["Custom-Low"] = { - ["priority"] = 35, - ["action.default"] = "cork", - ["action.Custom-Low"] = "mix", - }, - ["Navigation"] = { - ["priority"] = 50, - ["action.default"] = "duck", - ["action.Navigation"] = "mix", - }, - ["Speech-High"] = { - ["priority"] = 60, - ["action.default"] = "cork", - ["action.Speech-High"] = "mix", - }, - ["Custom-High"] = { - ["priority"] = 65, - ["action.default"] = "cork", - ["action.Custom-High"] = "mix", - }, - ["Communication"] = { - ["priority"] = 75, - ["action.default"] = "cork", - ["action.Communication"] = "mix", - }, - ["Emergency"] = { - ["alias"] = { "Alert" }, - ["priority"] = 99, - ["action.default"] = "cork", - ["action.Emergency"] = "mix", - }, - }, -} - --- Session item factories, building blocks for the session management graph --- Do not disable these unless you really know what you are doing -load_module("si-node") -load_module("si-audio-adapter") -load_module("si-standard-link") -load_module("si-audio-endpoint") - --- API to access default nodes from scripts -load_module("default-nodes-api") - --- API to access mixer controls, needed for volume ducking -load_module("mixer-api") - --- Create endpoints statically at startup -load_script("static-endpoints.lua", policy_config.endpoints) - --- Create session items for nodes that appear in the graph -load_script("create-item.lua", policy_config.policy) - --- Link nodes to each other to make media flow in the graph -load_script("policy-node.lua", policy_config.policy) - --- Link client nodes with endpoints to make media flow in the graph -load_script("policy-endpoint-client.lua", policy_config.policy) -load_script("policy-endpoint-client-links.lua", policy_config.policy) - --- Link endpoints with device nodes to make media flow in the graph -load_script("policy-endpoint-device.lua", policy_config.policy) diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb index 1a031160e..7973a0a33 100644 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-policy-config-agl_git.bb @@ -6,26 +6,20 @@ SECTION = "multimedia" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" SRC_URI = "\ - file://policy.lua.d \ - file://00-functions.lua \ - file://policy.conf \ + file://50-AGL-equalizer.conf \ + file://50-AGL-media-role-nodes.conf \ " PACKAGE_ARCH = "${MACHINE_ARCH}" do_configure[noexec] = "1" do_compile[noexec] = "1" do_install:append() { - config_dir="${D}${sysconfdir}/wireplumber/" + config_dir="${D}${sysconfdir}/wireplumber/wireplumber.conf.d/" systemd_dir="${D}${sysconfdir}/systemd/system/pipewire.service.wants" install -d ${config_dir} - install -m 0644 ${WORKDIR}/00-functions.lua ${config_dir} - - # config of the policy instance - install -d ${config_dir}/policy.lua.d/ - ln -s ../00-functions.lua ${config_dir}/policy.lua.d/00-functions.lua - install -m 0644 ${WORKDIR}/policy.lua.d/*.lua ${config_dir}/policy.lua.d/ - install -m 0644 ${WORKDIR}/policy.conf ${config_dir} + install -m 0644 ${WORKDIR}/50-AGL-equalizer.conf ${config_dir} + install -m 0644 ${WORKDIR}/50-AGL-media-role-nodes.conf ${config_dir} # enable additional systemd services install -d ${systemd_dir} diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_%.bbappend b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_%.bbappend new file mode 100644 index 000000000..16d3817cd --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_%.bbappend @@ -0,0 +1,9 @@ +do_install:append() { + systemd_dir="${D}${sysconfdir}/systemd/system/" + + # mask the main service, to enable split-instance configuration + # accomodated by the services installed in wireplumber-config-agl + # and wireplumber-policy-config-agl + install -d ${systemd_dir} + ln -s /dev/null ${systemd_dir}/wireplumber.service +} diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_0.5.6.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_0.5.6.bb new file mode 100644 index 000000000..d7fecd18b --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_0.5.6.bb @@ -0,0 +1,138 @@ +SUMMARY = "Session / policy manager implementation for PipeWire" +HOMEPAGE = "https://gitlab.freedesktop.org/pipewire/wireplumber" +BUGTRACKER = "https://gitlab.freedesktop.org/pipewire/wireplumber/issues" +SECTION = "multimedia" + +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=17d1fe479cdec331eecbc65d26bc7e77" + +DEPENDS = "glib-2.0 glib-2.0-native lua pipewire \ + ${@bb.utils.contains("DISTRO_FEATURES", "gobject-introspection-data", "python3-native python3-lxml-native doxygen-native", "", d)} \ +" + +SRCREV = "141b2d5d3f793e20f94421c554d8d9c51143ce0d" +SRC_URI = " \ + git://gitlab.freedesktop.org/pipewire/wireplumber.git;branch=master;protocol=https \ +" + +S = "${WORKDIR}/git" + +inherit meson pkgconfig gobject-introspection systemd + +GIR_MESON_ENABLE_FLAG = 'enabled' +GIR_MESON_DISABLE_FLAG = 'disabled' + +# Enable system-lua to let wireplumber use OE's lua. +# Documentation needs python-sphinx, which is not in oe-core or meta-python2 for now. +# elogind is not (yet) available in OE, so disable support. +EXTRA_OEMESON += " \ + -Ddoc=disabled \ + -Dsystem-lua=true \ + -Delogind=disabled \ + -Dsystemd-system-unit-dir=${systemd_system_unitdir} \ + -Dsystemd-user-unit-dir=${systemd_user_unitdir} \ + -Dtests=false \ +" + +PACKAGECONFIG ??= " dbus \ + ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd systemd-system-service systemd-user-service', '', d)} \ +" + +PACKAGECONFIG[systemd] = "-Dsystemd=enabled,-Dsystemd=disabled,systemd" +PACKAGECONFIG[systemd-system-service] = "-Dsystemd-system-service=true,-Dsystemd-system-service=false,systemd" +# "systemd-user-service" packageconfig will only install service +# files to rootfs but not enable them as systemd.bbclass +# currently lacks the feature of enabling user services. +PACKAGECONFIG[systemd-user-service] = "-Dsystemd-user-service=true,-Dsystemd-user-service=false,systemd" +PACKAGECONFIG[dbus] = "" + +PACKAGESPLITFUNCS:prepend = " split_dynamic_packages " +PACKAGESPLITFUNCS:append = " set_dynamic_metapkg_rdepends " + +WP_MODULE_SUBDIR = "wireplumber-0.5" + +python split_dynamic_packages () { + # Create packages for each WirePlumber module. + wp_module_libdir = d.expand('${libdir}/${WP_MODULE_SUBDIR}') + do_split_packages(d, wp_module_libdir, r'^libwireplumber-module-(.*)\.so$', d.expand('${PN}-modules-%s'), 'WirePlumber %s module', extra_depends='', recursive=False) +} + +python set_dynamic_metapkg_rdepends () { + import os + import oe.utils + + # Go through all generated WirePlumber module packages + # (excluding the main package and the -meta package itself) + # and add them to the -meta package as RDEPENDS. + + base_pn = d.getVar('PN') + + wp_module_pn = base_pn + '-modules' + wp_module_metapkg = wp_module_pn + '-meta' + + d.setVar('ALLOW_EMPTY:' + wp_module_metapkg, "1") + d.setVar('FILES:' + wp_module_metapkg, "") + + blacklist = [ wp_module_pn, wp_module_metapkg ] + wp_module_metapkg_rdepends = [] + pkgdest = d.getVar('PKGDEST') + + for pkg in oe.utils.packages_filter_out_system(d): + if pkg in blacklist: + continue + + is_wp_module_pkg = pkg.startswith(wp_module_pn) + if not is_wp_module_pkg: + continue + + if pkg in wp_module_metapkg_rdepends: + continue + + # See if the package is empty by looking at the contents of its + # PKGDEST subdirectory. If this subdirectory is empty, then then + # package is empty as well. Empty packages do not get added to + # the meta package's RDEPENDS. + pkgdir = os.path.join(pkgdest, pkg) + if os.path.exists(pkgdir): + dir_contents = os.listdir(pkgdir) or [] + else: + dir_contents = [] + is_empty = len(dir_contents) == 0 + if not is_empty: + if is_wp_module_pkg: + wp_module_metapkg_rdepends.append(pkg) + + d.setVar('RDEPENDS:' + wp_module_metapkg, ' '.join(wp_module_metapkg_rdepends)) + d.setVar('DESCRIPTION:' + wp_module_metapkg, wp_module_pn + ' meta package') +} + +PACKAGES =+ "\ + libwireplumber \ + ${PN}-default-config \ + ${PN}-scripts \ + ${PN}-modules \ + ${PN}-modules-meta \ +" + +PACKAGES_DYNAMIC = "^${PN}-modules.*" + +CONFFILES:${PN} += " \ + ${datadir}/wireplumber/wireplumber.conf \ + ${datadir}/wireplumber/wireplumber.conf.d/*.conf \ +" +# Add pipewire to RRECOMMENDS, since WirePlumber expects a PipeWire daemon to +# be present. While in theory any application that uses libpipewire can configure +# itself to become a daemon, in practice, the PipeWire daemon is used. +RRECOMMENDS:${PN} += "pipewire ${PN}-scripts ${PN}-modules-meta" + +FILES:${PN} += "${systemd_user_unitdir} ${systemd_system_unitdir} ${datadir}/zsh" + +FILES:libwireplumber = " \ + ${libdir}/libwireplumber-*.so.* \ +" + +FILES:${PN}-scripts += "${datadir}/wireplumber/scripts/*" + +# Dynamic packages (see set_dynamic_metapkg_rdepends). +FILES:${PN}-modules = "" +RRECOMMENDS:${PN}-modules += "${PN}-modules-meta" diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb deleted file mode 100644 index a04f115c3..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber_git.bb +++ /dev/null @@ -1,85 +0,0 @@ -SUMMARY = "Session / Policy Manager for PipeWire" -HOMEPAGE = "https://gitlab.freedesktop.org/pipewire/wireplumber" -BUGTRACKER = "https://gitlab.freedesktop.org/pipewire/wireplumber/issues" -AUTHOR = "George Kiagiadakis <george.kiagiadakis@collabora.com>" -SECTION = "multimedia" - -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://LICENSE;beginline=3;md5=e8ad01a5182f2c1b3a2640e9ea268264" - -inherit meson pkgconfig systemd - -DEPENDS = "glib-2.0 glib-2.0-native pipewire lua" - -SRC_URI = "\ - git://gitlab.freedesktop.org/pipewire/wireplumber.git;protocol=https;branch=master \ -" -# v0.4.17 -SRCREV = "d3eb77b292655cef333a8f4cab4e861415bc37c2" - -# patches to be able to compile with lower version of meson that is available in AGL. -SRC_URI += "\ -" - -PV = "0.4.17" -S = "${WORKDIR}/git" - -WPAPI="0.4" - -# use shared lua from the system instead of the static bundled one -EXTRA_OEMESON += "-Dsystem-lua=true" - -# introspection in practice is only used for generating API docs -# API docs are available on the website and we don't need to build them -# (plus they depend on hotdoc which is not available here) -EXTRA_OEMESON += "-Dintrospection=disabled -Ddoc=disabled" - -PACKAGECONFIG = "\ - ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \ -" - -PACKAGECONFIG[systemd] = "-Dsystemd=enabled -Dsystemd-system-service=true -Dsystemd-user-service=false,-Dsystemd=disabled -Dsystemd-system-service=false -Dsystemd-user-service=false,systemd" - -do_configure:prepend() { - # relax meson version requirement - # we only need 0.54 when building with -Dsystem-lua=false - sed "s/meson_version : '>= 0.56.0'/meson_version : '>= 0.53.2'/" ${S}/meson.build > ${S}/tmp.build - mv -f ${S}/tmp.build ${S}/meson.build -} - -PACKAGES =+ "\ - lib${PN}-${WPAPI} \ - ${PN}-config \ -" - -SYSTEMD_SERVICE:${PN} = "wireplumber.service" -FILES:${PN} = "\ - ${bindir}/wireplumber \ - ${bindir}/wpctl \ - ${bindir}/wpexec \ - ${libdir}/wireplumber-${WPAPI}/* \ - ${datadir}/wireplumber/scripts/* \ - ${datadir}/zsh/* \ - ${systemd_system_unitdir}/* \ -" - -FILES:lib${PN}-${WPAPI} = "\ - ${libdir}/libwireplumber-${WPAPI}.so.* \ -" - -FILES:${PN}-config += "\ - ${sysconfdir}/wireplumber/* \ - ${datadir}/wireplumber/*conf \ - ${datadir}/wireplumber/common/* \ - ${datadir}/wireplumber/main.lua.d/* \ - ${datadir}/wireplumber/bluetooth.lua.d/* \ - ${datadir}/wireplumber/policy.lua.d/* \ -" -do_install:append() { - rm -rf ${D}${sysconfdir}/wireplumber/ - rm -f ${D}${datadir}/wireplumber/*conf - rm -rf ${D}${datadir}/wireplumber/common - rm -rf ${D}${datadir}/wireplumber/main.lua.d - rm -rf ${D}${datadir}/wireplumber/bluetooth.lua.d - rm -rf ${D}${datadir}/wireplumber/policy.lua.d -} diff --git a/templates/feature/agl-flutter/50_bblayers.conf.inc b/templates/feature/agl-flutter/50_bblayers.conf.inc index 807a46b1c..10647b7a5 100644 --- a/templates/feature/agl-flutter/50_bblayers.conf.inc +++ b/templates/feature/agl-flutter/50_bblayers.conf.inc @@ -1,4 +1,7 @@ AGL_META_CLANG = " ${METADIR}/external/meta-clang " +# Required for libcamera +AGL_META_MULTIMEDIA = "${METADIR}/external/meta-openembedded/meta-multimedia" +AGL_META_PYTHON = "${METADIR}/external/meta-openembedded/meta-python" BBLAYERS =+ " \ ${METADIR}/meta-agl/meta-agl-flutter \ diff --git a/templates/feature/agl-pipewire/50_bblayers.conf.inc b/templates/feature/agl-pipewire/50_bblayers.conf.inc index e05cd4090..613ed97b3 100644 --- a/templates/feature/agl-pipewire/50_bblayers.conf.inc +++ b/templates/feature/agl-pipewire/50_bblayers.conf.inc @@ -1,7 +1,7 @@ +# PipeWire recipe comes from meta-multimedia +AGL_META_MULTIMEDIA = "${METADIR}/external/meta-openembedded/meta-multimedia" +AGL_META_PYTHON = "${METADIR}/external/meta-openembedded/meta-python" BBLAYERS =+ " \ - ${METADIR}/meta-agl/meta-pipewire \ - " - -# we ship our own pipewire -BBMASK += "meta-openembedded/meta-oe/recipes-multimedia/pipewire/" + ${METADIR}/meta-agl/meta-pipewire \ +" diff --git a/templates/machine/nanopc-t6/50_bblayers.conf.inc b/templates/machine/nanopc-t6/50_bblayers.conf.inc new file mode 100644 index 000000000..721a5dca0 --- /dev/null +++ b/templates/machine/nanopc-t6/50_bblayers.conf.inc @@ -0,0 +1,4 @@ +BBLAYERS =+ "\ + ${METADIR}/bsp/meta-rockchip \ + ${METADIR}/bsp/meta-rockchip-extra \ + " diff --git a/templates/machine/nanopc-t6/50_local.conf.inc b/templates/machine/nanopc-t6/50_local.conf.inc new file mode 100644 index 000000000..aa95de143 --- /dev/null +++ b/templates/machine/nanopc-t6/50_local.conf.inc @@ -0,0 +1,3 @@ +MACHINE = "rockchip-rk3588-nanopc-t6" + +require conf/include/agl_rk3588.inc diff --git a/templates/machine/nanopc-t6/README_machine_nanopc-t6.md b/templates/machine/nanopc-t6/README_machine_nanopc-t6.md new file mode 100644 index 000000000..04d4dc44d --- /dev/null +++ b/templates/machine/nanopc-t6/README_machine_nanopc-t6.md @@ -0,0 +1,9 @@ +--- +description: Machine NanoPC-T6 +authors: Naoto Yamaguchi <naoto.yamaguchi@automotivelinux.org> +--- + +### Machine nanopc-t6 + +Rockchip RK3588 SBC. Manufactured by FriendlyElec. + diff --git a/templates/machine/visionfive2/50_bblayers.conf.inc b/templates/machine/visionfive2/50_bblayers.conf.inc new file mode 100644 index 000000000..02a564551 --- /dev/null +++ b/templates/machine/visionfive2/50_bblayers.conf.inc @@ -0,0 +1,2 @@ +# This is the original place, but we need to tweak layer.conf +BBLAYERS =+ "${METADIR}/bsp/meta-riscv" diff --git a/templates/machine/visionfive2/50_local.conf.inc b/templates/machine/visionfive2/50_local.conf.inc new file mode 100644 index 000000000..9e7af0b81 --- /dev/null +++ b/templates/machine/visionfive2/50_local.conf.inc @@ -0,0 +1,4 @@ +MACHINE = "visionfive2" + +#see meta-agl/meta-agl-bsp/conf/include/agl_unmatched.inc +require conf/include/agl_visionfive2.inc |