1project( 2 'openpower-vpd-parser', 3 'c', 4 'cpp', 5 default_options: [ 6 'warning_level=3', 7 'werror=true', 8 'cpp_std=c++20', 9 'buildtype=debugoptimized' 10 ], 11 version: '1.0', 12 meson_version: '>=0.57.0', 13) 14 15add_global_arguments('-Wno-psabi', language : ['c', 'cpp']) 16 17# 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 53phosphor_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' ]) 62 63libvpdecc_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 75if not build_tests.disabled() 76 subdir('test') 77endif 78 79compiler = meson.get_compiler('cpp') 80python = find_program('python3', required:true) 81 82compiler.has_header('CLI/CLI.hpp') 83compiler.has_header('nlohmann/json.hpp') 84 85configure_file(output: 'config.h', 86 configuration :{ 87 'INVENTORY_JSON_DEFAULT': '"'+get_option('INVENTORY_JSON_DEFAULT')+'"', 88 'VPD_FILES_PATH': '"'+get_option('VPD_FILES_PATH')+'"', 89 'INVENTORY_PATH': '"'+get_option('INVENTORY_PATH')+'"', 90 'IPZ_INTERFACE': '"'+get_option('IPZ_INTERFACE')+'"', 91 'INVENTORY_MANAGER_SERVICE': '"'+get_option('INVENTORY_MANAGER_SERVICE')+'"', 92 'BUSNAME' : '"' + get_option('BUSNAME') + '"', 93 'OBJPATH' : '"' + get_option('OBJPATH') + '"', 94 'IFACE' : '"' + get_option('IFACE') + '"', 95 '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')+'"', 98 'INVENTORY_MANAGER_CACHE' : '"'+get_option('INVENTORY_MANAGER_CACHE')+'"', 99 'INVENTORY_JSON_SYM_LINK': '"'+get_option('INVENTORY_JSON_SYM_LINK')+'"', 100 'INVENTORY_JSON_2U': '"'+get_option('INVENTORY_JSON_2U')+'"', 101 'INVENTORY_JSON_4U': '"'+get_option('INVENTORY_JSON_4U')+'"', 102 'INVENTORY_JSON_EVEREST': '"'+get_option('INVENTORY_JSON_EVEREST')+'"', 103 'DBUS_PROP_JSON': '"'+get_option('DBUS_PROP_JSON')+'"', 104 'SYSTEM_JSON' : '"'+get_option('SYSTEM_JSON')+'"', 105 'BAD_VPD_DIR': '"'+get_option('BAD_VPD_DIR')+'"', 106 'FAN_INTERFACE': '"'+get_option('FAN_INTERFACE')+'"' 107 } 108 ) 109 110common_SOURCES =['common_utility.cpp', 111'vpd-parser/parser_factory.cpp', 112 'vpd-parser/memory_vpd_parser.cpp', 113 'vpd-parser/keyword_vpd_parser.cpp', 114 'vpd-parser/ipz_parser.cpp', 'impl.cpp', 'ibm_vpd_utils.cpp', 115] 116 117if get_option('ibm-parser').enabled() 118 libgpiodcxx = dependency('libgpiodcxx') 119 ibm_read_vpd_SOURCES = ['ibm_vpd_app.cpp' 120 ]+common_SOURCES 121 122 ibm_vpd_exe = executable( 123 'ibm-read-vpd', 124 ibm_read_vpd_SOURCES, 125 dependencies: [ 126 sdbusplus, 127 phosphor_logging, 128 libgpiodcxx, 129 ], 130 link_with : libvpdecc, 131 include_directories : 'vpd-parser/', 132 install: true, 133 cpp_args : '-DIPZ_PARSER' 134 ) 135 136 vpd_tool_SOURCES = ['vpd_tool.cpp', 137 'vpd_tool_impl.cpp', 138 'vpd-manager/editor_impl.cpp', 139 ]+common_SOURCES 140 141 vpd_tool_INCLUDE = include_directories('vpd-parser/', 'vpd-manager') 142 143 vpd_tool_exe = executable( 144 'vpd-tool', 145 vpd_tool_SOURCES, 146 dependencies: [ 147 sdbusplus, 148 phosphor_logging, 149 libgpiodcxx 150 ], 151 link_with : libvpdecc, 152 install: true, 153 include_directories : vpd_tool_INCLUDE, 154 cpp_args : '-DIPZ_PARSER' 155 ) 156if get_option('vpd-manager').enabled() 157 subdir('vpd-manager') 158endif 159 160else 161 FRUGEN = '$srcdir/extra-properties.py -e' + get_option('FRU_YAML') 162 PROPGEN = '$srcdir/extra-properties.py -e' + get_option('PROP_YAML') 163 164 src_dir = meson.source_root() 165 FRU_GEN_SCRIPT = src_dir + '/writefru.py' 166 FRU_GEN_SCRIPT_FILES = src_dir + '/writefru.yaml' 167 168 PROP_GEN_SCRIPT = src_dir + '/extra-properties.py' 169 PROP_GEN_SCRIPT_FILES = src_dir + '/extra-properties-example.yaml' 170 171 writefru_hpp = custom_target('writefru.hpp', 172 command:[python, 173 FRU_GEN_SCRIPT, 174 '-i', 175 get_option('FRU_YAML') 176 ], 177 depend_files :['writefru.mako.hpp', 178 'writefru.py', 179 get_option('FRU_YAML') 180 ], 181 output:'writefru.hpp' 182 ) 183 184 extra_properties_gen_hpp = custom_target( 185 'extra-properties-gen.hpp', 186 command:[ 187 python, 188 PROP_GEN_SCRIPT, 189 '-e', 190 get_option('PROP_YAML') 191 ], 192 depend_files : ['extra-properties.mako.hpp', 193 'extra-properties.py', 194 get_option('PROP_YAML') 195 ], 196 output:'extra-properties-gen.hpp' 197 ) 198 199 openpower_read_vpd_SOURCES = ['app.cpp', 200 'args.cpp', 201 'impl.cpp', 202 'vpd-parser/ipz_parser.cpp', 203 'write.cpp', 204 'common_utility.cpp', 205 writefru_hpp, 206 extra_properties_gen_hpp 207 ] 208 209 openpower_read_vpd_exe= executable( 210 'openpower-read-vpd', 211 openpower_read_vpd_SOURCES, 212 dependencies: [ 213 sdbusplus, 214 phosphor_logging, 215 ], 216 include_directories : 'vpd-parser/', 217 install: true, 218 ) 219endif 220