Added openpower util file support

Created common file to keep all the common util functions.

In this commit
 - added getService function to get d-bus service for given
   interface.
 - updated create_pel.cpp to start using common util interface.
 - Moved formatting library to common build dependency for
   both meson and automake.

Tested: Manually verified.

Signed-off-by: Jayanth Othayoth <ojayanth@in.ibm.com>
Change-Id: I39a642710c0476e81fae020eb3b4216ca8ce9ad5
diff --git a/util.cpp b/util.cpp
new file mode 100644
index 0000000..646529a
--- /dev/null
+++ b/util.cpp
@@ -0,0 +1,47 @@
+#include "util.hpp"
+
+#include <fmt/format.h>
+
+#include <phosphor-logging/elog.hpp>
+
+#include <vector>
+
+namespace openpower
+{
+namespace util
+{
+using namespace phosphor::logging;
+
+std::string getService(sdbusplus::bus::bus& bus, const std::string& objectPath,
+                       const std::string& interface)
+{
+    constexpr auto mapperBusBame = "xyz.openbmc_project.ObjectMapper";
+    constexpr auto mapperObjectPath = "/xyz/openbmc_project/object_mapper";
+    constexpr auto mapperInterface = "xyz.openbmc_project.ObjectMapper";
+    std::vector<std::pair<std::string, std::vector<std::string>>> response;
+    auto method = bus.new_method_call(mapperBusBame, mapperObjectPath,
+                                      mapperInterface, "GetObject");
+    method.append(objectPath, std::vector<std::string>({interface}));
+    try
+    {
+        auto reply = bus.call(method);
+        reply.read(response);
+    }
+    catch (const sdbusplus::exception::SdBusError& e)
+    {
+        log<level::ERR>(fmt::format("D-Bus call exception OBJPATH={}"
+                                    "INTERFACE={}  EXCEPTION={}",
+                                    mapperObjectPath, mapperInterface, e.what())
+                            .c_str());
+
+        throw std::runtime_error("Service name is not found");
+    }
+
+    if (response.empty())
+    {
+        throw std::runtime_error("Service name response is empty");
+    }
+    return response.begin()->first;
+}
+} // namespace util
+} // namespace openpower