pci_handler: Add pci_handler

Taken most of the logic from phoshpor-ipmi-flash:
https://github.com/openbmc/phosphor-ipmi-flash/blob/master/tools/io.cpp

Tested: Unit Test + Tested this on a real machine

Signed-off-by: Brandon Kim <brandonkim@google.com>
Change-Id: I546d1dff8764e31c9f2fa6c7465ba23a24f6fdea
diff --git a/src/meson.build b/src/meson.build
index 1a4f80a..c7f76bd 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,10 +1,35 @@
+fmt_dep = dependency('fmt', required: false)
+if not fmt_dep.found()
+  fmt_opts = import('cmake').subproject_options()
+  fmt_opts.add_cmake_defines({
+    'CMAKE_POSITION_INDEPENDENT_CODE': 'ON',
+    'MASTER_PROJECT': 'OFF',
+  })
+  fmt_proj = import('cmake').subproject(
+    'fmt',
+    options: fmt_opts,
+    required: false)
+  assert(fmt_proj.found(), 'fmtlib is required')
+  fmt_dep = fmt_proj.dependency('fmt')
+endif
+
 bios_bmc_smm_error_logger_pre = declare_dependency(
+  include_directories: [root_inc, bios_bmc_smm_error_logger_inc],
   dependencies: [
+    fmt_dep,
     dependency('threads'),
+    dependency('stdplus'),
   ])
 
+bios_bmc_smm_error_logger_lib = static_library(
+  'bios_bmc_smm_error_logger',
+  'pci_handler.cpp',
+  implicit_include_directories: false,
+  dependencies: bios_bmc_smm_error_logger_pre)
+
 bios_bmc_smm_error_logger_dep = declare_dependency(
-  dependencies: bios_bmc_smm_error_logger_pre,)
+  link_with: bios_bmc_smm_error_logger_lib,
+  dependencies: bios_bmc_smm_error_logger_pre)
 
 executable(
   'bios-bmc-smm-error-logger',