xref: /openbmc/libmctp/meson.build (revision bbfcc6e1)
1project(
2    'libmctp', 'c',
3    meson_version: '>= 1.1',
4    version: '0.11',
5    default_options: [
6        'debug=true',
7        'optimization=g',
8        'warning_level=2',
9        'werror=true',
10        'tests=' + (meson.is_subproject() ? 'disabled' : 'enabled'),
11    ],
12)
13
14sources = [
15     'core.c',
16     'alloc.c',
17     'log.c',
18]
19
20headers = [
21    'libmctp.h',
22]
23
24serial_sources = [
25    'serial.c',
26    'crc-16-ccitt.c',
27]
28
29serial_headers = [
30    'libmctp-serial.h'
31]
32
33astlpc_sources = [
34    'astlpc.c',
35    'crc32.c',
36]
37
38astlpc_headers = [
39    'libmctp-astlpc.h',
40]
41
42libmctp_sources = sources
43libmctp_headers = headers
44
45if get_option('bindings').contains('serial')
46    libmctp_sources += serial_sources
47    libmctp_headers += serial_headers
48endif
49if get_option('bindings').contains('astlpc')
50    libmctp_sources += astlpc_sources
51    libmctp_headers += astlpc_headers
52endif
53
54compiler = meson.get_compiler('c')
55
56if not get_option('custom_alloc') and get_option('default_alloc').require(
57    compiler.links('''
58        #include <stdlib.h>
59        void main()
60        {
61            free(malloc(4096));
62        }
63    ''')).allowed()
64    add_project_arguments('-DMCTP_DEFAULT_ALLOC', language : 'c')
65endif
66
67if get_option('custom_alloc')
68    add_project_arguments('-DMCTP_CUSTOM_ALLOC', language : 'c')
69endif
70
71feat_fileio = get_option('fileio').require(
72    compiler.links('''
73        #include <poll.h>
74        #include <unistd.h>
75        void main()
76        {
77            poll(NULL, 0, -1);
78        }
79    '''))
80if feat_fileio.allowed()
81    add_project_arguments('-DMCTP_HAVE_FILEIO', language : 'c')
82endif
83
84if get_option('syslog').require(
85    compiler.links('''
86        #include <stdarg.h>
87        #include <syslog.h>
88        void check_vsyslog(int level, const char *fmt, ...)
89        {
90            va_list ap;
91            va_start(ap, fmt);
92            vsyslog(0, fmt, ap);
93            va_end(ap);
94        }
95        void main()
96        {
97            check_vsyslog(0, "\n");
98        }
99        ''')).allowed()
100    add_project_arguments('-DMCTP_HAVE_SYSLOG', language : 'c')
101endif
102
103if get_option('stdio').require(
104    compiler.links('''
105        #include <stdarg.h>
106        #include <stdio.h>
107        void check_vsyslog(const char *fmt, ...)
108        {
109            va_list ap;
110            va_start(ap, fmt);
111            vprintf(fmt, ap);
112            va_end(ap);
113        }
114        void main()
115        {
116            check_vsyslog("\n");
117        }
118        ''')).allowed()
119    add_project_arguments('-DMCTP_HAVE_STDIO', language : 'c')
120endif
121
122# pcap is necessary for mctp-demux-daemon to be functional
123pcap_dep = dependency('libpcap', required: false)
124
125systemd_dep = dependency('systemd', required: false)
126libsystemd_dep = dependency('libsystemd', required: false)
127
128libmctp_include_dir = include_directories('.', is_system: true)
129libmctp = library('mctp',
130    libmctp_sources,
131    include_directories: libmctp_include_dir,
132    version: meson.project_version(),
133    install: true,
134)
135install_headers(libmctp_headers)
136
137if systemd_dep.found()
138    unitdir = systemd_dep.get_variable(pkgconfig: 'systemdsystemunitdir')
139    install_data('systemd/system/mctp-demux.service', install_dir: unitdir)
140    install_data('systemd/system/mctp-demux.socket', install_dir: unitdir)
141endif
142
143import('pkgconfig').generate(libmctp,
144    name: 'libmctp',
145    description: 'MCTP protocol implementation',
146    version: meson.project_version(),
147)
148
149libmctp_dep = declare_dependency(
150    include_directories: libmctp_include_dir,
151    link_with: libmctp,
152)
153
154if feat_fileio.allowed()
155    subdir('utils')
156endif
157
158if get_option('tests').allowed()
159    subdir('tests')
160endif
161