xref: /openbmc/google-misc/dhcp-done/subprojects/metrics-ipmi-blobs/meson.build (revision 24c61c7ee8583830fd0916b7b2c7bf0561569e0f)
1# Copyright 2021 Google LLC
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#      http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15project(
16    'metrics-ipmi-blobs',
17    ['cpp', 'c'],
18    version: '0.1',
19    default_options: [
20        'warning_level=3',
21        'werror=true',
22        'cpp_std=c++23',
23        'c_std=c18',
24        'tests=' + (meson.is_subproject() ? 'disabled' : 'auto'),
25    ],
26)
27
28nanopb = find_program('nanopb_generator.py', native: true, required: false)
29if not nanopb.found()
30    nanopb_opts = import('cmake').subproject_options()
31    nanopb_opts.add_cmake_defines({'BUILD_SHARED_LIBS': 'ON'})
32    nanopb_proj = import('cmake').subproject('nanopb', options: nanopb_opts)
33    nanopb = find_program(
34        meson.global_source_root() + '/subprojects/nanopb/generator/nanopb_generator.py',
35        native: true,
36    )
37    nanopb_dep = nanopb_proj.dependency('protobuf_nanopb')
38else
39    nanopb_dep = meson.get_compiler('cpp').find_library('protobuf-nanopb')
40endif
41
42nanopb_kwargs = {
43    'output': ['@BASENAME@.pb.n.h', '@BASENAME@.pb.n.c'],
44    'command': [
45        nanopb,
46        '-q',
47        '-s',
48        'packed_struct:0',
49        '-H.n.h',
50        '-S.n.c',
51        '-I' + import('fs').relative_to(
52            meson.current_source_dir(),
53            meson.global_build_root(),
54        ),
55        '-D' + import('fs').relative_to(
56            meson.current_build_dir(),
57            meson.global_build_root(),
58        ),
59        '@INPUT@',
60    ],
61}
62
63tgt = custom_target(
64    'metricblob.pb.n.hc',
65    input: 'metricblob.proto',
66    kwargs: nanopb_kwargs,
67)
68metrics_nanopb_hdr = tgt[0]
69metrics_nanopb_src = tgt[1]
70
71metrics_nanopb_pre = declare_dependency(
72    include_directories: include_directories('.'),
73    sources: metrics_nanopb_hdr,
74    dependencies: [nanopb_dep],
75)
76
77metrics_nanopb_lib = static_library(
78    'metrics_nanopb',
79    metrics_nanopb_src,
80    implicit_include_directories: false,
81    dependencies: metrics_nanopb_pre,
82)
83
84metrics_nanopb_dep = declare_dependency(
85    dependencies: metrics_nanopb_pre,
86    link_with: metrics_nanopb_lib,
87)
88
89pre = declare_dependency(
90    include_directories: include_directories('.'),
91    dependencies: [
92        metrics_nanopb_dep,
93        dependency('phosphor-logging'),
94        dependency('phosphor-ipmi-blobs'),
95        dependency('sdbusplus'),
96    ],
97)
98
99lib = static_library(
100    'metricsblob',
101    'util.cpp',
102    'handler.cpp',
103    'metric.cpp',
104    implicit_include_directories: false,
105    dependencies: pre,
106)
107
108dep = declare_dependency(dependencies: pre, link_with: lib)
109
110shared_module(
111    'metricsblob',
112    'main.cpp',
113    dependencies: dep,
114    implicit_include_directories: false,
115    install: true,
116    install_dir: get_option('libdir') / 'blob-ipmid',
117)
118
119if get_option('tests').allowed()
120    subdir('test')
121endif
122