--- /dev/null
+################################################################################
+project(
+ 'nvme-cli', ['c', 'cpp'],
+ meson_version: '>= 0.47.0',
+ license: 'LGPLv2+',
+ version: run_command('./nvme-cli-version', check : true).stdout().strip(),
+ default_options: [
+ 'c_std=gnu99',
+ 'buildtype=release',
+ 'prefix=/usr',
+ ]
+)
+
+################################################################################
+cc = meson.get_compiler('c')
+
+prefixdir = get_option('prefix')
+libdir = join_paths(prefixdir, get_option('libdir'))
+includedir = join_paths(prefixdir, get_option('includedir'))
+datadir = join_paths(prefixdir, get_option('datadir'))
+mandir = join_paths(prefixdir, get_option('mandir'))
+bindir = join_paths(prefixdir, get_option('bindir'))
+
+###############################################################################
+conf = configuration_data()
+
+libnvme_dep = dependency('libnvme', fallback : ['libnvme', 'libnvme_static_dep'])
+
+# Check for libuuid availability
+libuuid = dependency('uuid', required: true)
+conf.set('LIBUUID', libuuid.found(), description: 'Is libuuid required?')
+
+# Check for libjson-c availability
+libjson = dependency('json-c', required: true)
+conf.set('LIBJSONC', libjson.found(), description: 'Is json-c required?')
+
+# Check for libhugetlbfs availability
+libhugetlbfs = dependency('hugetlbfs', required: false)
+conf.set('LIBHUGETLBFS', libhugetlbfs.found(), description: 'Is libhugetlbfs required?')
+
+# Set the nvme-cli version
+conf.set('NVME_VERSION', '"' + meson.project_version() + '"')
+
+configure_file(
+ output: 'config-host.h',
+ configuration: conf
+)
+
+################################################################################
+substs = configuration_data()
+substs.set('NAME', meson.project_name())
+substs.set('VERSION', meson.project_version())
+substs.set('LICENSE', meson.project_license()[0])
+configure_file(
+ input: 'nvme.spec.in',
+ output: 'nvme.spec',
+ configuration: substs,
+)
+
+################################################################################
+add_project_arguments(['-fomit-frame-pointer', '-D_GNU_SOURCE',
+ '-include', 'config-host.h'], language : 'c')
+
+################################################################################
+sources = [
+ 'fabrics.c',
+ 'nvme.c',
+ 'nvme-models.c',
+ 'nvme-print.c',
+ 'nvme-rpmb.c',
+ 'plugin.c',
+]
+
+subdir('plugins')
+subdir('tests')
+subdir('util')
+
+executable(
+ 'nvme',
+ sources,
+ dependencies: [ libnvme_dep, libuuid, libjson ],
+)
--- /dev/null
+sources += [
+ 'plugins/amzn/amzn-nvme.c',
+ 'plugins/dera/dera-nvme.c',
+ 'plugins/huawei/huawei-nvme.c',
+ 'plugins/intel/intel-nvme.c',
+ 'plugins/memblaze/memblaze-nvme.c',
+ 'plugins/micron/micron-nvme.c',
+ 'plugins/netapp/netapp-nvme.c',
+ 'plugins/nvidia/nvidia-nvme.c',
+ 'plugins/scaleflux/sfx-nvme.c',
+ 'plugins/seagate/seagate-nvme.c',
+ 'plugins/shannon/shannon-nvme.c',
+ 'plugins/toshiba/toshiba-nvme.c',
+ 'plugins/transcend/transcend-nvme.c',
+ 'plugins/virtium/virtium-nvme.c',
+ 'plugins/wdc/wdc-utils.c',
+ 'plugins/wdc/wdc-nvme.c',
+ 'plugins/ymtc/ymtc-nvme.c',
+ 'plugins/zns/zns.c',
+]
--- /dev/null
+tests = [
+ 'nvme_attach_detach_ns_test',
+ 'nvme_compare_test',
+ 'nvme_create_max_ns_test',
+ 'nvme_error_log_test',
+ 'nvme_flush_test',
+ 'nvme_format_test',
+ 'nvme_fw_log_test',
+ 'nvme_get_features_test',
+ 'nvme_id_ctrl_test',
+ 'nvme_id_ns_test',
+ 'nvme_read_write_test',
+ 'nvme_simple_template_test',
+ 'nvme_smart_log_test',
+ 'nvme_test_io',
+ 'nvme_test_logger',
+ 'nvme_test',
+ 'nvme_writeuncor_test',
+ 'nvme_writezeros_test',
+]
+
+runtests = find_program('nose2', required : false)
+
+if runtests.found()
+ foreach t : tests
+ test(t, runtests,
+ args: ['--verbose', '--start-dir', meson.current_source_dir(), t],
+ workdir: meson.current_source_dir(),
+ env: ['PATH=' + meson.build_root() + ':/usr/bin:/usr/sbin'],
+ timeout: 500)
+ endforeach
+endif