blob: d2bb5cdb3c1bb08d487c0cd71c756db21d92f81c [file] [log] [blame]
Patrick Williams08949432020-06-09 10:22:12 -05001project('phosphor-dbus-interfaces', 'cpp',
2 meson_version: '>= 0.54.1',
3 default_options: [
4 'buildtype=debugoptimized',
5 'cpp_std=c++17',
6 'warning_level=3',
7 'werror=true',
8 ],
9 version: '1.0.0',
10)
11# meson_version >= 0.54.1 is necessary because that is the first place meson
12# generates unique object filenames for two files with the same `basename`.
13# Many sdbus++ generated files have `basename` collisions because they are
14# named like `.../server.cpp`. Prior to this version, meson would create a
15# ninja recipe for a single `server.o` file.
16
17# Get sdbusplus dependency.
18sdbusplus_dep = dependency('sdbusplus', required: false)
19if sdbusplus_dep.found()
20 sdbusplusplus_prog = find_program('sdbus++')
21 sdbusgen_prog = find_program('sdbus++-gendir')
22else
23 sdbusplus_proj = subproject('sdbusplus', required: true)
24 sdbusplus_dep = sdbusplus_proj.get_variable('sdbusplus_dep')
25 sdbusplusplus_prog = sdbusplus_proj.get_variable('sdbusplusplus_prog')
26 sdbusgen_prog = sdbusplus_proj.get_variable('sdbusgen_prog')
27endif
28
29realpath_prog = find_program('realpath')
30
31# Parse options to determine appropriate subdirectories to support.
32selected_subdirs = []
33if get_option('data_com_ibm')
34 selected_subdirs += 'com/ibm'
35endif
36if get_option('data_org_open_power')
37 selected_subdirs += 'org/open_power'
38endif
39if get_option('data_xyz_openbmc_project')
40 selected_subdirs += 'xyz/openbmc_project'
41endif
42
43# Install the selected YAML files.
44foreach d : selected_subdirs
45 install_subdir(
46 d,
47 install_dir: get_option('datadir') / 'phosphor-dbus-yaml/yaml' / d,
48 strip_directory: true,
49 )
50endforeach
51
52# If libphosphor_dbus was not enabled, exit out from here. We installed
53# the YAML which is all we are asked to do.
54if not get_option('libphosphor_dbus')
55 subdir_done()
56endif
57
58# Generate all the sdbus++ files from the selected subdirectories.
59generated_root = meson.current_build_dir() / 'gen-out'
60generated_files = run_command(
61 sdbusgen_prog,
62 '--list-all',
63 '--tool', sdbusplusplus_prog,
64 '--output', generated_root,
65 selected_subdirs,
66 check: true,
67).stdout().strip().split('\n')
68
69# Parse through the list from sdbus++-gendir and put into sets.
70generated_headers = []
71generated_cpp = []
72generated_cpp_fullpath = []
73generated_others = []
74
75foreach f : generated_files
76 rel_path = run_command(
77 realpath_prog,
78 '--relative-to', generated_root,
79 f,
80 ).stdout().strip().split('\n')[-1]
81
82 if f.endswith('.hpp')
83 generated_headers += rel_path
84 elif f.endswith('.cpp')
85 generated_cpp += rel_path
86 generated_cpp_fullpath += f
87 else
88 generated_others += rel_path
89 endif
90endforeach
91
92# Install the generated header files.
93install_subdir(
94 generated_root,
95 exclude_files: [ generated_cpp, generated_others ],
96 install_dir: get_option('includedir'),
97 strip_directory: true,
98)
99
100# Install the generated markdown files.
101install_subdir(
102 generated_root,
103 exclude_files: [ generated_headers, generated_cpp ],
104 install_dir: get_option('datadir') / meson.project_name(),
105 strip_directory: true,
106)
107
108# Define and build libphosphor_dbus.so from the C++ files.
109libphosphor_dbus = library(
110 'phosphor_dbus',
111 files(generated_cpp_fullpath),
112 include_directories: include_directories('gen-out'),
113 dependencies: sdbusplus_dep,
114 version: meson.project_version(),
115 install: true,
116)
117
118import('pkgconfig').generate(
119 libraries: libphosphor_dbus,
120 name: meson.project_name(),
121 version: meson.project_version(),
122 description: 'Generated sdbusplus bindings for phosphor-dbus-interfaces'
123)