1project(
2    'openpower-debug-collector',
3    'cpp',
4    meson_version: '>= 0.58.0',
5    default_options: [
6        'warning_level=3',
7        'werror=true',
8        'cpp_std=c++20'
9    ],
10    license: 'Apache-2.0',
11    version: '1.0.0',
12)
13
14systemd = dependency('systemd', required : true)
15
16sdbusplus_dep = dependency('sdbusplus')
17sdbusplusplus_prog = find_program('sdbus++')
18sdbuspp_gen_meson_prog = find_program('sdbus++-gen-meson')
19sdbusplusplus_depfiles = files()
20if sdbusplus_dep.type_name() == 'internal'
21    sdbusplusplus_depfiles = subproject('sdbusplus').get_variable('sdbusplusplus_depfiles')
22endif
23
24phosphorlogging = dependency(
25    'phosphor-logging',
26    fallback: [
27        'phosphor-logging',
28        'phosphor_logging_dep'
29    ]
30)
31
32fmt_dep = dependency('fmt', required: false)
33if not fmt_dep.found()
34  fmt_proj = import('cmake').subproject(
35    'fmt',
36    cmake_options: [
37      '-DCMAKE_POSITION_INDEPENDENT_CODE=ON',
38      '-DMASTER_PROJECT=OFF'
39    ],
40    required: false)
41  assert(fmt_proj.found(), 'fmtlib is required')
42  fmt_dep = fmt_proj.dependency('fmt')
43endif
44
45realpath_prog = find_program('realpath')
46
47selected_subdirs = []
48selected_subdirs += 'org/open_power'
49
50generated_root = meson.current_build_dir() / 'gen'
51generated_others = []
52generated_sources = []
53
54# Source the generated meson files
55subdir('gen')
56foreach d : selected_subdirs
57    subdir('gen' / d)
58endforeach
59
60# Parse through the list from sdbus++-gendir and put into sets.
61generated_headers = []
62generated_cpp = []
63generated_others_files = []
64
65foreach g : generated_sources generated_others
66    foreach f : g.to_list()
67        rel_path = run_command(
68            realpath_prog,
69            '--relative-to', generated_root,
70            f.full_path(),
71        ).stdout().strip().split('\n')[-1]
72
73        if rel_path.endswith('.hpp')
74            generated_headers += rel_path
75        elif rel_path.endswith('.cpp')
76            generated_cpp += rel_path
77        else
78            generated_others_files += rel_path
79        endif
80    endforeach
81endforeach
82
83cxx = meson.get_compiler('cpp')
84conf_data = configuration_data()
85if get_option('hostboot-dump-collection').enabled()
86    conf_data.set('WATCHDOG_DUMP_COLLECTION', true)
87    extra_deps = [
88        cxx.find_library('pdbg'),
89        cxx.find_library('libdt-api'),
90        cxx.find_library('phal')
91    ]
92    subdir('watchdog')
93else
94    conf_data.set('WATCHDOG_DUMP_COLLECTION', false)
95    watchdog_lib = []
96    extra_deps = []
97endif
98
99configure_file(output: 'config.h', configuration: conf_data)
100
101deps = [
102    systemd,
103    sdbusplus_dep,
104    phosphorlogging,
105    fmt_dep,
106    extra_deps
107]
108
109executable('watchdog_timeout',
110    'watchdog_timeout.cpp',
111    generated_sources,
112    dependencies: deps,
113    link_with: watchdog_lib,
114    include_directories: include_directories('gen'),
115    implicit_include_directories: true,
116    install: true
117)
118
119executable('checkstop_app',
120    'checkstop_app.cpp',
121    generated_sources,
122    dependencies: deps,
123    include_directories: include_directories('gen'),
124    implicit_include_directories: true,
125    install: true
126)
127