blob: 304c4c971ef508c8cc6e2c4f783659157b15e2f7 [file] [log] [blame]
SunnySrivastava19847ef54422019-12-03 02:47:37 -06001project(
2 'openpower-vpd-parser',
3 'c',
4 'cpp',
5 default_options: [
Priyanga Ramasamy9d149342020-07-16 23:41:26 +05306 'warning_level=3',
7 'werror=true',
Patrick Williams8e532c12021-10-06 15:34:56 -05008 'cpp_std=c++20',
PriyangaRamasamyf272efc2021-03-03 23:24:31 -06009 'buildtype=debugoptimized'
SunnySrivastava19847ef54422019-12-03 02:47:37 -060010 ],
Patrick Williams8e532c12021-10-06 15:34:56 -050011 version: '1.0',
12 meson_version: '>=0.57.0',
SunnySrivastava19847ef54422019-12-03 02:47:37 -060013)
14
Andrew Jeffery3aec4782021-06-15 11:45:23 +093015add_global_arguments('-Wno-psabi', language : ['c', 'cpp'])
16
Andrew Jefferyf3953762021-06-15 11:10:10 +093017# Disable FORTIFY_SOURCE when compiling with no optimization
18if(get_option('optimization') == '0')
19 add_project_arguments('-U_FORTIFY_SOURCE',language:['cpp','c'])
20 message('Disabling FORTIFY_SOURCE as optimization is set to 0')
21endif
22
23# Setup googletest before we import any projects that also depend on it to make
24# sure we have control over its configuration
25build_tests = get_option('tests')
26if not build_tests.disabled()
27 gtest_dep = dependency('gtest', main: true, disabler: true, required: false)
28 gmock_dep = dependency('gmock', disabler: true, required: false)
29 if not gtest_dep.found() or not gmock_dep.found()
30 cmake = import('cmake')
31 gtest_opts = cmake.subproject_options()
32 gtest_opts.set_override_option('warning_level', '1')
33 gtest_opts.set_override_option('werror', 'false')
34 gtest_proj = cmake.subproject('googletest',
35 options: gtest_opts,
36 required: false)
37 if gtest_proj.found()
38 gtest_dep = declare_dependency(
39 dependencies: [
40 dependency('threads'),
41 gtest_proj.dependency('gtest'),
42 gtest_proj.dependency('gtest_main'),
43 ]
44 )
45 gmock_dep = gtest_proj.dependency('gmock')
46 else
47 assert(not get_option('tests').enabled(),
48 'Googletest is required if tests are enabled')
49 endif
50 endif
51endif
52
Andrew Jeffery60b5bd22021-06-15 10:41:28 +093053phosphor_dbus_interfaces = dependency('phosphor-dbus-interfaces',
54 default_options: [ 'data_com_ibm=true', 'data_org_open_power=true' ],
55 fallback: ['phosphor-dbus-interfaces', 'phosphor_dbus_interfaces_dep'])
56
57phosphor_logging = dependency('phosphor-logging',
58 default_options: [ 'openpower-pel-extension=enabled' ],
59 fallback: ['phosphor-logging', 'phosphor_logging_dep'])
60
61sdbusplus = dependency('sdbusplus', fallback: [ 'sdbusplus', 'sdbusplus_dep' ])
SunnySrivastava19847ef54422019-12-03 02:47:37 -060062
Priyanga Ramasamya4a2adf2022-02-03 05:43:41 -060063libvpdecc_src = files(
64 'vpdecc/vpdecc.c',
65 'vpdecc/vpdecc_support.c'
66)
67
68libvpdecc = shared_library(
69 'vpdecc',
70 libvpdecc_src,
71 version: meson.project_version(),
72 install: true,
73)
74
Andrew Jefferyf3953762021-06-15 11:10:10 +093075if not build_tests.disabled()
76 subdir('test')
77endif
78
SunnySrivastava19847ef54422019-12-03 02:47:37 -060079compiler = meson.get_compiler('cpp')
80python = find_program('python3', required:true)
81
SunnySrivastava19847ef54422019-12-03 02:47:37 -060082compiler.has_header('CLI/CLI.hpp')
83compiler.has_header('nlohmann/json.hpp')
PriyangaRamasamyf8f9c862021-02-22 22:53:35 -060084
SunnySrivastava19847ef54422019-12-03 02:47:37 -060085configure_file(output: 'config.h',
86 configuration :{
Santosh Puranik0246a4d2020-11-04 16:57:39 +053087 'INVENTORY_JSON_DEFAULT': '"'+get_option('INVENTORY_JSON_DEFAULT')+'"',
88 'VPD_FILES_PATH': '"'+get_option('VPD_FILES_PATH')+'"',
PriyangaRamasamy1f0b1e62020-02-20 20:48:25 +053089 'INVENTORY_PATH': '"'+get_option('INVENTORY_PATH')+'"',
SunnySrivastava198443306542020-04-01 02:50:20 -050090 'IPZ_INTERFACE': '"'+get_option('IPZ_INTERFACE')+'"',
91 'INVENTORY_MANAGER_SERVICE': '"'+get_option('INVENTORY_MANAGER_SERVICE')+'"',
SunnySrivastava1984a7392592020-03-09 10:19:33 -050092 'BUSNAME' : '"' + get_option('BUSNAME') + '"',
93 'OBJPATH' : '"' + get_option('OBJPATH') + '"',
94 'IFACE' : '"' + get_option('IFACE') + '"',
SunnySrivastava198443306542020-04-01 02:50:20 -050095 'OBJECT_MAPPER_SERVICE' : '"'+get_option('OBJECT_MAPPER_SERVICE')+'"',
96 'OBJECT_MAPPER_OBJECT' : '"'+get_option('OBJECT_MAPPER_OBJECT')+'"',
97 'POWER_SUPPLY_TYPE_INTERFACE' : '"'+get_option('POWER_SUPPLY_TYPE_INTERFACE')+'"',
PriyangaRamasamy83a1d5d2020-04-30 19:15:43 +053098 'INVENTORY_MANAGER_CACHE' : '"'+get_option('INVENTORY_MANAGER_CACHE')+'"',
Santosh Puranik0246a4d2020-11-04 16:57:39 +053099 'INVENTORY_JSON_SYM_LINK': '"'+get_option('INVENTORY_JSON_SYM_LINK')+'"',
100 'INVENTORY_JSON_2U': '"'+get_option('INVENTORY_JSON_2U')+'"',
Santosh Puranik4641bff2020-11-30 20:26:44 +0530101 'INVENTORY_JSON_4U': '"'+get_option('INVENTORY_JSON_4U')+'"',
PriyangaRamasamyc0a534f2020-08-24 21:29:18 +0530102 'INVENTORY_JSON_EVEREST': '"'+get_option('INVENTORY_JSON_EVEREST')+'"',
Alpana Kumarif05effd2021-04-07 07:32:53 -0500103 'DBUS_PROP_JSON': '"'+get_option('DBUS_PROP_JSON')+'"',
PriyangaRamasamyc2fe40f2021-03-02 06:27:33 -0600104 'SYSTEM_JSON' : '"'+get_option('SYSTEM_JSON')+'"',
PriyangaRamasamy8cc5b152021-06-03 13:05:17 -0500105 'BAD_VPD_DIR': '"'+get_option('BAD_VPD_DIR')+'"',
106 'FAN_INTERFACE': '"'+get_option('FAN_INTERFACE')+'"'
SunnySrivastava19847ef54422019-12-03 02:47:37 -0600107 }
PriyangaRamasamy1f0b1e62020-02-20 20:48:25 +0530108 )
SunnySrivastava198443306542020-04-01 02:50:20 -0500109
Sunny Srivastava6c71c9d2021-04-15 04:43:54 -0500110common_SOURCES =['common_utility.cpp',
PriyangaRamasamyc0a534f2020-08-24 21:29:18 +0530111'vpd-parser/parser_factory.cpp',
112 'vpd-parser/memory_vpd_parser.cpp',
113 'vpd-parser/keyword_vpd_parser.cpp',
Sunny Srivastava6c71c9d2021-04-15 04:43:54 -0500114 'vpd-parser/ipz_parser.cpp', 'impl.cpp', 'ibm_vpd_utils.cpp',
PriyangaRamasamyc0a534f2020-08-24 21:29:18 +0530115]
116
SunnySrivastava198443306542020-04-01 02:50:20 -0500117if get_option('ibm-parser').enabled()
Alpana Kumari2f793042020-08-18 05:51:03 -0500118 libgpiodcxx = dependency('libgpiodcxx')
PriyangaRamasamyc0a534f2020-08-24 21:29:18 +0530119 ibm_read_vpd_SOURCES = ['ibm_vpd_app.cpp'
120 ]+common_SOURCES
SunnySrivastava19847ef54422019-12-03 02:47:37 -0600121
122 ibm_vpd_exe = executable(
123 'ibm-read-vpd',
124 ibm_read_vpd_SOURCES,
125 dependencies: [
126 sdbusplus,
127 phosphor_logging,
Alpana Kumari2f793042020-08-18 05:51:03 -0500128 libgpiodcxx,
SunnySrivastava19847ef54422019-12-03 02:47:37 -0600129 ],
Priyanga Ramasamya4a2adf2022-02-03 05:43:41 -0600130 link_with : libvpdecc,
SunnySrivastava1984e12b1812020-05-26 02:23:11 -0500131 include_directories : 'vpd-parser/',
SunnySrivastava19847ef54422019-12-03 02:47:37 -0600132 install: true,
133 cpp_args : '-DIPZ_PARSER'
134 )
PriyangaRamasamy1f0b1e62020-02-20 20:48:25 +0530135
136 vpd_tool_SOURCES = ['vpd_tool.cpp',
PriyangaRamasamyc0a534f2020-08-24 21:29:18 +0530137 'vpd_tool_impl.cpp',
138 'vpd-manager/editor_impl.cpp',
139 ]+common_SOURCES
140
141 vpd_tool_INCLUDE = include_directories('vpd-parser/', 'vpd-manager')
PriyangaRamasamy1f0b1e62020-02-20 20:48:25 +0530142
143 vpd_tool_exe = executable(
144 'vpd-tool',
145 vpd_tool_SOURCES,
146 dependencies: [
Alpana Kumari735dee92022-03-25 01:24:40 -0500147 sdbusplus,
148 libgpiodcxx
PriyangaRamasamy1f0b1e62020-02-20 20:48:25 +0530149 ],
Priyanga Ramasamya4a2adf2022-02-03 05:43:41 -0600150 link_with : libvpdecc,
PriyangaRamasamyc0a534f2020-08-24 21:29:18 +0530151 install: true,
152 include_directories : vpd_tool_INCLUDE
PriyangaRamasamy1f0b1e62020-02-20 20:48:25 +0530153 )
SunnySrivastava1984a7392592020-03-09 10:19:33 -0500154if get_option('vpd-manager').enabled()
155 subdir('vpd-manager')
156endif
157
SunnySrivastava19847ef54422019-12-03 02:47:37 -0600158else
159 FRUGEN = '$srcdir/extra-properties.py -e' + get_option('FRU_YAML')
160 PROPGEN = '$srcdir/extra-properties.py -e' + get_option('PROP_YAML')
161
162 src_dir = meson.source_root()
163 FRU_GEN_SCRIPT = src_dir + '/writefru.py'
164 FRU_GEN_SCRIPT_FILES = src_dir + '/writefru.yaml'
165
166 PROP_GEN_SCRIPT = src_dir + '/extra-properties.py'
167 PROP_GEN_SCRIPT_FILES = src_dir + '/extra-properties-example.yaml'
168
169 writefru_hpp = custom_target('writefru.hpp',
170 command:[python,
171 FRU_GEN_SCRIPT,
172 '-i',
173 get_option('FRU_YAML')
174 ],
175 depend_files :['writefru.mako.hpp',
176 'writefru.py',
177 get_option('FRU_YAML')
178 ],
179 output:'writefru.hpp'
180 )
181
182 extra_properties_gen_hpp = custom_target(
183 'extra-properties-gen.hpp',
184 command:[
185 python,
186 PROP_GEN_SCRIPT,
187 '-e',
188 get_option('PROP_YAML')
189 ],
190 depend_files : ['extra-properties.mako.hpp',
191 'extra-properties.py',
192 get_option('PROP_YAML')
193 ],
194 output:'extra-properties-gen.hpp'
195 )
196
197 openpower_read_vpd_SOURCES = ['app.cpp',
198 'args.cpp',
199 'impl.cpp',
SunnySrivastava1984e12b1812020-05-26 02:23:11 -0500200 'vpd-parser/ipz_parser.cpp',
SunnySrivastava19847ef54422019-12-03 02:47:37 -0600201 'write.cpp',
Sunny Srivastava6c71c9d2021-04-15 04:43:54 -0500202 'common_utility.cpp',
SunnySrivastava19847ef54422019-12-03 02:47:37 -0600203 writefru_hpp,
204 extra_properties_gen_hpp
205 ]
206
207 openpower_read_vpd_exe= executable(
208 'openpower-read-vpd',
209 openpower_read_vpd_SOURCES,
210 dependencies: [
211 sdbusplus,
212 phosphor_logging,
213 ],
SunnySrivastava1984e12b1812020-05-26 02:23:11 -0500214 include_directories : 'vpd-parser/',
SunnySrivastava19847ef54422019-12-03 02:47:37 -0600215 install: true,
216 )
217endif