diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..c6c6fe9
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,147 @@
+project(
+    'libmctp', 'c',
+    meson_version: '>= 1.1',
+    version: '0.11',
+    default_options: [
+        'debug=true',
+        'optimization=g',
+        'warning_level=2',
+        'werror=true',
+        'tests=' + (meson.is_subproject() ? 'disabled' : 'enabled'),
+    ],
+)
+
+sources = [
+     'core.c',
+     'alloc.c',
+     'log.c',
+]
+
+headers = [
+    'libmctp.h',
+]
+
+serial_sources = [
+    'serial.c',
+    'crc-16-ccitt.c',
+]
+
+serial_headers = [
+    'libmctp-serial.h'
+]
+
+astlpc_sources = [
+    'astlpc.c',
+    'crc32.c',
+]
+
+astlpc_headers = [
+    'libmctp-astlpc.h',
+]
+
+libmctp_sources = sources
+libmctp_headers = headers
+
+if get_option('bindings').contains('serial')
+    libmctp_sources += serial_sources
+    libmctp_headers += serial_headers
+endif
+if get_option('bindings').contains('astlpc')
+    libmctp_sources += astlpc_sources
+    libmctp_headers += astlpc_headers
+endif
+
+compiler = meson.get_compiler('c')
+
+if get_option('default_alloc').require(
+    compiler.links('''
+        #include <stdlib.h>
+        void main()
+        {
+            free(malloc(4096));
+        }
+    ''')).allowed()
+    add_project_arguments('-DMCTP_DEFAULT_ALLOC', language : 'c')
+endif
+
+if get_option('fileio').require(
+    compiler.check_header('unistd.h') and compiler.check_header('fcntl.h')
+    ).allowed()
+    add_project_arguments('-DMCTP_HAVE_FILEIO', language : 'c')
+endif
+
+if get_option('syslog').require(
+    compiler.links('''
+        #include <stdarg.h>
+        #include <syslog.h>
+        void check_vsyslog(int level, const char *fmt, ...)
+        {
+            va_list ap;
+            va_start(ap, fmt);
+            vsyslog(0, fmt, ap);
+            va_end(ap);
+        }
+        void main()
+        {
+            check_vsyslog(0, "\n");
+        }
+        ''')).allowed()
+    add_project_arguments('-DMCTP_HAVE_SYSLOG', language : 'c')
+endif
+
+if get_option('stdio').require(
+    compiler.links('''
+        #include <stdarg.h>
+        #include <stdio.h>
+        void check_vsyslog(const char *fmt, ...)
+        {
+            va_list ap;
+            va_start(ap, fmt);
+            vprintf(fmt, ap);
+            va_end(ap);
+        }
+        void main()
+        {
+            check_vsyslog("\n");
+        }
+        ''')).allowed()
+    add_project_arguments('-DMCTP_HAVE_STDIO', language : 'c')
+endif
+
+# pcap is necessary for mctp-demux-daemon to be functional
+pcap_dep = dependency('libpcap', required: false)
+
+systemd_dep = dependency('systemd', required: false)
+libsystemd_dep = dependency('libsystemd', required: false)
+
+libmctp_include_dir = include_directories('.', is_system: true)
+libmctp = library('mctp',
+    libmctp_sources,
+    include_directories: libmctp_include_dir,
+    version: meson.project_version(),
+    install: true,
+)
+install_headers(libmctp_headers)
+
+if systemd_dep.found()
+    unitdir = systemd_dep.get_variable(pkgconfig: 'systemdsystemunitdir')
+    install_data('systemd/system/mctp-demux.service', install_dir: unitdir)
+    install_data('systemd/system/mctp-demux.socket', install_dir: unitdir)
+endif
+
+import('pkgconfig').generate(libmctp,
+    name: 'libmctp',
+    description: 'MCTP protocol implementation',
+    version: meson.project_version(),
+)
+
+libmctp_dep = declare_dependency(
+    include_directories: libmctp_include_dir,
+    link_with: libmctp,
+)
+
+subdir('utils')
+
+if get_option('tests').allowed()
+    subdir('tests')
+endif
diff --git a/meson.options b/meson.options
new file mode 100644
index 0000000..f919ad8
--- /dev/null
+++ b/meson.options
@@ -0,0 +1,33 @@
+option(
+    'tests',
+    type: 'feature',
+    value: 'enabled',
+    description: 'Build tests'
+)
+option(
+    'bindings',
+    type: 'array',
+    description: 'Bindings to include',
+    choices: ['serial', 'astlpc'],
+    value: ['serial', 'astlpc'],
+)
+option(
+    'default_alloc',
+    type: 'feature',
+    description: 'Use libc malloc and free for heap memory',
+)
+option(
+    'stdio',
+    type: 'feature',
+    description: 'Support logging to stdio',
+)
+option(
+    'fileio',
+    type: 'feature',
+    description: 'Support interfaces based on file-descriptors',
+)
+option(
+    'syslog',
+    type: 'feature',
+    description: 'Support logging to syslog',
+)
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 0000000..4ca52a0
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,28 @@
+
+tests = [
+    'test_eid',
+    'test_seq',
+    'test_bridge',
+    'test_cmds',
+    'test_core',
+    ]
+
+if get_option('bindings').contains('serial')
+    tests += 'test_serial'
+endif
+if get_option('bindings').contains('astlpc')
+    tests += 'test_astlpc'
+endif
+
+test_include_dirs = [include_directories('.'), libmctp_include_dir]
+foreach t : tests
+    test(
+        t,
+        executable(
+            t,
+            [t + '.c', 'test-utils.c'],
+            include_directories: test_include_dirs,
+            dependencies: [libmctp_dep],
+        ),
+    )
+endforeach
diff --git a/utils/meson.build b/utils/meson.build
new file mode 100644
index 0000000..ae03af8
--- /dev/null
+++ b/utils/meson.build
@@ -0,0 +1,32 @@
+demux_sources = ['mctp-demux-daemon.c']
+demux_args = []
+demux_dep = [libmctp_dep, pcap_dep, libsystemd_dep]
+# While mctp-demux-daemon will build without pcap, it won't
+# be functional.
+# TODO only build mctp-demux-daemon when pcap is available.
+if pcap_dep.found()
+    demux_args += '-DHAVE_PCAP'
+    demux_sources += 'mctp-capture.c'
+endif
+
+demux = executable('mctp-demux-daemon',
+    demux_sources,
+    include_directories: libmctp_include_dir,
+    dependencies: demux_dep,
+    c_args: demux_args,
+    install: true,
+)
+
+pipe = executable('mctp-pipe',
+    'mctp-pipe.c',
+    include_directories: libmctp_include_dir,
+    dependencies: [libmctp_dep],
+    install: false,
+)
+
+mctp_in = executable('mctp-in',
+    'mctp-in.c',
+    include_directories: libmctp_include_dir,
+    dependencies: [libmctp_dep],
+    install: false,
+)
