# SPDX-License-Identifier: LGPL-2.1 OR BSD-2-Clause project('libbpf', 'c', version : '0.0.3', license : 'LGPL-2.1 OR BSD-2-Clause', default_options : [ 'prefix=/usr', ], meson_version : '>= 0.46', ) patchlevel = meson.project_version().split('.')[1] libbpf_source_dir = './' libbpf_sources = files(run_command('find', [ '@0@/src'.format(libbpf_source_dir), '-type', 'f', '-name', '*.[h|c]']).stdout().split()) libbpf_headers = files( join_paths(libbpf_source_dir, 'src/bpf.h'), join_paths(libbpf_source_dir, 'src/btf.h'), join_paths(libbpf_source_dir, 'src/libbpf.h')) feature_rellocarray = run_command(join_paths(libbpf_source_dir, 'scripts/check-reallocarray.sh')) libbpf_c_args = ['-g', '-O2', '-Werror', '-Wall', ] if feature_rellocarray.stdout().strip() != '' libbpf_c_args += '-DCOMPAT_NEED_REALLOCARRAY' endif # bpf_includes are required to include bpf.h, btf.h, libbpf.h bpf_includes = include_directories( join_paths(libbpf_source_dir, 'src')) libbpf_includes = include_directories( join_paths(libbpf_source_dir, 'include'), join_paths(libbpf_source_dir, 'include/uapi')) libelf = dependency('libelf') libelf = dependency('libelf', required: false) if not libelf.found() libelf = cc.find_library('elf', required: true) endif deps = [libelf] libbpf_static = static_library( 'bpf', libbpf_sources, c_args : libbpf_c_args, dependencies : deps, include_directories : libbpf_includes, install : true) libbpf_static_dep = declare_dependency(link_with : libbpf_static) libbpf_map_source_path = join_paths(libbpf_source_dir, 'src/libbpf.map') libbpf_map_abs_path = join_paths(meson.current_source_dir(), libbpf_map_source_path) libbpf_c_args += ['-fPIC', '-fvisibility=hidden'] libbpf_link_args = ['-Wl,--version-script=@0@'.format(libbpf_map_abs_path)] libbpf_shared = shared_library( 'bpf', libbpf_sources, c_args : libbpf_c_args, dependencies : deps, include_directories : libbpf_includes, install : true, link_args : libbpf_link_args, link_depends : libbpf_map_source_path, soversion : patchlevel, version : meson.project_version()) libbpf_shared_dep = declare_dependency(link_with : libbpf_shared) install_headers(libbpf_headers, subdir : 'bpf') pkg = import('pkgconfig') pkg.generate( name: meson.project_name(), version: meson.project_version(), libraries: libbpf_shared, requires_private: ['libelf'], description: '''BPF library''')