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