blob: 8f13e4a363c77ab74af1e7f2047f9b2b7a320d96 [file] [log] [blame]
# See README.md for details.
project(
'openpower-hw-diags',
'cpp',
version: '0.1',
meson_version: '>=1.1.1',
default_options: ['warning_level=3', 'werror=true', 'cpp_std=c++23'],
)
# Package directory root, which will contain required data files.
package_dir = join_paths(
get_option('prefix'),
get_option('datadir'),
meson.project_name(),
)
# Compiler option so that source knows the package directory.
package_args = ['-DPACKAGE_DIR="' + package_dir + '/"']
#-------------------------------------------------------------------------------
# Versioning
#-------------------------------------------------------------------------------
buildinfo = vcs_tag(
command: ['git', 'describe', '--always', '--long'],
input: 'buildinfo.hpp.in',
output: 'buildinfo.hpp',
replace_string: '@BUILDINFO@',
fallback: '0',
)
#-------------------------------------------------------------------------------
# Compiler
#-------------------------------------------------------------------------------
cmplr = meson.get_compiler('cpp')
#-------------------------------------------------------------------------------
# Config file
#-------------------------------------------------------------------------------
conf = configuration_data()
# OpenPOWER dump object path override
conf.set_quoted('OP_DUMP_OBJ_PATH', get_option('op_dump_obj_path'))
conf.set('CONFIG_PHAL_API', get_option('phal').allowed())
if (get_option('transport-implementation')) == 'mctp-demux'
add_project_arguments('-DPLDM_TRANSPORT_WITH_MCTP_DEMUX', language: 'cpp')
else
add_project_arguments('-DPLDM_TRANSPORT_WITH_AF_MCTP', language: 'cpp')
endif
if cmplr.has_header('poll.h')
add_project_arguments('-DPLDM_HAS_POLL=1', language: 'cpp')
endif
configure_file(input: 'config.h.in', output: 'config.h', configuration: conf)
#-------------------------------------------------------------------------------
# Include directories
#-------------------------------------------------------------------------------
# Only using the base directory. All header includes should provide the full
# path from the base directory.
incdir = include_directories('.')
#-------------------------------------------------------------------------------
# External library dependencies
#-------------------------------------------------------------------------------
# Look if the libhei library has already been built and installed. If not,
# default to the subproject.
libhei_dep = dependency('hei', fallback: ['libhei', 'libhei_dep'])
phosphor_logging_dep = dependency(
'phosphor-logging',
fallback: ['phosphor-logging', 'phosphor_logging_dep'],
)
sdbusplus_dep = dependency('sdbusplus', version: '>=1.0')
dbus_interfaces_dep = dependency('phosphor-dbus-interfaces')
libpdbg_dep = dependency('pdbg')
if get_option('phal').allowed()
libphal_dep = cmplr.find_library('phal')
endif
libpldm_dep = dependency('libpldm')
pthread = declare_dependency(link_args: '-pthread')
lrt = declare_dependency(link_args: '-lrt')
# JSON parser
nlohmann_json_dep = dependency('nlohmann_json', include_type: 'system')
# JSON validator
if cmplr.has_header('valijson/validator.hpp')
valijson_dep = declare_dependency()
else
valijson_dep = dependency('valijson', include_type: 'system')
endif
#-------------------------------------------------------------------------------
# Build the local static libraries
#-------------------------------------------------------------------------------
subdir('analyzer')
subdir('attn')
subdir('util')
hwdiags_libs = [analyzer_lib, attn_lib, util_lib]
#-------------------------------------------------------------------------------
# Build the executable
#-------------------------------------------------------------------------------
no_listener_mode = get_option('nlmode')
if no_listener_mode.allowed()
executable(
'openpower-hw-diags',
sources: ['main_nl.cpp', 'cli.cpp', buildinfo, plugins_src],
dependencies: [libhei_dep, nlohmann_json_dep, phosphor_logging_dep],
link_with: hwdiags_libs,
install: true,
)
else
executable(
'openpower-hw-diags',
sources: ['main.cpp', 'cli.cpp', 'listener.cpp', buildinfo, plugins_src],
dependencies: [
lrt,
pthread,
libhei_dep,
nlohmann_json_dep,
phosphor_logging_dep,
],
link_with: hwdiags_libs,
install: true,
)
endif
#-------------------------------------------------------------------------------
# Test, if configured
#-------------------------------------------------------------------------------
build_tests = get_option('tests')
if build_tests.allowed()
# IMPORTANT NOTE:
# We cannot link the test executables to `util_lib` because:
# - It is built without `-DTEST_TRACE` and any of the util functions that
# use `trace.hpp` will throw a linker error because we don't have access
# to phosphor-logging in test ... yet. This issue will go away once we
# have converted all of our trace to use the `lg2` interfaces.
# - Some functions related to pdbg and dbus simply cannot be built in the
# test environment. Instead, there are alternate implementation of those
# functions to simulate them for testing (see `test/*-sim-only.cpp`).
# Instead we will build a `test_util_lib` that will contain the `util` files
# that we need in test along with simulated versions of some util functions.
# IMPORTANT NOTE:
# When running GCOV reports, the Jenkins CI script explicitly ignores any
# libraries and executables built in the `test/` directory. Therefore, this
# `test_util_lib` library must be built here instead in order to get any GCOV
# credit for the code.
test_args = ['-DTEST_TRACE', package_args]
test_util_srcs = [
files(
'test/dbus-sim-only.cpp',
'test/pdbg-sim-only.cpp',
'util/data_file.cpp',
'util/ffdc_file.cpp',
'util/pdbg.cpp',
'util/temporary_file.cpp',
),
]
test_util_deps = [
libhei_dep,
libpdbg_dep,
nlohmann_json_dep,
phosphor_logging_dep,
valijson_dep,
]
test_util_lib = static_library(
'test_util_lib',
sources: test_util_srcs,
include_directories: incdir,
dependencies: test_util_deps,
cpp_args: test_args,
install: true,
)
test_libs = [analyzer_lib, attn_lib, test_util_lib]
subdir('test')
endif