1project(
2    'phosphor-gpio-monitor',
3    'cpp',
4    default_options: [
5        'warning_level=3',
6        'werror=true',
7        'cpp_std=c++23',
8        'buildtype=debugoptimized'
9    ],
10    license: 'Apache-2.0',
11    version: '1.0',
12    meson_version: '>=1.1.1',
13)
14
15cxx = meson.get_compiler('cpp')
16
17build_tests = get_option('tests')
18
19libevdev = dependency('libevdev')
20libsystemd = dependency('libsystemd')
21libgpiod = dependency('libgpiod')
22phosphor_dbus_interfaces = dependency('phosphor-dbus-interfaces')
23phosphor_logging = dependency('phosphor-logging')
24sdbusplus = dependency('sdbusplus')
25systemd = dependency('systemd')
26
27if cxx.has_header('nlohmann/json.hpp')
28    nlohmann_json_dep = declare_dependency()
29else
30    subproject('nlohmann', required: false)
31    nlohmann_json_dep = declare_dependency(
32        include_directories: [
33            'subprojects/nlohmann-json/single_include',
34            'subprojects/nlohmann-json/single_include/nlohmann',
35        ]
36    )
37endif
38
39if cxx.has_header('CLI/CLI.hpp')
40    cli11_dep = declare_dependency()
41else
42    cli11_dep = dependency('CLI11')
43endif
44
45boost_args = ['-DBOOST_ASIO_DISABLE_THREADS',
46              '-DBOOST_ERROR_CODE_HEADER_ONLY',
47              '-DBOOST_SYSTEM_NO_DEPRECATED']
48
49systemd_system_unit_dir = systemd.get_variable(
50    'systemdsystemunitdir',
51    pkgconfig_define: ['prefix', get_option('prefix')])
52
53configure_file(
54    copy: true,
55    input: 'phosphor-gpio-monitor@.service',
56    install: true,
57    install_dir: systemd_system_unit_dir,
58    output: 'phosphor-gpio-monitor@.service'
59)
60
61configure_file(
62    copy: true,
63    input: 'phosphor-multi-gpio-monitor.service',
64    install: true,
65    install_dir: systemd_system_unit_dir,
66    output: 'phosphor-multi-gpio-monitor.service'
67)
68
69configure_file(
70    copy: true,
71    input: 'phosphor-gpio-presence@.service',
72    install: true,
73    install_dir: systemd_system_unit_dir,
74    output: 'phosphor-gpio-presence@.service'
75)
76
77udev = dependency('udev')
78udev_rules_dir = join_paths(
79    udev.get_variable(
80        'udevdir',
81        pkgconfig_define: ['prefix', get_option('prefix')],
82    ),
83    'rules.d',
84)
85
86configure_file(
87    copy: true,
88    input: '99-gpio-keys.rules',
89    install: true,
90    install_dir: udev_rules_dir,
91    output: '99-gpio-keys.rules'
92)
93
94
95configure_file(
96    copy: true,
97    input: 'phosphor-multi-gpio-monitor.json',
98    install: true,
99    install_dir: '/usr/share/phosphor-gpio-monitor',
100    output: 'phosphor-multi-gpio-monitor.json'
101)
102
103libevdev_o = static_library(
104    'libevdev_o',
105    'evdev.cpp',
106    dependencies: [
107        libevdev,
108        phosphor_dbus_interfaces,
109        phosphor_logging,
110        sdbusplus,
111    ]
112)
113
114libmonitor_o = static_library(
115    'libmonitor_o',
116     'monitor.cpp',
117    dependencies: [
118        libevdev,
119        libsystemd,
120        phosphor_logging,
121    ],
122    link_with: [
123        libevdev_o,
124    ],
125)
126
127phosphor_gpio_monitor = executable(
128    'phosphor-gpio-monitor',
129    'mainapp.cpp',
130    dependencies: [
131        libevdev,
132        libsystemd,
133        phosphor_logging,
134    ],
135    install: true,
136    link_with: [
137        libevdev_o,
138        libmonitor_o,
139    ],
140)
141
142executable(
143   'phosphor-multi-gpio-monitor',
144   'gpioMonMain.cpp',
145   'gpioMon.cpp',
146   dependencies: [
147        cli11_dep,
148        libgpiod,
149        nlohmann_json_dep,
150        phosphor_logging,
151        sdbusplus,
152    ],
153    cpp_args: boost_args,
154    install: true,
155)
156
157subdir('gpio-util')
158subdir('presence')
159subdir('test')
160