diff options
author | Tanu Kaskinen <tanuk@iki.fi> | 2020-12-17 21:27:38 +0200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-12-20 00:03:04 +0000 |
commit | 4b63c75b80bea668bd18c11b6cef2024b017fb64 (patch) | |
tree | d012914246c78d0ca4d8cfb1a71a1840d0033d57 | |
parent | b381e01a667b769ebe245b75194c5ef4038cb7b0 (diff) | |
download | poky-4b63c75b80bea668bd18c11b6cef2024b017fb64.tar.gz |
pulseaudio: switch build system from Autotools to Meson
Upstream is moving from Autotools to Meson, Autotools support will be
dropped in 15.0.
I dropped some configure options:
* --enable-tcpwrap=no doesn't (currently) have a counterpart in Meson,
TCP Wrappers support is always disabled.
* --disable-esound doesn't have a counterpart in Meson, EsounD support
is always disabled.
* --disable-gconf doesn't have a counterpart in Meson, GConf support is
always disabled.
I backported a patch that implements support for the -Dvalgrind=disabled
option.
I checked with buildhistory what the differences are before and after
this patch (with qemuarm with neon removed from TUNE_FEATURES, all
PACKAGECONFIGs enabled):
* Obvious differences in DEPENDS: Autotools stuff removed and Meson
stuff added. There wasn't anything strange here.
* Packages have superfluous RDEPENDS removed from them. With Autotools
something caused for example X11 libraries to be added to RDEPENDS of
packages that don't have anything to do with X11.
* The pulseaudio-src package had MMX and SSE related files removed and
Neon related files added. I don't know why the ARM build previously
had MMX and SSE files included, the addition of Neon files is
explained by the fact that with Meson the Neon optimizations can't be
disabled if the compiler supports Neon (see below).
* libfoo.so symlinks changed to point to libfoo.so.X rather than
directly to libfoo.so.X.Y.Z. To my understading that's fine, since
libfoo.so.X is a symlink that points to libfoo.so.X.Y.Z.
* There were various file size changes, which I didn't investigate.
Previously the recipe disabled ARM Neon optimizations when "neon" was
not in TUNE_FEATURES. That was originally added in commit
4e7b91b5a2613b957b08aefbee1aac28fdd19598 at a time when PulseAudio's
build system didn't check the availability of the arm_neon.h header,
causing compilation errors when the header wasn't available. That issue
was fixed a long time ago, so there was little need for the
TUNE_FEATURES check, although it was still possible to make the build
fail if non-neon -mfpu was passed in CFLAGS, so the TUNE_FEATURES check
still had some theoretical benefit (theoretical, because generally OE
passes -mfpu in CC instead of CFLAGS, so OE's -mfpu option appears very
early in the compiler command line, which doesn't trip up PulseAudio's
current Autotools build system).
With Meson there's no option for disabling Neon optimizations if the
compiler supports Neon. If -mfpu is set in CC or CFLAGS, it's ignored,
because the build system adds -mfpu=neon at the end of the compiler
command line, overriding any earlier -mfpu options. This shouldn't be
a problem, because PulseAudio detects at runtime whether the CPU
supports Neon instructions.
(From OE-Core rev: 80bbea06e706fde3600950ea9ddfc38a1a76b8bb)
Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
3 files changed, 97 insertions, 35 deletions
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio.inc b/meta/recipes-multimedia/pulseaudio/pulseaudio.inc index 48759bca62..cf4be7ed40 100644 --- a/meta/recipes-multimedia/pulseaudio/pulseaudio.inc +++ b/meta/recipes-multimedia/pulseaudio/pulseaudio.inc | |||
@@ -56,49 +56,47 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=0e5cd938de1a7a53ea5adac38cc10c39 \ | |||
56 | file://src/pulsecore/filter/biquad.h;beginline=1;endline=4;md5=6d46d1365206528a20137355924233c1 \ | 56 | file://src/pulsecore/filter/biquad.h;beginline=1;endline=4;md5=6d46d1365206528a20137355924233c1 \ |
57 | " | 57 | " |
58 | 58 | ||
59 | # libtool is needed for libltdl, used in module loading. | ||
59 | DEPENDS = "libatomic-ops libsndfile1 libtool" | 60 | DEPENDS = "libatomic-ops libsndfile1 libtool" |
60 | # optional | 61 | # optional |
61 | DEPENDS += "udev alsa-lib glib-2.0" | 62 | DEPENDS += "udev alsa-lib glib-2.0" |
62 | DEPENDS += "speexdsp libxml-parser-perl-native libcap" | 63 | DEPENDS += "speexdsp libxml-parser-perl-native libcap" |
63 | 64 | ||
64 | inherit autotools bash-completion pkgconfig useradd gettext perlnative systemd manpages gsettings | 65 | inherit bash-completion meson pkgconfig useradd gettext perlnative systemd manpages gsettings |
65 | 66 | ||
66 | # *.desktop rules wont be generated during configure and build will fail | 67 | # *.desktop rules wont be generated during configure and build will fail |
67 | # if using --disable-nls | 68 | # if using --disable-nls |
68 | USE_NLS = "yes" | 69 | USE_NLS = "yes" |
69 | 70 | ||
70 | EXTRA_OECONF = "\ | 71 | EXTRA_OEMESON = "\ |
71 | --disable-hal-compat \ | 72 | -Dhal-compat=false \ |
72 | --disable-orc \ | 73 | -Dorc=disabled \ |
73 | --enable-tcpwrap=no \ | 74 | -Daccess_group=audio \ |
74 | --with-access-group=audio \ | 75 | -Dopenssl=disabled \ |
75 | --disable-openssl \ | 76 | -Ddatabase=simple \ |
76 | --with-database=simple \ | 77 | -Dzshcompletiondir=no \ |
77 | --without-zsh-completion-dir \ | 78 | -Dudevrulesdir=`pkg-config --variable=udevdir udev`/rules.d \ |
78 | --with-udev-rules-dir=`pkg-config --variable=udevdir udev`/rules.d \ | 79 | -Dvalgrind=disabled \ |
79 | ac_cv_header_valgrind_memcheck_h=no \ | 80 | -Dtests=false \ |
80 | --disable-tests \ | 81 | -Drunning-from-build-tree=false \ |
81 | --disable-running-from-build-tree \ | ||
82 | --disable-esound \ | ||
83 | --disable-gconf \ | ||
84 | " | 82 | " |
85 | 83 | ||
86 | # soxr (the SoX Resampler library) doesn't seem to be currently packaged in | 84 | # soxr (the SoX Resampler library) doesn't seem to be currently packaged in |
87 | # oe-core nor meta-oe, so let's not add a PACKAGECONFIG entry for it for now. | 85 | # oe-core nor meta-oe, so let's not add a PACKAGECONFIG entry for it for now. |
88 | EXTRA_OECONF += "--without-soxr" | 86 | EXTRA_OEMESON += "-Dsoxr=disabled" |
89 | 87 | ||
90 | # The FFTW dependency (for module-equalizer-sink) was removed in commit | 88 | # The FFTW dependency (for module-equalizer-sink) was removed in commit |
91 | # ddbd713293 without explaining why it was not made a PACKAGECONFIG item | 89 | # ddbd713293 without explaining why it was not made a PACKAGECONFIG item |
92 | # instead. Oh well, let's keep it disabled until someone expresses some | 90 | # instead. Oh well, let's keep it disabled until someone expresses some |
93 | # interest in having it enabled. | 91 | # interest in having it enabled. |
94 | EXTRA_OECONF += "--without-fftw" | 92 | EXTRA_OEMESON += "-Dfftw=disabled" |
95 | 93 | ||
96 | # The "adrian" echo canceller implementation has a non-standard license | 94 | # The "adrian" echo canceller implementation has a non-standard license |
97 | # (src/modules/echo-cancel/adrian-license.txt). It's a permissive license, so | 95 | # (src/modules/echo-cancel/adrian-license.txt). It's a permissive license, so |
98 | # the licensing terms are probably not problematic, but it would be an extra | 96 | # the licensing terms are probably not problematic, but it would be an extra |
99 | # hassle to add the license to OE-Core's set of licenses. The canceller isn't | 97 | # hassle to add the license to OE-Core's set of licenses. The canceller isn't |
100 | # very good anyway, better alternatives exist (such as the webrtc canceller). | 98 | # very good anyway, better alternatives exist (such as the webrtc canceller). |
101 | EXTRA_OECONF += "--disable-adrian-aec" | 99 | EXTRA_OEMESON += "-Dadrian-aec=false" |
102 | 100 | ||
103 | PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \ | 101 | PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \ |
104 | ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \ | 102 | ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \ |
@@ -107,26 +105,22 @@ PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5' | |||
107 | dbus gsettings \ | 105 | dbus gsettings \ |
108 | " | 106 | " |
109 | 107 | ||
110 | PACKAGECONFIG[dbus] = "--enable-dbus,--disable-dbus,dbus" | 108 | PACKAGECONFIG[dbus] = "-Ddbus=enabled,-Ddbus=disabled,dbus" |
111 | PACKAGECONFIG[bluez5] = "--enable-bluez5,--disable-bluez5,bluez5 sbc" | 109 | PACKAGECONFIG[bluez5] = "-Dbluez5=true,-Dbluez5=false,bluez5 sbc" |
112 | PACKAGECONFIG[gsettings] = "--enable-gsettings,--disable-gsettings,glib-2.0-native glib-2.0" | 110 | PACKAGECONFIG[gsettings] = "-Dgsettings=enabled,-Dgsettings=disabled,glib-2.0-native glib-2.0" |
113 | PACKAGECONFIG[ofono] = "--enable-bluez5-ofono-headset,--disable-bluez5-ofono-headset,ofono" | 111 | PACKAGECONFIG[ofono] = "-Dbluez5-ofono-headset=true,-Dbluez5-ofono-headset=false,ofono" |
114 | PACKAGECONFIG[gtk] = "--enable-gtk3,--disable-gtk3,gtk+3" | 112 | PACKAGECONFIG[gtk] = "-Dgtk=enabled,-Dgtk=disabled,gtk+3" |
115 | PACKAGECONFIG[systemd] = "--enable-systemd-daemon --enable-systemd-login --enable-systemd-journal --with-systemduserunitdir=${systemd_user_unitdir},--disable-systemd-daemon --disable-systemd-login --disable-systemd-journal,systemd" | 113 | PACKAGECONFIG[systemd] = "-Dsystemd=enabled -Dsystemduserunitdir=${systemd_user_unitdir},-Dsystemd=disabled,systemd" |
116 | PACKAGECONFIG[x11] = "--enable-x11,--disable-x11,virtual/libx11 libxtst libice libsm libxcb" | 114 | PACKAGECONFIG[x11] = "-Dx11=enabled,-Dx11=disabled,virtual/libx11 libxtst libice libsm libxcb" |
117 | PACKAGECONFIG[avahi] = "--enable-avahi,--disable-avahi,avahi" | 115 | PACKAGECONFIG[avahi] = "-Davahi=enabled,-Davahi=disabled,avahi" |
118 | PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack" | 116 | PACKAGECONFIG[jack] = "-Djack=enabled,-Djack=disabled,jack" |
119 | # Since many embedded systems don't have non-root users, it's useful to be | 117 | # Since many embedded systems don't have non-root users, it's useful to be |
120 | # able to use pulseaudio autospawn for root as well. | 118 | # able to use pulseaudio autospawn for root as well. |
121 | PACKAGECONFIG[autospawn-for-root] = ",,," | 119 | PACKAGECONFIG[autospawn-for-root] = ",,," |
122 | PACKAGECONFIG[lirc] = "--enable-lirc,--disable-lirc,lirc" | 120 | PACKAGECONFIG[lirc] = "-Dlirc=enabled,-Dlirc=disabled,lirc" |
123 | PACKAGECONFIG[webrtc] = "--enable-webrtc-aec,--disable-webrtc-aec,webrtc-audio-processing" | 121 | PACKAGECONFIG[webrtc] = "-Dwebrtc-aec=enabled,-Dwebrtc-aec=disabled,webrtc-audio-processing" |
124 | PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6," | 122 | PACKAGECONFIG[ipv6] = "-Dipv6=true,-Dipv6=false," |
125 | PACKAGECONFIG[manpages] = "--enable-manpages, --disable-manpages, " | 123 | PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false," |
126 | |||
127 | EXTRA_OECONF_append_arm = "${@bb.utils.contains("TUNE_FEATURES", "neon", "", " --enable-neon-opt=no", d)}" | ||
128 | EXTRA_OECONF_append_armeb = "${@bb.utils.contains("TUNE_FEATURES", "neon", "", " --enable-neon-opt=no", d)}" | ||
129 | |||
130 | 124 | ||
131 | export TARGET_PFPU = "${TARGET_FPU}" | 125 | export TARGET_PFPU = "${TARGET_FPU}" |
132 | 126 | ||
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-build-sys-Add-an-option-for-enabling-disabling-Valgr.patch b/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-build-sys-Add-an-option-for-enabling-disabling-Valgr.patch new file mode 100644 index 0000000000..d60a9a211f --- /dev/null +++ b/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-build-sys-Add-an-option-for-enabling-disabling-Valgr.patch | |||
@@ -0,0 +1,67 @@ | |||
1 | From 6d202833a5ae241eeb648631cf95090c452198f9 Mon Sep 17 00:00:00 2001 | ||
2 | From: Tanu Kaskinen <tanuk@iki.fi> | ||
3 | Date: Fri, 14 Feb 2020 07:29:33 +0200 | ||
4 | Subject: [PATCH] build-sys: Add an option for enabling/disabling Valgrind | ||
5 | |||
6 | In OpenEmbedded the PulseAudio recipe currently disables Valgrind | ||
7 | support by passing "ac_cv_header_valgrind_memcheck_h=no" to the | ||
8 | configure script (this was added to make it deterministic whether | ||
9 | Valgrdind support gets enabled or not). I'm converting the PulseAudio | ||
10 | recipe to use Meson, and I needed an option to disable Valgrind. | ||
11 | |||
12 | Upstream-Status: Backport | ||
13 | |||
14 | Signed-off-by: Tanu Kaskinen <tanuk@iki.fi> | ||
15 | --- | ||
16 | meson.build | 6 +++++- | ||
17 | meson_options.txt | 3 +++ | ||
18 | 2 files changed, 8 insertions(+), 1 deletion(-) | ||
19 | |||
20 | diff --git a/meson.build b/meson.build | ||
21 | index 658eeee57..258962724 100644 | ||
22 | --- a/meson.build | ||
23 | +++ b/meson.build | ||
24 | @@ -220,7 +220,6 @@ check_headers = [ | ||
25 | 'sys/un.h', | ||
26 | 'sys/wait.h', | ||
27 | 'syslog.h', | ||
28 | - 'valgrind/memcheck.h', | ||
29 | 'xlocale.h', | ||
30 | ] | ||
31 | |||
32 | @@ -231,6 +230,10 @@ foreach h : check_headers | ||
33 | endif | ||
34 | endforeach | ||
35 | |||
36 | +if cc.has_header('valgrind/memcheck.h', required: get_option('valgrind')) | ||
37 | + cdata.set('HAVE_VALGRIND_MEMCHECK_H', 1) | ||
38 | +endif | ||
39 | + | ||
40 | # FIXME: move this to the above set | ||
41 | if cc.has_header('pthread.h') | ||
42 | cdata.set('HAVE_PTHREAD', 1) | ||
43 | @@ -841,6 +844,7 @@ summary = [ | ||
44 | 'Enable SoXR (resampler): @0@'.format(soxr_dep.found()), | ||
45 | 'Enable WebRTC echo canceller: @0@'.format(webrtc_dep.found()), | ||
46 | 'Enable Gcov coverage: @0@'.format(get_option('gcov')), | ||
47 | + 'Enable Valgrind: @0@'.format(cdata.has('HAVE_VALGRIND_MEMCHECK_H')), | ||
48 | 'Enable man pages: @0@'.format(get_option('man')), | ||
49 | 'Enable unit tests: @0@'.format(get_option('tests')), | ||
50 | '', | ||
51 | diff --git a/meson_options.txt b/meson_options.txt | ||
52 | index 824f24e08..115cc84af 100644 | ||
53 | --- a/meson_options.txt | ||
54 | +++ b/meson_options.txt | ||
55 | @@ -138,6 +138,9 @@ option('systemd', | ||
56 | option('udev', | ||
57 | type : 'feature', value : 'auto', | ||
58 | description : 'Optional udev support') | ||
59 | +option('valgrind', | ||
60 | + type : 'feature', value : 'auto', | ||
61 | + description : 'Optional Valgrind support') | ||
62 | option('x11', | ||
63 | type : 'feature', value : 'auto', | ||
64 | description : 'Optional X11 support') | ||
65 | -- | ||
66 | 2.20.1 | ||
67 | |||
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio_14.0.bb b/meta/recipes-multimedia/pulseaudio/pulseaudio_14.0.bb index ac0c82e37d..63ef3a9c12 100644 --- a/meta/recipes-multimedia/pulseaudio/pulseaudio_14.0.bb +++ b/meta/recipes-multimedia/pulseaudio/pulseaudio_14.0.bb | |||
@@ -3,6 +3,7 @@ require pulseaudio.inc | |||
3 | SRC_URI = "http://freedesktop.org/software/pulseaudio/releases/${BP}.tar.xz \ | 3 | SRC_URI = "http://freedesktop.org/software/pulseaudio/releases/${BP}.tar.xz \ |
4 | file://0001-client-conf-Add-allow-autospawn-for-root.patch \ | 4 | file://0001-client-conf-Add-allow-autospawn-for-root.patch \ |
5 | file://0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch \ | 5 | file://0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch \ |
6 | file://0001-build-sys-Add-an-option-for-enabling-disabling-Valgr.patch \ | ||
6 | file://volatiles.04_pulse \ | 7 | file://volatiles.04_pulse \ |
7 | " | 8 | " |
8 | SRC_URI[md5sum] = "84a7776e63dd55c40db8fbd7c7e2e18e" | 9 | SRC_URI[md5sum] = "84a7776e63dd55c40db8fbd7c7e2e18e" |