blob: ccf514c8c962e2ce4bcd161d5eaa6e0cc3e28732 [file] [log] [blame]
Brandon Kimdab96f12021-02-18 11:21:37 -08001# 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
Sui Chen03eba282021-02-11 11:35:56 -080015project(
Patrick Williams24c61c72025-02-01 08:38:07 -050016 '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 ],
Sui Chen03eba282021-02-11 11:35:56 -080026)
27
William A. Kennington III7f493702024-02-08 01:09:11 -080028nanopb = find_program('nanopb_generator.py', native: true, required: false)
29if not nanopb.found()
Patrick Williams24c61c72025-02-01 08:38:07 -050030 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')
William A. Kennington III7f493702024-02-08 01:09:11 -080038else
Patrick Williams24c61c72025-02-01 08:38:07 -050039 nanopb_dep = meson.get_compiler('cpp').find_library('protobuf-nanopb')
William A. Kennington III7f493702024-02-08 01:09:11 -080040endif
Sui Chen03eba282021-02-11 11:35:56 -080041
William A. Kennington III7f493702024-02-08 01:09:11 -080042nanopb_kwargs = {
Patrick Williams24c61c72025-02-01 08:38:07 -050043 '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 ],
William A. Kennington III7f493702024-02-08 01:09:11 -080061}
Sui Chen03eba282021-02-11 11:35:56 -080062
William A. Kennington III7f493702024-02-08 01:09:11 -080063tgt = custom_target(
Patrick Williams24c61c72025-02-01 08:38:07 -050064 'metricblob.pb.n.hc',
65 input: 'metricblob.proto',
66 kwargs: nanopb_kwargs,
67)
William A. Kennington III7f493702024-02-08 01:09:11 -080068metrics_nanopb_hdr = tgt[0]
69metrics_nanopb_src = tgt[1]
70
71metrics_nanopb_pre = declare_dependency(
Patrick Williams24c61c72025-02-01 08:38:07 -050072 include_directories: include_directories('.'),
73 sources: metrics_nanopb_hdr,
74 dependencies: [nanopb_dep],
75)
William A. Kennington III7f493702024-02-08 01:09:11 -080076
77metrics_nanopb_lib = static_library(
Patrick Williams24c61c72025-02-01 08:38:07 -050078 'metrics_nanopb',
79 metrics_nanopb_src,
80 implicit_include_directories: false,
81 dependencies: metrics_nanopb_pre,
82)
William A. Kennington III7f493702024-02-08 01:09:11 -080083
84metrics_nanopb_dep = declare_dependency(
Patrick Williams24c61c72025-02-01 08:38:07 -050085 dependencies: metrics_nanopb_pre,
86 link_with: metrics_nanopb_lib,
87)
William A. Kennington III7f493702024-02-08 01:09:11 -080088
89pre = declare_dependency(
Patrick Williams24c61c72025-02-01 08:38:07 -050090 include_directories: include_directories('.'),
91 dependencies: [
92 metrics_nanopb_dep,
93 dependency('phosphor-logging'),
94 dependency('phosphor-ipmi-blobs'),
95 dependency('sdbusplus'),
96 ],
97)
William A. Kennington IIIb056df62021-03-23 21:19:18 -070098
William A. Kennington III3f43b7e2021-02-16 16:54:40 -080099lib = static_library(
Patrick Williams24c61c72025-02-01 08:38:07 -0500100 'metricsblob',
101 'util.cpp',
102 'handler.cpp',
103 'metric.cpp',
104 implicit_include_directories: false,
105 dependencies: pre,
106)
Sui Chen03eba282021-02-11 11:35:56 -0800107
Patrick Williams24c61c72025-02-01 08:38:07 -0500108dep = declare_dependency(dependencies: pre, link_with: lib)
William A. Kennington III3f43b7e2021-02-16 16:54:40 -0800109
110shared_module(
Patrick Williams24c61c72025-02-01 08:38:07 -0500111 'metricsblob',
112 'main.cpp',
113 dependencies: dep,
114 implicit_include_directories: false,
115 install: true,
116 install_dir: get_option('libdir') / 'blob-ipmid',
117)
William A. Kennington III3f43b7e2021-02-16 16:54:40 -0800118
Patrick Williamsa2d0c9e2025-01-30 17:48:13 -0500119if get_option('tests').allowed()
Patrick Williams24c61c72025-02-01 08:38:07 -0500120 subdir('test')
William A. Kennington III3f43b7e2021-02-16 16:54:40 -0800121endif