blob: aa11c3228443bc19977a03f52667086643f54749 [file] [log] [blame]
Matt Johnston6586fc12024-09-10 16:01:27 +08001project(
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',
Matt Johnston6586fc12024-09-10 16:01:27 +080017]
18
19headers = [
20 'libmctp.h',
21]
22
23serial_sources = [
24 'serial.c',
25 'crc-16-ccitt.c',
26]
27
28serial_headers = [
29 'libmctp-serial.h'
30]
31
32astlpc_sources = [
33 'astlpc.c',
34 'crc32.c',
35]
36
37astlpc_headers = [
38 'libmctp-astlpc.h',
39]
40
41libmctp_sources = sources
42libmctp_headers = headers
43
44if get_option('bindings').contains('serial')
45 libmctp_sources += serial_sources
46 libmctp_headers += serial_headers
47endif
48if get_option('bindings').contains('astlpc')
49 libmctp_sources += astlpc_sources
50 libmctp_headers += astlpc_headers
51endif
52
53compiler = meson.get_compiler('c')
54
Matt Johnstonbbfcc6e2024-09-17 16:48:15 +080055if not get_option('custom_alloc') and get_option('default_alloc').require(
Matt Johnston6586fc12024-09-10 16:01:27 +080056 compiler.links('''
57 #include <stdlib.h>
58 void main()
59 {
60 free(malloc(4096));
61 }
62 ''')).allowed()
63 add_project_arguments('-DMCTP_DEFAULT_ALLOC', language : 'c')
64endif
65
Matt Johnstonbbfcc6e2024-09-17 16:48:15 +080066if get_option('custom_alloc')
67 add_project_arguments('-DMCTP_CUSTOM_ALLOC', language : 'c')
68endif
69
Matt Johnston12507272024-10-01 12:17:19 +080070if get_option('nolog')
71 add_project_arguments('-DMCTP_NOLOG', language : 'c')
72else
73 libmctp_sources += ['log.c']
74endif
75
Matt Johnston63338a22024-09-11 09:53:59 +080076feat_fileio = get_option('fileio').require(
77 compiler.links('''
78 #include <poll.h>
79 #include <unistd.h>
80 void main()
81 {
82 poll(NULL, 0, -1);
83 }
84 '''))
85if feat_fileio.allowed()
Matt Johnston6586fc12024-09-10 16:01:27 +080086 add_project_arguments('-DMCTP_HAVE_FILEIO', language : 'c')
87endif
88
89if get_option('syslog').require(
90 compiler.links('''
91 #include <stdarg.h>
92 #include <syslog.h>
93 void check_vsyslog(int level, const char *fmt, ...)
94 {
95 va_list ap;
96 va_start(ap, fmt);
97 vsyslog(0, fmt, ap);
98 va_end(ap);
99 }
100 void main()
101 {
102 check_vsyslog(0, "\n");
103 }
104 ''')).allowed()
105 add_project_arguments('-DMCTP_HAVE_SYSLOG', language : 'c')
106endif
107
108if get_option('stdio').require(
109 compiler.links('''
110 #include <stdarg.h>
111 #include <stdio.h>
112 void check_vsyslog(const char *fmt, ...)
113 {
114 va_list ap;
115 va_start(ap, fmt);
116 vprintf(fmt, ap);
117 va_end(ap);
118 }
119 void main()
120 {
121 check_vsyslog("\n");
122 }
123 ''')).allowed()
124 add_project_arguments('-DMCTP_HAVE_STDIO', language : 'c')
125endif
126
127# pcap is necessary for mctp-demux-daemon to be functional
128pcap_dep = dependency('libpcap', required: false)
129
130systemd_dep = dependency('systemd', required: false)
131libsystemd_dep = dependency('libsystemd', required: false)
132
133libmctp_include_dir = include_directories('.', is_system: true)
134libmctp = library('mctp',
135 libmctp_sources,
136 include_directories: libmctp_include_dir,
137 version: meson.project_version(),
138 install: true,
139)
140install_headers(libmctp_headers)
141
142if systemd_dep.found()
143 unitdir = systemd_dep.get_variable(pkgconfig: 'systemdsystemunitdir')
144 install_data('systemd/system/mctp-demux.service', install_dir: unitdir)
145 install_data('systemd/system/mctp-demux.socket', install_dir: unitdir)
146endif
147
148import('pkgconfig').generate(libmctp,
149 name: 'libmctp',
150 description: 'MCTP protocol implementation',
151 version: meson.project_version(),
152)
153
154libmctp_dep = declare_dependency(
155 include_directories: libmctp_include_dir,
156 link_with: libmctp,
157)
158
Matt Johnstonf9b99f12024-09-17 16:48:34 +0800159sizeof_mctp = compiler.sizeof('struct mctp',
160 include_directories: libmctp_include_dir,
161 prefix: '#include "core-internal.h"')
162sizes_h = configure_file(configuration: {
163 'sizeof_struct_mctp': sizeof_mctp,
164 },
165 input: 'libmctp-sizes.h.in',
166 output: 'libmctp-sizes.h',
167 )
168install_headers(sizes_h)
169
Matt Johnston63338a22024-09-11 09:53:59 +0800170if feat_fileio.allowed()
171 subdir('utils')
172endif
Matt Johnston6586fc12024-09-10 16:01:27 +0800173
174if get_option('tests').allowed()
175 subdir('tests')
176endif