Re: [RFC v2] libtraceevent: Add initial support for meson

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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)




[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux