Move repository to meson
The time has come to move this over to meson as automake is not building
properly with the latest c++ and the OpenBMC project has made it a
requirement that all repos move to meson.
Tested:
- Confirmed p10bmc now builds with appropriate recipe updates on top
of latest sdbusplus bump
Change-Id: I303731f1b5b7c617ecb1140b22bac6dbd27acbc0
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
diff --git a/.gitignore b/.gitignore
index 6ef6990..6ebea1a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,52 +1,4 @@
-# Template from:
-# https://github.com/github/gitignore/blob/master/Autotools.gitignore
-
-# http://www.gnu.org/software/automake
-
-Makefile.in
-/ar-lib
-/mdate-sh
-/py-compile
-/test-driver
-/ylwrap
-
-# http://www.gnu.org/software/autoconf
-
-/autom4te.cache
-/autoscan.log
-/autoscan-*.log
-/aclocal.m4
-/compile
-/config.guess
-/config.h.in
-/config.sub
-/configure
-/configure.scan
-/depcomp
-/install-sh
-/missing
-/stamp-h1
-
-# https://www.gnu.org/software/libtool/
-/libtool
-/ltmain.sh
-
-# http://www.gnu.org/software/texinfo
-
-/texinfo.tex
-
-# Repo Specific Items
-/*.o
-/config.h
-/config.h.in~
-/config.log
-/config.status
-Makefile
-.deps
-*-libtool
-.project
-.libs*
-*.lo
-*.la
-org/open_power/OCC/Metrics/*
-/inventory-sensor.cpp
+build*/
+subprojects/*
+!subprojects/*.wrap
+.vscode/
\ No newline at end of file
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100644
index 00ea59f..0000000
--- a/Makefile.am
+++ /dev/null
@@ -1,38 +0,0 @@
-liboemhandlerdir = ${libdir}/ipmid-providers
-liboemhandler_LTLIBRARIES = liboemhandler.la
-
-liboemhandler_la_SOURCES = oemhandler.cpp \
- host-interface.cpp \
- org/open_power/OCC/Metrics/error.cpp \
- inventory-sensor.cpp
-
-BUILT_SOURCES = org/open_power/OCC/Metrics/error.hpp \
- org/open_power/OCC/Metrics/error.cpp \
- inventory-sensor.cpp
-
-CLEANFILES = $(BUILT_SOURCES)
-
-liboemhandler_la_LDFLAGS = $(SYSTEMD_LIBS)\
- $(SDBUSPLUS_LIBS) \
- $(LIBIPMID_LIBS) \
- $(LIBIPMID_HOST_LIBS) \
- $(PHOSPHOR_LOGGING_LIBS) \
- -version-info 0:0:0 -shared
-
-liboemhandler_la_CXXFLAGS = $(SYSTEMD_CFLAGS) \
- $(SDBUSPLUS_CFLAGS) \
- $(LIBIPMID_CFLAGS) \
- $(LIBIPMID_HOST_CFLAGS) \
- $(PHOSPHOR_LOGGING_CFLAGS) \
- $(AM_CXXFLAGS)
-
-org/open_power/OCC/Metrics/error.hpp: ${top_srcdir}/org/open_power/OCC/Metrics.errors.yaml
- @mkdir -p `dirname $@`
- $(SDBUSPLUSPLUS) -r $(top_srcdir) error exception-header org.open_power.OCC.Metrics > $@
-
-org/open_power/OCC/Metrics/error.cpp: ${top_srcdir}/org/open_power/OCC/Metrics.errors.yaml
- @mkdir -p `dirname $@`
- $(SDBUSPLUSPLUS) -r $(top_srcdir) error exception-cpp org.open_power.OCC.Metrics > $@
-
-inventory-sensor.cpp:
- $(AM_V_GEN)@INVSENSORGEN@ -o $(top_builddir) generate-cpp
diff --git a/README.md b/README.md
index 31aed45..5e3fb66 100644
--- a/README.md
+++ b/README.md
@@ -7,11 +7,10 @@
```
To build this package, do the following steps:
- 1. ./bootstrap.sh
- 2. ./configure ${CONFIGURE_FLAGS}
- 3. make
+ meson setup build
+ ninja -C build
-To clean the repository run `./bootstrap.sh clean`.
+To clean the repository again run rm -rf build.
```
## Supported Commands
diff --git a/configure.ac b/configure.ac
deleted file mode 100644
index 33d383a..0000000
--- a/configure.ac
+++ /dev/null
@@ -1,84 +0,0 @@
-# Initialization
-AC_PREREQ([2.69])
-AC_INIT([openpower-host-ipmi-oem], [1.0], [https://github.com/openbmc/openpower-host-ipmi-oem/issues])
-AC_CONFIG_HEADERS([config.h])
-AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign dist-xz])
-AM_SILENT_RULES([yes])
-AC_LANG([C++])
-
-# Checks for programs.
-AC_PROG_CXX
-AM_PROG_AR
-AC_PROG_INSTALL
-AC_PROG_MAKE_SET
-
-# Checks for libraries.
-PKG_CHECK_MODULES([SYSTEMD], [libsystemd >= 221])
-
-# Checks for header files.
-AC_CHECK_HEADER(systemd/sd-bus.h, ,[AC_MSG_ERROR([Could not find systemd/sd-bus.h...systemd development package required])])
-PKG_CHECK_MODULES([LIBIPMID], [libipmid])
-PKG_CHECK_MODULES([SDBUSPLUS], [sdbusplus])
-PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging])
-
-# Check for sdbus++ tool
-AC_PATH_PROG([SDBUSPLUSPLUS], [sdbus++])
-AS_IF([test "x$SDBUSPLUSPLUS" == "x"], AC_MSG_ERROR([Cannot find sdbus++]))
-
-# Checks for typedefs, structures, and compiler characteristics.
-AX_CXX_COMPILE_STDCXX([20],[noext])
-AX_APPEND_COMPILE_FLAGS([-Wall -Werror], [CXXFLAGS])
-
-# Checks for library functions.
-LT_INIT([disable-static shared])
-
-# Check/set gtest specific functions.
-AX_PTHREAD([GTEST_CPPFLAGS="-DGTEST_HAS_PTHREAD=1"],[GTEST_CPPFLAGS="-GTEST_HAS_PTHREAD=0"])
-AC_SUBST(GTEST_CPPFLAGS)
-
-AC_ARG_ENABLE([oe-sdk],
- AS_HELP_STRING([--enable-oe-sdk], [Link testcases absolutely against OE SDK so they can be ran within it.])
-)
-AC_ARG_VAR(OECORE_TARGET_SYSROOT,
- [Path to the OE SDK SYSROOT])
-AS_IF([test "x$enable_oe_sdk" == "xyes"],
- AS_IF([test "x$OECORE_TARGET_SYSROOT" == "x"],
- AC_MSG_ERROR([OECORE_TARGET_SYSROOT must be set with --enable-oe-sdk])
- )
- AC_MSG_NOTICE([Enabling OE-SDK at $OECORE_TARGET_SYSROOT])
- [
- testcase_flags="-Wl,-rpath,\${OECORE_TARGET_SYSROOT}/lib"
- testcase_flags="${testcase_flags} -Wl,-rpath,\${OECORE_TARGET_SYSROOT}/usr/lib"
- testcase_flags="${testcase_flags} -Wl,-dynamic-linker,`find \${OECORE_TARGET_SYSROOT}/lib/ld-*.so | sort -r -n | head -n1`"
- ]
- AC_SUBST([OESDK_TESTCASE_FLAGS], [$testcase_flags])
-)
-
-# Host object name in the D-Bus
-AC_ARG_VAR(HOST_NAME, [The Host name in the object path])
-AS_IF([test "x$HOST_NAME" == "x"],
- [HOST_NAME="host"])
-AC_DEFINE_UNQUOTED([HOST_NAME], ["$HOST_NAME"], [The Host name in the object path])
-
-# Service dbus object manager
-AC_ARG_VAR(CONTROL_HOST_OBJ_MGR, [The Control Host D-Bus Object Manager])
-AS_IF([test "x$CONTROL_HOST_OBJ_MGR" == "x"],
- [CONTROL_HOST_OBJ_MGR="/org/open_power/control"])
-AC_DEFINE_UNQUOTED([CONTROL_HOST_OBJ_MGR], ["$CONTROL_HOST_OBJ_MGR"], [The Control Host D-Bus Object Manager])
-
-AS_IF([test "x$INVSENSOR_YAML_GEN" == "x"], [INVSENSOR_YAML_GEN="inventory-sensor-example.yaml"])
-INVSENSORGEN="$PYTHON ${srcdir}/scripts/inventory-sensor.py -i $INVSENSOR_YAML_GEN"
-AC_SUBST(INVSENSORGEN)
-
-AC_DEFINE(MAPPER_BUS_NAME, "xyz.openbmc_project.ObjectMapper",
- [The object mapper bus name])
-
-AC_DEFINE(MAPPER_OBJ, "/xyz/openbmc_project/object_mapper",
- [The object mapper object path])
-
-AC_DEFINE(MAPPER_IFACE, "xyz.openbmc_project.ObjectMapper",
- [The object mapper interface])
-
-# Create configured output.
-AC_CONFIG_FILES([Makefile])
-AC_OUTPUT
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..1611a06
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,57 @@
+project(
+ 'openpower-host-ipmi-oem',
+ 'cpp',
+ default_options: [
+ 'warning_level=3',
+ 'werror=true',
+ 'cpp_std=c++23',
+ 'buildtype=debugoptimized',
+ ],
+ meson_version: '>=1.1.1',
+ license: 'Apache-2.0',
+ version: '0.1',
+)
+
+conf = configuration_data()
+conf.set_quoted('HOST_NAME', get_option('host-name'))
+
+configure_file(output: 'config.h', configuration: conf)
+
+sdbusplus = dependency('sdbusplus')
+phosphorlogging = dependency('phosphor-logging')
+phosphordbusinterfaces = dependency('phosphor-dbus-interfaces')
+ipmid = dependency('libipmid')
+
+root = meson.current_source_dir()
+
+# Generate sdbus++ code (occmetrics)
+subdir('org/open_power/OCC/Metrics')
+
+# Generate inventory sensor files
+inventory_gen_src = []
+subdir('scripts')
+
+lilboemhandler_sources = [
+ 'host-interface.cpp',
+ 'oemhandler.cpp',
+ md_cpp,
+ inventory_gen_src,
+]
+
+lilboemhandler = library(
+ 'oemhandler',
+ lilboemhandler_sources,
+ gnu_symbol_visibility: 'hidden',
+ install: true,
+ install_dir: get_option('libdir') / 'ipmid-providers',
+ version: meson.project_version(),
+ override_options: ['b_lundef=false'],
+ dependencies: [
+ sdbusplus,
+ phosphorlogging,
+ phosphordbusinterfaces,
+ ipmid,
+ occmetrics_dbus,
+ ],
+)
+
diff --git a/meson.options b/meson.options
new file mode 100644
index 0000000..0284ed1
--- /dev/null
+++ b/meson.options
@@ -0,0 +1,15 @@
+option('tests', type: 'feature', description: 'Build tests')
+
+option(
+ 'host-name',
+ type: 'string',
+ value: 'host',
+ description: 'The Host name in the object path.',
+)
+
+# Generate configuration from Yaml
+option(
+ 'invsensor-yaml-gen',
+ type: 'string',
+ value: 'inventory-sensor-example.yaml',
+)
diff --git a/oemhandler.cpp b/oemhandler.cpp
index 80ea42e..9623b97 100644
--- a/oemhandler.cpp
+++ b/oemhandler.cpp
@@ -83,8 +83,10 @@
std::string getService(sdbusplus::bus_t& bus, const std::string& path,
const std::string& interface)
{
- auto method = bus.new_method_call(MAPPER_BUS_NAME, MAPPER_OBJ, MAPPER_IFACE,
- "GetObject");
+ auto method =
+ bus.new_method_call("xyz.openbmc_project.ObjectMapper",
+ "/xyz/openbmc_project/object_mapper",
+ "xyz.openbmc_project.ObjectMapper", "GetObject");
method.append(path);
method.append(std::vector<std::string>({interface}));
@@ -228,8 +230,10 @@
// storage. Likely via the ipmi add_sel command.
///////////////////////////////////////////////////////////////////////////////
ipmi_ret_t ipmi_ibm_oem_partial_esel(
- ipmi_netfn_t netfn, ipmi_cmd_t cmd, ipmi_request_t request,
- ipmi_response_t response, ipmi_data_len_t data_len, ipmi_context_t context)
+ [[maybe_unused]] ipmi_netfn_t netfn, [[maybe_unused]] ipmi_cmd_t cmd,
+ [[maybe_unused]] ipmi_request_t request,
+ [[maybe_unused]] ipmi_response_t response, ipmi_data_len_t data_len,
+ [[maybe_unused]] ipmi_context_t context)
{
uint8_t* reqptr = (uint8_t*)request;
esel_request_t esel_req;
@@ -318,8 +322,10 @@
// Prepare for FW Update.
// Execute needed commands to prepare the system for a fw update from the host.
ipmi_ret_t ipmi_ibm_oem_prep_fw_update(
- ipmi_netfn_t netfn, ipmi_cmd_t cmd, ipmi_request_t request,
- ipmi_response_t response, ipmi_data_len_t data_len, ipmi_context_t context)
+ [[maybe_unused]] ipmi_netfn_t netfn, [[maybe_unused]] ipmi_cmd_t cmd,
+ [[maybe_unused]] ipmi_request_t request,
+ [[maybe_unused]] ipmi_response_t response, ipmi_data_len_t data_len,
+ [[maybe_unused]] ipmi_context_t context)
{
ipmi_ret_t ipmi_rc = IPMI_CC_OK;
*data_len = 0;
@@ -357,8 +363,11 @@
}
ipmi_ret_t ipmi_ibm_oem_bmc_factory_reset(
- ipmi_netfn_t netfn, ipmi_cmd_t cmd, ipmi_request_t request,
- ipmi_response_t response, ipmi_data_len_t data_len, ipmi_context_t context)
+ [[maybe_unused]] ipmi_netfn_t netfn, [[maybe_unused]] ipmi_cmd_t cmd,
+ [[maybe_unused]] ipmi_request_t request,
+ [[maybe_unused]] ipmi_response_t response,
+ [[maybe_unused]] ipmi_data_len_t data_len,
+ [[maybe_unused]] ipmi_context_t context)
{
sdbusplus::bus_t bus{ipmid_get_sd_bus_connection()};
@@ -449,12 +458,13 @@
ipmi_ibm_oem_bmc_factory_reset, SYSTEM_INTERFACE);
// Create new object on the bus
- auto objPath = std::string{CONTROL_HOST_OBJ_MGR} + '/' + HOST_NAME + '0';
+ auto objPath = std::string{"/org/open_power/control"} + '/' + HOST_NAME +
+ '0';
// Add sdbusplus ObjectManager.
auto& sdbusPlusHandler = ipmid_get_sdbus_plus_handler();
objManager = std::make_unique<sdbusplus::server::manager_t>(
- *sdbusPlusHandler, CONTROL_HOST_OBJ_MGR);
+ *sdbusPlusHandler, "/org/open_power/control");
opHost = std::make_unique<open_power::host::command::Host>(
*sdbusPlusHandler, objPath.c_str());
diff --git a/org/open_power/OCC/Metrics/meson.build b/org/open_power/OCC/Metrics/meson.build
new file mode 100644
index 0000000..40504c1
--- /dev/null
+++ b/org/open_power/OCC/Metrics/meson.build
@@ -0,0 +1,34 @@
+sdbuspp_prog = find_program('sdbus++')
+
+domain = 'org.open_power.OCC.Metrics'
+md_yaml_file = files('../Metrics.metadata.yaml')
+
+md_cpp = custom_target(
+ 'error.cpp',
+ output: 'error.cpp',
+ input: md_yaml_file,
+ capture: true,
+ command: [sdbuspp_prog, '-r', root, 'error', 'exception-cpp', domain],
+ install: true,
+ install_dir: get_option('includedir') / 'org/open_power/OCC/Metrics',
+)
+
+md_hpp = custom_target(
+ 'error.hpp',
+ output: 'error.hpp',
+ input: md_yaml_file,
+ capture: true,
+ command: [sdbuspp_prog, '-r', root, 'error', 'exception-header', domain],
+ install: true,
+ install_dir: get_option('includedir') / 'org/open_power/OCC/Metrics',
+)
+
+occmetrics_dbus_deps = [
+ dependency('phosphor-dbus-interfaces'),
+ dependency('sdbusplus'),
+]
+
+occmetrics_dbus = declare_dependency(
+ dependencies: occmetrics_dbus_deps,
+ sources: [md_cpp, md_hpp],
+)
diff --git a/scripts/inventory-sensor.py b/scripts/inventory-sensor.py
index f5a8d1d..680f5e7 100755
--- a/scripts/inventory-sensor.py
+++ b/scripts/inventory-sensor.py
@@ -9,7 +9,7 @@
def generate_cpp(sensor_yaml, output_dir):
- with open(os.path.join(script_dir, sensor_yaml), "r") as f:
+ with open(sensor_yaml, "r") as f:
ifile = yaml.safe_load(f)
if not isinstance(ifile, dict):
ifile = {}
@@ -57,7 +57,7 @@
args = parser.parse_args()
- if not (os.path.isfile(os.path.join(script_dir, args.sensor_yaml))):
+ if not (os.path.isfile(args.sensor_yaml)):
sys.exit("Can not find input yaml file " + args.sensor_yaml)
function = valid_commands[args.command]
diff --git a/scripts/meson.build b/scripts/meson.build
new file mode 100644
index 0000000..9b78af1
--- /dev/null
+++ b/scripts/meson.build
@@ -0,0 +1,18 @@
+# Generate Configuration Files from Yaml
+python_exe = find_program('python3', 'python')
+
+invsensor_gen = custom_target(
+ 'invsensor-gen',
+ output: 'inventory-sensor.cpp',
+ input: ['inventory-sensor.py', get_option('invsensor-yaml-gen')],
+ command: [
+ python_exe,
+ '@INPUT0@',
+ '-i',
+ '@INPUT1@',
+ '-o',
+ meson.current_build_dir(),
+ 'generate-cpp',
+ ],
+)
+inventory_gen_src = invsensor_gen
diff --git a/subprojects/phosphor-dbus-interfaces.wrap b/subprojects/phosphor-dbus-interfaces.wrap
new file mode 100644
index 0000000..346aa0c
--- /dev/null
+++ b/subprojects/phosphor-dbus-interfaces.wrap
@@ -0,0 +1,6 @@
+[wrap-git]
+url = https://github.com/openbmc/phosphor-dbus-interfaces.git
+revision = HEAD
+
+[provide]
+phosphor-dbus-interfaces = phosphor_dbus_interfaces_dep
diff --git a/subprojects/phosphor-logging.wrap b/subprojects/phosphor-logging.wrap
new file mode 100644
index 0000000..71eee8b
--- /dev/null
+++ b/subprojects/phosphor-logging.wrap
@@ -0,0 +1,6 @@
+[wrap-git]
+url = https://github.com/openbmc/phosphor-logging.git
+revision = HEAD
+
+[provide]
+phosphor-logging = phosphor_logging_dep
diff --git a/subprojects/sdbusplus.wrap b/subprojects/sdbusplus.wrap
new file mode 100644
index 0000000..7b076d0
--- /dev/null
+++ b/subprojects/sdbusplus.wrap
@@ -0,0 +1,6 @@
+[wrap-git]
+url = https://github.com/openbmc/sdbusplus.git
+revision = HEAD
+
+[provide]
+sdbusplus = sdbusplus_dep