From: Steven Rostedt <rostedt@goodmis.org>
To: Daniel Wagner <dwagner@suse.de>
Cc: linux-trace-devel@vger.kernel.org
Subject: Re: [RFC v2] libtraceevent: Add initial support for meson
Date: Fri, 25 Nov 2022 21:18:47 -0500 [thread overview]
Message-ID: <20221125211847.69b535ea@rorschach.local.home> (raw)
In-Reply-To: <20220707142723.8721-1-dwagner@suse.de>
On Thu, 7 Jul 2022 16:27:23 +0200
Daniel Wagner <dwagner@suse.de> wrote:
> Add support for building the project with meson. It's not complete
> yet, for example building and installing the documentation is missing.
>
> The rest should work as expected. The only thing I was not really
> clear what the purpose is the libtraceevent-dynamic-list which seems
> not be used or installed. The meson build will also generate the file
> but using the host nm and not the cross tool chain if any is used. I
> didn't want to invest too much time figuring out this detail if it is
> actually not used.
It came over from the perf update. See:
f1489e5dce74a ("tools lib traceevent: Export dynamic symbols used by traceevent plugins")
Not sure it's still needed or not.
>
> Obviously, meson is not make and there are some changes in how to use
> this build system. The meson documentation is outstanding good and
> usually has good tips and tricks to solve problems. But sure there is
> learning curve but hopefully not so step.
>
> Anyway, as pure user the build steps are (in source tree builds are
> not supported):
>
> # configure using .build as build directory and install destination
> # /tmp/test
> meson .build --prefix=/tmp/test
>
> # trigger the build
> ninja -C .build
>
> # install the library
> ninja -C .build install
When this is all and done, it should still be part of "make".
That is, make could do the above for the user.
>
> I am using an alias for 'ninja -C .build' which is called 'ni'. This
> makes way more convenient to use.
>
> Signed-off-by: Daniel Wagner <dwagner@suse.de>
> ---
>
> v2:
> - changed include path exported in pkg-config
> exports the same paths as per Makefile
>
> v1:
> - initial version
>
> include/traceevent/meson.build | 12 ++++++++++
> meson.build | 38 ++++++++++++++++++++++++++++++++
> meson_options.txt | 2 ++
> plugins/dynamic_list.sh | 14 ++++++++++++
> plugins/meson.build | 40 ++++++++++++++++++++++++++++++++++
> src/meson.build | 35 +++++++++++++++++++++++++++++
> utest/meson.build | 14 ++++++++++++
> 7 files changed, 155 insertions(+)
> create mode 100644 include/traceevent/meson.build
> create mode 100644 meson.build
> create mode 100644 meson_options.txt
> create mode 100755 plugins/dynamic_list.sh
> create mode 100644 plugins/meson.build
> create mode 100644 src/meson.build
> create mode 100644 utest/meson.build
>
> diff --git a/include/traceevent/meson.build b/include/traceevent/meson.build
> new file mode 100644
> index 000000000000..8e114cccf627
> --- /dev/null
> +++ b/include/traceevent/meson.build
> @@ -0,0 +1,12 @@
> +# SPDX-License-Identifier: LGPL-2.1
> +
> +headers = [
> + 'event-parse.h',
> + 'event-utils.h',
> + 'kbuffer.h',
> + 'trace-seq.h',
> +]
> +
> +foreach h : headers
> + install_headers(h, subdir : 'traceevent')
> +endforeach
> diff --git a/meson.build b/meson.build
> new file mode 100644
> index 000000000000..ef27a12fe76a
> --- /dev/null
> +++ b/meson.build
> @@ -0,0 +1,38 @@
> +# SPDX-License-Identifier: LGPL-2.1
> +
> +project(
> + 'libtraceevent', ['c'],
> + meson_version: '>= 0.47.0',
I get a warning:
WARNING: Project specifies a minimum meson_version '>= 0.47.0' but uses features which were added in newer versions:
* 0.50.0: {'include_directories kwarg of type string'}
> + license: 'LGPL-2.1',
> + version: '1.5.3',
> + default_options: [
> + 'c_std=gnu99',
> + 'buildtype=release',
> + 'prefix=/usr',
default should be in /usr/local
-- Steve
> + 'warning_level=1',
> + ]
> +)
> +
> +library_version = meson.project_version()
> +
> +cunit_dep = dependency('cunit', required : false)
> +
> +prefixdir = get_option('prefix')
> +libdir = join_paths(prefixdir, get_option('libdir'))
> +
> +plugindir = get_option('plugindir') == '' ? join_paths(libdir, 'libtraceevent/plugins') : get_option('plugindir')
> +
> +add_project_arguments(
> + [
> + '-D_GNU_SOURCE',
> + '-DPLUGIN_DIR="@0@"'.format(plugindir),
> + ],
> + language : 'c',
> +)
> +
> +incdir = include_directories(['include', 'include/traceevent'])
> +
> +subdir('src')
> +subdir('include/traceevent')
> +subdir('plugins')
> +subdir('utest')
> diff --git a/meson_options.txt b/meson_options.txt
> new file mode 100644
> index 000000000000..ee52f11799dd
> --- /dev/null
> +++ b/meson_options.txt
> @@ -0,0 +1,2 @@
> +# SPDX-License-Identifier: LGPL-2.1
> +option('plugindir', type : 'string', description : 'set the plugin dir')
> diff --git a/plugins/dynamic_list.sh b/plugins/dynamic_list.sh
> new file mode 100755
> index 000000000000..e1480eaa694f
> --- /dev/null
> +++ b/plugins/dynamic_list.sh
> @@ -0,0 +1,14 @@
> +#!/bin/sh
> +# SPDX-License-Identifier: LGPL-2.1
> +
> +symbol_type=$(nm -u -D $@ | awk 'NF>1 {print $1}' | xargs echo "U w W" |
> + tr 'w ' 'W\n' | sort -u | xargs echo)
> +
> +if [ "$symbol_type" = "U W" ]; then
> + echo '{'
> +
> + nm -u -D $@ | awk 'NF>1 {sub("@.*", "", $2); print "\t"$2";"}' |
> + sort -u
> +
> + echo '};'
> +fi
> diff --git a/plugins/meson.build b/plugins/meson.build
> new file mode 100644
> index 000000000000..659f864581d0
> --- /dev/null
> +++ b/plugins/meson.build
> @@ -0,0 +1,40 @@
> +# SPDX-License-Identifier: LGPL-2.1
> +
> +plugins = [
> + 'plugin_jbd2.c',
> + 'plugin_hrtimer.c',
> + 'plugin_kmem.c',
> + 'plugin_kvm.c',
> + 'plugin_mac80211.c',
> + 'plugin_sched_switch.c',
> + 'plugin_function.c',
> + 'plugin_futex.c',
> + 'plugin_xen.c',
> + 'plugin_scsi.c',
> + 'plugin_cfg80211.c',
> + 'plugin_tlb.c',
> +]
> +
> +pdeps = []
> +foreach plugin : plugins
> + pdeps += library(
> + plugin.replace('.c', ''),
> + plugin,
> + name_prefix: '',
> + version: library_version,
> + dependencies: [libtraceevent_dep],
> + include_directories: [incdir],
> + install: true,
> + install_dir: plugindir)
> +endforeach
> +
> +# not used?
> +dynamic_list_file = find_program('dynamic_list.sh')
> +custom_target(
> + 'dynamic_list',
> + depends: pdeps,
> + input: pdeps,
> + output: 'libtraceevent-dynamic-list',
> + command: [dynamic_list_file, '@INPUT@'],
> + capture: true,
> + build_by_default: true)
> diff --git a/src/meson.build b/src/meson.build
> new file mode 100644
> index 000000000000..eca4f489d963
> --- /dev/null
> +++ b/src/meson.build
> @@ -0,0 +1,35 @@
> +# SPDX-License-Identifier: LGPL-2.1
> +
> +sources= [
> + 'event-parse-api.c',
> + 'event-parse.c',
> + 'event-plugin.c',
> + 'kbuffer-parse.c',
> + 'parse-filter.c',
> + 'parse-utils.c',
> + 'tep_strerror.c',
> + 'trace-seq.c',
> +]
> +
> +libtraceevent = library(
> + 'traceevent',
> + sources,
> + version: library_version,
> + include_directories: [incdir],
> + install: true,
> +)
> +
> +pkg = import('pkgconfig')
> +pkg.generate(libtraceevent,
> + subdirs: 'traceevent',
> + filebase: meson.project_name(),
> + name: meson.project_name(),
> + version: meson.project_version(),
> + description: 'Manage trace event',
> + url: 'https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/',
> +)
> +
> +libtraceevent_dep = declare_dependency(
> + include_directories: ['.'],
> + link_with: libtraceevent,
> +)
> diff --git a/utest/meson.build b/utest/meson.build
> new file mode 100644
> index 000000000000..e6ad5b50e9be
> --- /dev/null
> +++ b/utest/meson.build
> @@ -0,0 +1,14 @@
> +# SPDX-License-Identifier: LGPL-2.1
> +
> +source = [
> + 'trace-utest.c',
> + 'traceevent-utest.c',
> +]
> +
> +e = executable(
> + 'trace-utest',
> + source,
> + include_directories: [incdir],
> + dependencies: [libtraceevent_dep, cunit_dep])
> +
> +test('trace-utest', e)
next prev parent reply other threads:[~2022-11-26 2:18 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-07 14:27 [RFC v2] libtraceevent: Add initial support for meson Daniel Wagner
2022-11-26 2:18 ` Steven Rostedt [this message]
2022-12-19 13:01 ` Daniel Wagner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221125211847.69b535ea@rorschach.local.home \
--to=rostedt@goodmis.org \
--cc=dwagner@suse.de \
--cc=linux-trace-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).