Bug 13791 - The QEMU compiled by Buildroot does not support alsa or pulseaudio drivers for soundcard forwarding
Summary: The QEMU compiled by Buildroot does not support alsa or pulseaudio drivers fo...
Status: RESOLVED MOVED
Alias: None
Product: buildroot
Classification: Unclassified
Component: Other (show other bugs)
Version: 2021.02.1
Hardware: All Linux
: P5 normal
Target Milestone: ---
Assignee: unassigned
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-05-05 19:42 UTC by WZab
Modified: 2024-06-15 14:58 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:


Attachments
The minimalistic Buildroot config that shows the reported problem (18.00 KB, application/gzip)
2021-05-05 19:42 UTC, WZab
Details
Patch with temporary work-around (292 bytes, text/plain)
2021-05-05 21:45 UTC, WZab
Details
Patch with temporary work-around (663 bytes, patch)
2021-05-05 21:49 UTC, WZab
Details

Note You need to log in before you can comment on or make changes to this bug.
Description WZab 2021-05-05 19:42:02 UTC
Created attachment 8921 [details]
The minimalistic Buildroot config that shows the reported problem

I need to emulate the machine (ARM virt 64-bit) which uses the host (Linux running Debian/testing of Ubuntu 2020.04) soundcard.
Unfortunately, when I try to run the QEMU compiled by the Buildroot, I get:

./qemu-system-aarch64 --audio-help
Environment variable based configuration deprecated.
Please use the new -audiodev option.

Equivalent -audiodev to your current environment variables:
(Since you didn't specify QEMU_AUDIO_DRV, I'll list all possibilities)
-audiodev id=oss,driver=oss
-audiodev id=none,driver=none

When I have modified the audio-drv-list in package/qemu/qemu.mk as below:

define HOST_QEMU_CONFIGURE_CMDS
	unset TARGET_DIR; \
	cd $(@D); $(HOST_CONFIGURE_OPTS) CPP="$(HOSTCC) -E" \
		./configure \
		--target-list="$(HOST_QEMU_TARGETS)" \
		--prefix="$(HOST_DIR)" \
		--interp-prefix=$(STAGING_DIR) \
		--cc="$(HOSTCC)" \
		--host-cc="$(HOSTCC)" \
		--audio-drv-list="alsa,pa,oss" \
		--extra-cflags="$(HOST_QEMU_CFLAGS)" \
		--extra-ldflags="$(HOST_LDFLAGS) -lrt -lm" \
		--meson=$(HOST_DIR)/bin/meson \
		--ninja=$(HOST_DIR)/bin/ninja \
		--disable-bzip2 \
		--disable-containers \
		--disable-curl \
		--disable-libssh \
		--disable-linux-io-uring \
		--disable-sdl \
		--disable-vhost-user-blk-server \
		--disable-virtiofsd \
		--disable-vnc-jpeg \
		--disable-vnc-png \
		--disable-vnc-sasl \
		--disable-tests \
		$(HOST_QEMU_OPTS)

I get the following error:
Using './build' as the directory for build output

ERROR: alsa check failed
       Make sure to have the alsa libs and headers installed.

I have forced the configure script to print the "pkg_config_exe" variable,
and it appears that it uses the compiled 
buildroot-2021.02.01/output/host/bin/pkg-config

Running it by hand, I have stated that it is not aware of the packages "libasound2-dev" and "libpulse-dev" that I have installed in my system.

Running it with "--help" option I've got:
[...]
  --keep-system-cflags              keep -I/tmp/BR/buildroot-2021.02.1/output/host/include entries in cflags output
  --keep-system-libs                keep -L/tmp/BR/buildroot-2021.02.1/output/host/lib entries in libs output
[...]
So it ignores my system libraries and header files!

What can I do to build the QEMU with 

PS. For Buildroot 2020.02 I managed to create a patch that enforces compilation of the alsa and pa drivers:
https://github.com/wzab/BR_Internet_Radio/blob/gpio_simple/QemuVirt64/patches/0002-WZab-host-qemu-patched-for-forced-compilation-of-alsa-and-pa-audio.patch
Unfortunately, it doesn't work with the new, meson-based build flow.
Comment 1 Arnout Vandecappelle 2021-05-05 20:16:45 UTC
You have to add host-alsa-lib and host-pulseaudio to the QEMU_DEPENDENCIES for this to work. Buildroot does not want to depend on anything pre-installed on the host (if you're OK with stuff that is pre-installed on the host, you can just as well install qemu-system-arm, right?)

Of course, currently there is no host package for alsa-lib or pulseaudio, so you'll have to add them first. And pulsaudio has dependencies for which no host package exits either, so this will take a bit of work...
Comment 2 WZab 2021-05-05 20:51:49 UTC
I have extracted the configuration of the libpulse and alsa from the system pkgconf:

$ pkgconf libpulse --libs 
-L/usr/lib/x86_64-linux-gnu -lpulse
$ pkgconf libpulse --cflags
-D_REENTRANT 
$ pkg-config alsa --libs
-L/usr/lib/x86_64-linux-gnu -lasound 
$ pkg-config alsa --cflags


Then I have injected them by hand to the "configure" script in the output/build/host-qemu-5.2.0/ :


##########################################
# Sound support libraries probe

audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
for drv in $audio_drv_list; do
    case $drv in
    alsa | try-alsa)
    if true; then
        alsa_libs="-L/usr/lib/x86_64-linux-gnu -lasound"
        alsa_cflags=""
        alsa=yes
        if test "$drv" = "try-alsa"; then
            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
        fi
    else
        if test "$drv" = "try-alsa"; then
            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
        else
            error_exit "$drv check failed" \
                "Make sure to have the $drv libs and headers installed."
        fi
    fi
    ;;

    pa | try-pa)
    if true; then
        libpulse=yes
        pulse_libs="-L/usr/lib/x86_64-linux-gnu -lpulse"
        pulse_cflags="-D_REENTRANT"
        if test "$drv" = "try-pa"; then
            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
        fi
    else
        if test "$drv" = "try-pa"; then
            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
        else
            error_exit "$drv check failed" \
                "Make sure to have the $drv libs and headers installed."
        fi
    fi
    ;;

After that, and with the following:

# Override CPP, as it expects to be able to call it like it'd
# call the compiler.
define HOST_QEMU_CONFIGURE_CMDS
	unset TARGET_DIR; \
	cd $(@D); $(HOST_CONFIGURE_OPTS) CPP="$(HOSTCC) -E" \
		./configure \
		--target-list="$(HOST_QEMU_TARGETS)" \
		--prefix="$(HOST_DIR)" \
		--interp-prefix=$(STAGING_DIR) \
		--cc="$(HOSTCC)" \
		--host-cc="$(HOSTCC)" \
		--extra-cflags="$(HOST_QEMU_CFLAGS)" \
		--extra-ldflags="$(HOST_LDFLAGS)" \
		--audio-drv-list="alsa,pa,oss" \
		--meson=$(HOST_DIR)/bin/meson \
		--ninja=$(HOST_DIR)/bin/ninja \
		--disable-bzip2 \
		--disable-containers \
		--disable-curl \
		--disable-libssh \
		--disable-linux-io-uring \
		--disable-sdl \
		--disable-vhost-user-blk-server \
		--disable-virtiofsd \
		--disable-vnc-jpeg \
		--disable-vnc-png \
		--disable-vnc-sasl \
		--disable-tests \
		$(HOST_QEMU_OPTS)
endef

in the package/qemu/qemu.mk , I was able to compile QEMU with supported alsa and pa drivers:

./qemu-system-aarch64 --audio-help
Environment variable based configuration deprecated.
Please use the new -audiodev option.

Equivalent -audiodev to your current environment variables:
(Since you didn't specify QEMU_AUDIO_DRV, I'll list all possibilities)
-audiodev id=alsa,driver=alsa
-audiodev id=pa,driver=pa
-audiodev id=oss,driver=oss
-audiodev id=none,driver=none

It is an awful workaround, but at least it works...
Comment 3 WZab 2021-05-05 21:00:08 UTC
(In reply to Arnout Vandecappelle from comment #1)
Unfortunately we have to use the patched QEMU (to add the GUI-connected GPIO emulation for our students - http://koral.ise.pw.edu.pl/~wzab/artykuly/Teaching_electronics_disease_virtual_lab.pdf ).
The version for BR 2021.02 is in https://github.com/wzab/BR_Internet_Radio/tree/gpio_simple_2021.02/QemuVirt64
Comment 4 WZab 2021-05-05 21:45:02 UTC
Created attachment 8926 [details]
Patch with temporary work-around
Comment 5 WZab 2021-05-05 21:49:33 UTC
Created attachment 8931 [details]
Patch with temporary work-around

This is a temporary work-around - a patch to the qemu package.
It simply switches to using the standard pkg-config, when the sound libraries are detected and configured. After that the original Buildroot-provided pkg-config is restored.
The correct operation is confirmed on Debian/testing.
Comment 7 Yann E. MORIN 2024-06-15 14:58:35 UTC
Thank you for your report.

The issue tracker for the Buildroot project has been moved to
the Gitlab.com issue tracker:
    https://gitlab.com/buildroot.org/buildroot/-/issues

We are taking this opportunity to close old issues in this old
tracker. If you believe your issue is still relevant, please
open one in the new issue tracker.

Thank you!