On Thu, 7 Jul 2022 16:27:23 +0200 Daniel Wagner <dwagner@xxxxxxx> 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@xxxxxxx> > --- > > 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)