1project(
2     'openpower-vpd-parser',
3     'c',
4     'cpp',
5     default_options: [
6       'warning_level=3',
7       'werror=true',
8       'cpp_std=c++17'
9     ],
10     version: '1.0'
11)
12
13build_tests = get_option('tests')
14
15sdbusplus = dependency('sdbusplus')
16phosphor_logging = dependency('phosphor-logging')
17phosphor_dbus_interfaces = dependency('phosphor-dbus-interfaces')
18
19compiler = meson.get_compiler('cpp')
20python = find_program('python3', required:true)
21
22compiler.has_header('CLI/CLI.hpp')
23compiler.has_header('nlohmann/json.hpp')
24add_global_arguments('-Wno-psabi', language : ['c', 'cpp'])
25configure_file(output: 'config.h',
26                       configuration :{
27                       'INVENTORY_JSON_DEFAULT': '"'+get_option('INVENTORY_JSON_DEFAULT')+'"',
28                       'VPD_FILES_PATH': '"'+get_option('VPD_FILES_PATH')+'"',
29                       'INVENTORY_PATH': '"'+get_option('INVENTORY_PATH')+'"',
30                       'IPZ_INTERFACE': '"'+get_option('IPZ_INTERFACE')+'"',
31                       'INVENTORY_MANAGER_SERVICE': '"'+get_option('INVENTORY_MANAGER_SERVICE')+'"',
32                       'BUSNAME' : '"' + get_option('BUSNAME') + '"',
33                       'OBJPATH' : '"' + get_option('OBJPATH') + '"',
34                       'IFACE' : '"' + get_option('IFACE') + '"',
35                       'OBJECT_MAPPER_SERVICE' : '"'+get_option('OBJECT_MAPPER_SERVICE')+'"',
36                       'OBJECT_MAPPER_OBJECT' : '"'+get_option('OBJECT_MAPPER_OBJECT')+'"',
37                       'POWER_SUPPLY_TYPE_INTERFACE' : '"'+get_option('POWER_SUPPLY_TYPE_INTERFACE')+'"',
38                       'INVENTORY_MANAGER_CACHE' : '"'+get_option('INVENTORY_MANAGER_CACHE')+'"',
39                       'INVENTORY_JSON_SYM_LINK': '"'+get_option('INVENTORY_JSON_SYM_LINK')+'"',
40                       'INVENTORY_JSON_2U': '"'+get_option('INVENTORY_JSON_2U')+'"',
41                       'INVENTORY_JSON_4U': '"'+get_option('INVENTORY_JSON_4U')+'"',
42                       'INVENTORY_JSON_EVEREST': '"'+get_option('INVENTORY_JSON_EVEREST')+'"'
43                       }
44  )
45
46if get_option('ibm-parser').enabled()
47        libgpiodcxx = dependency('libgpiodcxx')
48        ibm_read_vpd_SOURCES = ['ibm_vpd_app.cpp',
49                                'vpd-parser/ipz_parser.cpp',
50                                'impl.cpp',
51                                'utils.cpp',
52                                'vpd-parser/keyword_vpd_parser.cpp',
53                                'vpdecc/vpdecc.c',
54                                'vpdecc/vpdecc_support.c',
55                                'vpd-parser/memory_vpd_parser.cpp',
56                                'vpd-parser/parser_factory.cpp'
57                               ]
58
59        ibm_vpd_exe = executable(
60                                'ibm-read-vpd',
61                                ibm_read_vpd_SOURCES,
62                                dependencies: [
63                                        sdbusplus,
64                                        phosphor_logging,
65                                        libgpiodcxx,
66                                ],
67                                include_directories : 'vpd-parser/',
68                                install: true,
69                                cpp_args : '-DIPZ_PARSER'
70                            )
71
72        vpd_tool_SOURCES = ['vpd_tool.cpp',
73                            'vpd_tool_impl.cpp'
74                           ]
75
76        vpd_tool_exe = executable(
77                                 'vpd-tool',
78                                 vpd_tool_SOURCES,
79                                 dependencies: [
80                                   sdbusplus
81                                   ],
82                                 install: true
83                                 )
84if get_option('vpd-manager').enabled()
85    subdir('vpd-manager')
86endif
87
88else
89        FRUGEN = '$srcdir/extra-properties.py -e' + get_option('FRU_YAML')
90        PROPGEN = '$srcdir/extra-properties.py -e' + get_option('PROP_YAML')
91
92        src_dir = meson.source_root()
93        FRU_GEN_SCRIPT = src_dir + '/writefru.py'
94        FRU_GEN_SCRIPT_FILES = src_dir + '/writefru.yaml'
95
96        PROP_GEN_SCRIPT = src_dir + '/extra-properties.py'
97        PROP_GEN_SCRIPT_FILES = src_dir + '/extra-properties-example.yaml'
98
99        writefru_hpp = custom_target('writefru.hpp',
100                                     command:[python,
101                                              FRU_GEN_SCRIPT,
102                                              '-i',
103                                              get_option('FRU_YAML')
104                                     ],
105                                     depend_files :['writefru.mako.hpp',
106                                                    'writefru.py',
107                                                    get_option('FRU_YAML')
108                                     ],
109                                     output:'writefru.hpp'
110        )
111
112        extra_properties_gen_hpp = custom_target(
113                                        'extra-properties-gen.hpp',
114                                        command:[
115                                                python,
116                                                PROP_GEN_SCRIPT,
117                                                '-e',
118                                                get_option('PROP_YAML')
119                                        ],
120                                        depend_files : ['extra-properties.mako.hpp',
121                                                        'extra-properties.py',
122                                                        get_option('PROP_YAML')
123                                        ],
124                                        output:'extra-properties-gen.hpp'
125        )
126
127        openpower_read_vpd_SOURCES = ['app.cpp',
128                                      'args.cpp',
129                                      'impl.cpp',
130                                      'vpd-parser/ipz_parser.cpp',
131                                      'write.cpp',
132                                      'utils.cpp',
133                                      writefru_hpp,
134                                      extra_properties_gen_hpp
135        ]
136
137        openpower_read_vpd_exe= executable(
138                'openpower-read-vpd',
139                openpower_read_vpd_SOURCES,
140                dependencies: [
141                        sdbusplus,
142                        phosphor_logging,
143                ],
144                include_directories : 'vpd-parser/',
145                install: true,
146        )
147endif
148subdir('test')
149