libtraceevent: build with Meson

After what I presume is the recent kernel upgrade, perf started to fail
to configure.  This was actually due to libtraceevent racing during its
build and failing to put one of the .o files into the .so (reminder:
Make is terrible). This doesn't cause the libtraceevent build to fail so
once the broken .so is in sstate, it causes all future perf builds to
fail.

Instead of rewriting the Makefile rules to fix this race it's easier to
switch to Meson which doesn't have this sort of problem. However the
Meson support is pretty new and has some rough edges, so we need a patch
to make it do the right thing.

I will submit the libtraceevent fixes upstream shortly.

[ YOCTO #15201 ]

(From OE-Core rev: 5d060725e706476751b0bda8e6d9f3670aa4b7de)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ross Burton
2023-08-27 20:57:44 +01:00
committed by Richard Purdie
parent 6da9c2b29e
commit 142b6921bd
3 changed files with 77 additions and 47 deletions

View File

@@ -1,40 +0,0 @@
From ed0a31000305d937abe47c44d705b5b52bb36f79 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Thu, 22 Dec 2022 18:32:17 -0800
Subject: [PATCH] makefile: Do not preserve ownership in cp command
Fixes
ERROR: libtraceevent-1.7.0-r0 do_package_qa: QA Issue: libtraceevent: /usr/lib/libtraceevent.a is owned by uid 1000, which is the same as the user running bitbake. This may be due to host contamination [host-user-contaminated]
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 965ff47..0e782cb 100644
--- a/Makefile
+++ b/Makefile
@@ -287,7 +287,7 @@ $(BUILD_PREFIX): force
$(Q)$(call build_prefix,$(prefix))
define do_make_pkgconfig_file
- cp -f ${PKG_CONFIG_SOURCE_FILE}.template ${PKG_CONFIG_FILE}; \
+ install -m 0644 ${PKG_CONFIG_SOURCE_FILE}.template ${PKG_CONFIG_FILE}; \
sed -i "s|INSTALL_PREFIX|${1}|g" ${PKG_CONFIG_FILE}; \
sed -i "s|LIB_VERSION|${EVENT_PARSE_VERSION}|g" ${PKG_CONFIG_FILE}; \
sed -i "s|LIB_DIR|${libdir_relative}|g" ${PKG_CONFIG_FILE}; \
@@ -335,7 +335,7 @@ install: install_libs install_plugins
install_libs: libs install_headers install_pkgconfig
$(Q)$(call do_install,$(LIBTRACEEVENT_SHARED),$(libdir_SQ)); \
- cp -fpR $(LIB_INSTALL) $(DESTDIR)$(libdir_SQ)
+ cp --no-preserve=ownership --recursive $(LIB_INSTALL) $(DESTDIR)$(libdir_SQ)
$(Q)$(call install_ld_config)
install_pkgconfig: $(PKG_CONFIG_FILE)
--
2.39.0

View File

@@ -0,0 +1,74 @@
Fixes for the Meson build of libtraceevent:
- Make the plugin directory the same as the Makefiles
- Install the plugins as modules not static and versioned shared libraries
- Add an option to disable building the documentation (needs asciidoc and xmlto)
Upstream-Status: Pending
Signed-off-by: Ross Burton <ross.burton@arm.com>
diff --git a/meson.build b/meson.build
index b61c873..4bba4d8 100644
--- a/meson.build
+++ b/meson.build
@@ -25,7 +25,7 @@ htmldir = join_paths(prefixdir, get_option('htmldir'))
libdir = join_paths(prefixdir, get_option('libdir'))
plugindir = get_option('plugindir')
if plugindir == ''
- plugindir = join_paths(libdir, 'libtraceevent/plugins')
+ plugindir = join_paths(libdir, 'traceevent/plugins')
endif
add_project_arguments(
@@ -45,10 +45,13 @@ if cunit_dep.found()
subdir('utest')
endif
subdir('samples')
-subdir('Documentation')
-custom_target(
- 'docs',
- output: 'docs',
- depends: [html, man],
- command: ['echo'])
+if get_option('docs')
+ subdir('Documentation')
+
+ custom_target(
+ 'docs',
+ output: 'docs',
+ depends: [html, man],
+ command: ['echo'])
+endif
diff --git a/meson_options.txt b/meson_options.txt
index b2294f6..0611216 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -4,6 +4,10 @@
option('plugindir', type : 'string',
description : 'set the plugin dir')
+
+option('docs', type : 'boolean', value: true,
+ description : 'build documentation')
+
option('htmldir', type : 'string', value : 'share/doc/libtraceevent-doc',
description : 'directory for HTML documentation')
option('asciidoctor', type : 'boolean', value: false,
diff --git a/plugins/meson.build b/plugins/meson.build
index 74ad664..4919be4 100644
--- a/plugins/meson.build
+++ b/plugins/meson.build
@@ -19,11 +19,10 @@ plugins = [
pdeps = []
foreach plugin : plugins
- pdeps += library(
+ pdeps += shared_module(
plugin.replace('.c', ''),
plugin,
name_prefix: '',
- version: library_version,
dependencies: [libtraceevent_dep],
include_directories: [incdir],
install: true,

View File

@@ -10,17 +10,13 @@ SECTION = "libs"
SRCREV = "dd148189b74da3e2f45c7e536319fec97cb71213"
SRC_URI = "git://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git;branch=${BPN};protocol=https \
file://0001-makefile-Do-not-preserve-ownership-in-cp-command.patch"
file://meson.patch"
S = "${WORKDIR}/git"
export EXTRA_CFLAGS = "${CFLAGS}"
inherit meson pkgconfig
inherit pkgconfig
do_install() {
oe_runmake install DESTDIR=${D} pkgconfig_dir=${libdir}/pkgconfig
}
EXTRA_OEMESON = "-Ddocs=false"
PACKAGES += "${PN}-plugins"