build: Enabled meson build infrastructure
In this commit enabled meson build infrastructure which is taking less
time than autotools to build.
Changes:
- Same default value used for all build time configure option.
- All external library checks are added into meson as well.
- In meson, no need to mention list of files which are not required
to install because, by default nothing will be installed.
- Auto generated files are added into custom target and that will
trigger when some target dependent with that.
- In meson, enabled to treat warning as error so, modified few sources
which are producing un-used variables.
- Fixes made by removing those function parameters identifier alone.
By using meson, can able to see below built improvement time between meson
and autotools.
meson:
- time sh -c 'meson builddir -Dhost-dump-offload-transport=pldm
-Dubifs-workaround=enabled; ninja -C builddir/'
real 0m12.244s
user 0m57.575s
sys 0m7.793s
autotools:
- time sh -c 'autoreconf -i;
./configure ${CONFIGURE_FLAGS} --enable-ubifs-workaround
--with-host-dump-offload-transport=pldm; make'
real 1m16.539s
user 1m2.738s
sys 0m9.645s
TestedBy:
- meson builddir
ninja -C builddir
- meson builddir -Dubifs-workaround=enabled
ninja -C builddir
- meson builddir -Dubifs-workaround=disabled
ninja -C builddir
- meson builddir -Dhost-dump-offload-transport=pldm
ninja -C builddir
- meson builddir -Dhost-dump-offload-transport=pldm \
-Dubifs-workaround=enabled
ninja -C builddir
Note: Need to update openbmc phosphor-debug-collector recipe to use meson
instead autotools, this will be updated once this patch got merged
and also autotools build infrastructure will be removed as well.
Change-Id: Iadf2d3542dc2556377e7b2f91f01b04d5f8d7218
Signed-off-by: Ramesh Iyyar <rameshi1@in.ibm.com>
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..8bbed76
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,155 @@
+# SPDX-License-Identifier: Apache-2.0
+
+project('phosphor-debug-collector',
+ 'cpp',
+ default_options: [
+ 'cpp_std=c++17',
+ 'warning_level=3',
+ 'werror=true'
+ ],
+ version: '1.0',
+ license: 'Apache-2.0'
+ )
+
+# Checking dependency external library
+
+cppfs = meson.get_compiler('cpp').find_library('stdc++fs')
+libsystemd = dependency('libsystemd', version : '>=221')
+phosphor_dbus_interfaces = dependency('phosphor-dbus-interfaces')
+sdbusplus = dependency('sdbusplus')
+phosphor_logging = dependency('phosphor-logging')
+
+# Configuration header file(config.h) generation
+
+conf_data = configuration_data()
+
+conf_data.set_quoted('DUMP_BUSNAME', get_option('DUMP_BUSNAME'),
+ description : 'The Dbus busname to own'
+ )
+conf_data.set_quoted('DUMP_OBJPATH', get_option('DUMP_OBJPATH'),
+ description : 'The Dump manager Dbus root'
+ )
+conf_data.set_quoted('CORE_FILE_DIR', get_option('CORE_FILE_DIR'),
+ description : 'Directory where core dumps are placed'
+ )
+conf_data.set_quoted('OBJ_INTERNAL', get_option('OBJ_INTERNAL'),
+ description : 'Internal Dump manager Dbus object path'
+ )
+conf_data.set_quoted('OBJ_ENTRY', get_option('OBJ_ENTRY'),
+ description : 'The dump entry DBus object path'
+ )
+conf_data.set_quoted('BMC_DUMP_PATH', get_option('BMC_DUMP_PATH'),
+ description : 'Directory where bmc dumps are placed')
+conf_data.set('BMC_DUMP_MAX_SIZE', get_option('BMC_DUMP_MAX_SIZE'),
+ description : 'Maximum size of one bmc dump in kilo bytes'
+ )
+conf_data.set('BMC_DUMP_MIN_SPACE_REQD', get_option('BMC_DUMP_MIN_SPACE_REQD'),
+ description : 'Minimum space required for one bmc dump in kilo bytes'
+ )
+conf_data.set('BMC_DUMP_TOTAL_SIZE', get_option('BMC_DUMP_TOTAL_SIZE'),
+ description : 'Total size of the dump in kilo bytes'
+ )
+conf_data.set_quoted('OBJ_LOGGING', '/xyz/openbmc_project/logging',
+ description : 'The log manager DBus object path'
+ )
+conf_data.set_quoted('ELOG_ID_PERSIST_PATH', get_option('ELOG_ID_PERSIST_PATH'),
+ description : 'Path of file for storing elog id\'s, which have associated dumps'
+ )
+conf_data.set('CLASS_VERSION', get_option('CLASS_VERSION'),
+ description : 'Class version to register with Cereal'
+ )
+conf_data.set('ERROR_MAP_YAML', get_option('ERROR_MAP_YAML'),
+ description : 'YAML filepath containing error object paths'
+ )
+conf_data.set('UBI_CORE_FILE_WORKAROUND', get_option('ubifs-workaround').enabled(),
+ description : 'Turn on ubi workaround for core file'
+ )
+
+configure_file(configuration : conf_data,
+ output : 'config.h'
+ )
+
+subdir('xyz/openbmc_project/Dump/Internal/Create')
+
+python = find_program('python3')
+errors_map_gen_file_loc = meson.source_root()
+errors_map_gen_file_loc += '/errors_map_gen.py'
+
+errors_map_hpp = custom_target(
+ 'errors_map.hpp',
+ command : [
+ python,
+ errors_map_gen_file_loc,
+ '-i',
+ get_option('ERROR_MAP_YAML')
+ ],
+ depend_files : [ 'errors_map.mako.hpp',
+ 'errors_map_gen.py',
+ get_option('ERROR_MAP_YAML')
+ ],
+ output : 'errors_map.hpp'
+ )
+
+phosphor_dump_manager_sources = [
+ 'dump_entry.cpp',
+ 'dump_manager.cpp',
+ 'dump_manager_main.cpp',
+ 'dump_serialize.cpp',
+ 'elog_watch.cpp',
+ errors_map_hpp,
+ server_hpp,
+ server_cpp,
+ 'watch.cpp',
+ 'bmc_dump_entry.cpp',
+ 'dump_utils.cpp',
+ 'system_dump_entry.cpp',
+ 'dump_offload.cpp'
+ ]
+
+phosphor_dump_manager_dependency = [
+ phosphor_dbus_interfaces,
+ sdbusplus,
+ phosphor_logging,
+ cppfs
+ ]
+
+phosphor_dump_manager_install = true
+
+# To get host dump offload transport source files and dependency list
+# for phosphor_dump_manager
+subdir('offload-extensions')
+
+phosphor_dump_monitor_sources = [
+ 'core_manager.cpp',
+ 'core_manager_main.cpp',
+ 'watch.cpp'
+ ]
+
+phosphor_dump_monitor_dependency = [
+ phosphor_dbus_interfaces,
+ phosphor_logging,
+ cppfs
+ ]
+
+phosphor_dump_monitor_install = true
+
+executables = [[ 'phosphor-dump-manager',
+ phosphor_dump_manager_sources,
+ phosphor_dump_manager_dependency,
+ phosphor_dump_manager_install
+ ],
+ [ 'phosphor-dump-monitor',
+ phosphor_dump_monitor_sources,
+ phosphor_dump_monitor_dependency,
+ phosphor_dump_monitor_install
+ ]
+ ]
+
+foreach executable : executables
+ binary = executable(
+ executable[0],
+ executable[1],
+ dependencies: executable[2],
+ install : executable[3]
+ )
+endforeach