meson: static lib for utils and settings

`settings.cpp` and `utils.cpp` were compiled multiple times for various
binaries. Create static libraries to compile them once.

Tested: Code compiles.

Change-Id: I0827f44ff6274cf131fb91431af982a4a6eeee6a
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>
diff --git a/meson.build b/meson.build
index 77c44b8..a8e94be 100644
--- a/meson.build
+++ b/meson.build
@@ -126,13 +126,23 @@
     cereal = cereal_proj.dependency('cereal')
 endif
 
+settings_lib = static_library(
+    'settings',
+    'settings.cpp',
+    dependencies: [sdbusplus, phosphorlogging, phosphordbusinterfaces],
+)
+
+utils_lib = static_library(
+    'utils',
+    'utils.cpp',
+    dependencies: [sdbusplus, phosphorlogging, phosphordbusinterfaces, libgpiod],
+)
+
 executable(
     'phosphor-host-state-manager',
     'host_state_manager.cpp',
     'host_state_manager_main.cpp',
-    'settings.cpp',
     'host_check.cpp',
-    'utils.cpp',
     dependencies: [
         cereal,
         libgpiod,
@@ -141,6 +151,7 @@
         sdbusplus,
         sdeventplus,
     ],
+    link_with: [settings_lib, utils_lib],
     implicit_include_directories: true,
     install: true,
 )
@@ -149,13 +160,13 @@
     'phosphor-hypervisor-state-manager',
     'hypervisor_state_manager.cpp',
     'hypervisor_state_manager_main.cpp',
-    'settings.cpp',
     dependencies: [
         phosphordbusinterfaces,
         phosphorlogging,
         sdbusplus,
         sdeventplus,
     ],
+    link_with: [settings_lib],
     implicit_include_directories: true,
     install: true,
 )
@@ -164,7 +175,6 @@
     'phosphor-chassis-state-manager',
     'chassis_state_manager.cpp',
     'chassis_state_manager_main.cpp',
-    'utils.cpp',
     dependencies: [
         cereal,
         libgpiod,
@@ -174,6 +184,7 @@
         sdbusplus,
         sdeventplus,
     ],
+    link_with: [utils_lib],
     implicit_include_directories: true,
     install: true,
 )
@@ -181,8 +192,8 @@
 executable(
     'phosphor-chassis-check-power-status',
     'chassis_check_power_status.cpp',
-    'utils.cpp',
     dependencies: [libgpiod, phosphordbusinterfaces, phosphorlogging, sdbusplus],
+    link_with: [utils_lib],
     implicit_include_directories: true,
     install: true,
 )
@@ -191,7 +202,6 @@
     'phosphor-bmc-state-manager',
     'bmc_state_manager.cpp',
     'bmc_state_manager_main.cpp',
-    'utils.cpp',
     dependencies: [
         libgpiod,
         phosphordbusinterfaces,
@@ -199,6 +209,7 @@
         sdbusplus,
         sdeventplus,
     ],
+    link_with: [utils_lib],
     implicit_include_directories: true,
     install: true,
 )
@@ -206,9 +217,8 @@
 executable(
     'phosphor-discover-system-state',
     'discover_system_state.cpp',
-    'settings.cpp',
-    'utils.cpp',
     dependencies: [cereal, libgpiod, phosphorlogging, sdbusplus],
+    link_with: [settings_lib, utils_lib],
     implicit_include_directories: true,
     install: true,
 )
@@ -219,7 +229,6 @@
     'systemd_target_monitor.cpp',
     'systemd_target_parser.cpp',
     'systemd_target_signal.cpp',
-    'utils.cpp',
     dependencies: [
         CLI11,
         libgpiod,
@@ -228,6 +237,7 @@
         sdbusplus,
         sdeventplus,
     ],
+    link_with: [utils_lib],
     implicit_include_directories: true,
     install: true,
 )
@@ -236,8 +246,8 @@
     'phosphor-scheduled-host-transition',
     'scheduled_host_transition_main.cpp',
     'scheduled_host_transition.cpp',
-    'utils.cpp',
     dependencies: [cereal, libgpiod, phosphorlogging, sdbusplus, sdeventplus],
+    link_with: [utils_lib],
     implicit_include_directories: true,
     install: true,
 )
@@ -253,8 +263,8 @@
 executable(
     'phosphor-secure-boot-check',
     'secure_boot_check.cpp',
-    'utils.cpp',
     dependencies: [sdbusplus, phosphorlogging, libgpiod],
+    link_with: [utils_lib],
     implicit_include_directories: true,
     install: true,
 )
diff --git a/test/meson.build b/test/meson.build
index ef56b48..51496ac 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -17,7 +17,6 @@
         'test_systemd_signal',
         'systemd_signal.cpp',
         '../systemd_target_signal.cpp',
-        '../utils.cpp',
         dependencies: [
             gtest,
             libgpiod,
@@ -26,6 +25,7 @@
             sdbusplus,
             sdeventplus,
         ],
+        link_with: [utils_lib],
         implicit_include_directories: true,
         include_directories: '../',
     ),
@@ -37,7 +37,6 @@
         'test_scheduled_host_transition',
         'test_scheduled_host_transition.cpp',
         '../scheduled_host_transition.cpp',
-        '../utils.cpp',
         dependencies: [
             cereal,
             gmock,
@@ -47,6 +46,7 @@
             sdbusplus,
             sdeventplus,
         ],
+        link_with: [utils_lib],
         implicit_include_directories: true,
         include_directories: '../',
     ),