diff --git a/CMakeLists.txt b/CMakeLists.txt
deleted file mode 100644
index 86d703f..0000000
--- a/CMakeLists.txt
+++ /dev/null
@@ -1,311 +0,0 @@
-cmake_minimum_required (VERSION 2.8.10 FATAL_ERROR)
-set (BUILD_SHARED_LIBRARIES OFF)
-include (ExternalProject)
-set (CMAKE_CXX_STANDARD 17)
-set (CMAKE_CXX_STANDARD_REQUIRED ON)
-set (
-    CMAKE_CXX_FLAGS
-    "${CMAKE_CXX_FLAGS} -lstdc++fs \
-    -Werror \
-    -Wall \
-    -Wextra \
-    -Wnon-virtual-dtor \
-    -Wold-style-cast \
-    -Wcast-align \
-    -Wunused \
-    -Woverloaded-virtual \
-    -Wpedantic \
-    -Wmisleading-indentation \
-    -Wduplicated-cond \
-    -Wduplicated-branches \
-    -Wlogical-op \
-    -Wnull-dereference \
-    -Wuseless-cast \
-    -Wdouble-promotion \
-    -Wformat=2 \
-    -Wno-sign-compare \
-    -Wno-reorder \
-"
-)
-# todo: get rid of nos, add the below:
-#  -Wshadow \
-#  -Wconversion \
-
-set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
-
-option (YOCTO "Enable Building in Yocto" OFF)
-option (HUNTER_ENABLED "Enable hunter package pulling" OFF)
-
-option (DISABLE_ADC "Disable installing ADC sensor" OFF)
-option (DISABLE_CPU "Disable installing CPU sensor" OFF)
-option (DISABLE_EXIT_AIR "Disable installing Exit Air Temp sensor" OFF)
-option (DISABLE_FAN "Disable installing fan sensor" OFF)
-option (DISABLE_HWMON_TEMP "Disable installing hwmon temp sensor" OFF)
-option (DISABLE_INTRUSION "Disable installing intrusion sensor" OFF)
-option (DISABLE_IPMB "Disable installing IPMB sensor" OFF)
-option (DISABLE_MCUTEMP "Disable installing MCU temperature sensor" OFF)
-option (DISABLE_PSU "Disable installing PSU sensor" OFF)
-option (DISABLE_EXTERNAL "Disable installing external sensor" OFF)
-option (DISABLE_NVME "Disable installing NVME sensor" ON)
-
-include ("cmake/HunterGate.cmake")
-
-huntergate (URL "https://github.com/ruslo/hunter/archive/v0.18.64.tar.gz" SHA1
-            "baf9c8cc4f65306f0e442b5419967b4c4c04589a")
-
-project (sensors CXX)
-
-set (ADC_SRC_FILES src/Utils.cpp src/ADCSensor.cpp src/Thresholds.cpp)
-
-set (CPU_SRC_FILES src/Utils.cpp src/CPUSensor.cpp src/Thresholds.cpp)
-
-set (EXIT_AIR_SRC_FILES src/Utils.cpp src/Thresholds.cpp)
-
-set (FAN_SRC_FILES src/TachSensor.cpp src/PwmSensor.cpp src/Utils.cpp
-     src/Thresholds.cpp)
-
-set (HWMON_TEMP_SRC_FILES src/Utils.cpp src/HwmonTempSensor.cpp
-     src/Thresholds.cpp)
-
-set (INTRUSION_SRC_FILES src/Utils.cpp src/ChassisIntrusionSensor.cpp)
-
-set (IPMB_SRC_FILES src/Utils.cpp src/Thresholds.cpp)
-
-set (MCUTEMP_SRC_FILES src/Utils.cpp src/Thresholds.cpp)
-
-set (PSU_SRC_FILES src/Utils.cpp src/PSUSensor.cpp src/Thresholds.cpp
-     src/PwmSensor.cpp src/PSUEvent.cpp)
-
-set (EXTERNAL_SRC_FILES src/Utils.cpp src/ExternalSensorMain.cpp
-     src/ExternalSensor.cpp src/Thresholds.cpp)
-
-set (NVME_SRC_FILES src/Utils.cpp src/NVMeSensorMain.cpp
-     src/NVMeSensor.cpp src/Thresholds.cpp)
-
-set (EXTERNAL_PACKAGES Boost sdbusplus-project nlohmann-json)
-set (SENSOR_LINK_LIBS -lsystemd stdc++fs sdbusplus)
-
-if (NOT YOCTO)
-    set (DISABLE_NVME ON) # todo allow this to build out of tree
-    option (ENABLE_TEST "Enable Google Test" OFF)
-
-    externalproject_add (
-        Boost URL
-        https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.gz
-        URL_MD5 d275cd85b00022313c171f602db59fc5 SOURCE_DIR
-        "${CMAKE_BINARY_DIR}/boost-src" BINARY_DIR
-        "${CMAKE_BINARY_DIR}/boost-build" CONFIGURE_COMMAND "" BUILD_COMMAND ""
-        INSTALL_COMMAND ""
-    )
-    include_directories (SYSTEM ${CMAKE_BINARY_DIR}/boost-src)
-    set (CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/boost-src ${CMAKE_PREFIX_PATH})
-
-    # requires apt install autoconf-archive and autoconf
-    externalproject_add (sdbusplus-project PREFIX
-                         ${CMAKE_BINARY_DIR}/sdbusplus-project GIT_REPOSITORY
-                         https://github.com/openbmc/sdbusplus.git SOURCE_DIR
-                         ${CMAKE_BINARY_DIR}/sdbusplus-src BINARY_DIR
-                         ${CMAKE_BINARY_DIR}/sdbusplus-build CONFIGURE_COMMAND
-                         "" BUILD_COMMAND cd ${CMAKE_BINARY_DIR}/sdbusplus-src
-                         && meson build -Ddefault_library=static && ninja -C
-                         build libsdbusplus.a INSTALL_COMMAND ""
-                         LOG_DOWNLOAD ON)
-    include_directories (SYSTEM ${CMAKE_BINARY_DIR}/sdbusplus-src)
-    link_directories (${CMAKE_BINARY_DIR}/sdbusplus-src/build)
-
-    externalproject_add (nlohmann-json PREFIX
-                         ${CMAKE_CURRENT_BINARY_DIR}/nlohmann-json
-                         GIT_REPOSITORY https://github.com/nlohmann/json.git
-                         SOURCE_DIR ${CMAKE_BINARY_DIR}/nlohmann-json-src
-                         BINARY_DIR ${CMAKE_BINARY_DIR}/nlohmann-json-build
-                         CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND
-                         "" LOG_DOWNLOAD ON)
-    include_directories (SYSTEM ${CMAKE_BINARY_DIR}/nlohmann-json-src/include)
-
-    if (ENABLE_TEST)
-        option (HUNTER_ENABLED "Enable hunter package pulling" ON)
-        hunter_add_package (GTest)
-
-        find_package (GTest CONFIG REQUIRED)
-
-        enable_testing ()
-
-        add_executable (runTachTests tests/test_TachSensor.cpp ${FAN_SRC_FILES})
-        add_test (NAME test_fansensor COMMAND runTachTests)
-        target_link_libraries (runTachTests GTest::main GTest::gtest pthread
-                               ${DBUS_LIBRARIES} stdc++fs)
-        add_dependencies (runTachTests nlohmann-json)
-
-        add_executable (runHwmonTempTests tests/test_HwmonTempSensor.cpp
-                        ${HWMON_TEMP_SRC_FILES})
-        add_test (NAME test_hwmontempsensor COMMAND runHwmonTempTests)
-        target_link_libraries (runHwmonTempTests GTest::main GTest::gtest
-                               pthread ${DBUS_LIBRARIES} stdc++fs)
-        add_dependencies (runHwmonTempTests nlohmann-json)
-    endif ()
-
-endif ()
-
-add_definitions (-DBOOST_ERROR_CODE_HEADER_ONLY)
-add_definitions (-DBOOST_SYSTEM_NO_DEPRECATED)
-add_definitions (-DBOOST_ALL_NO_LIB)
-add_definitions (-DBOOST_NO_RTTI)
-add_definitions (-DBOOST_NO_TYPEID)
-add_definitions (-DBOOST_ASIO_DISABLE_THREADS)
-
-link_directories (${EXTERNAL_INSTALL_LOCATION}/lib)
-
-include_directories (${CMAKE_CURRENT_SOURCE_DIR}/include)
-
-add_executable (adcsensor src/ADCSensorMain.cpp ${ADC_SRC_FILES})
-add_dependencies (adcsensor sdbusplus-project)
-target_link_libraries (adcsensor ${SENSOR_LINK_LIBS})
-target_link_libraries (adcsensor gpiodcxx)
-
-add_executable (cpusensor src/CPUSensorMain.cpp ${CPU_SRC_FILES})
-add_dependencies (cpusensor sdbusplus-project)
-target_link_libraries (cpusensor ${SENSOR_LINK_LIBS})
-target_link_libraries (cpusensor gpiodcxx)
-
-add_executable (exitairtempsensor src/ExitAirTempSensor.cpp
-                ${EXIT_AIR_SRC_FILES})
-add_dependencies (exitairtempsensor sdbusplus-project)
-target_link_libraries (exitairtempsensor ${SENSOR_LINK_LIBS})
-
-add_executable (fansensor src/FanMain.cpp ${FAN_SRC_FILES})
-add_dependencies (fansensor sdbusplus-project)
-target_link_libraries (fansensor ${SENSOR_LINK_LIBS})
-target_link_libraries (fansensor gpiodcxx)
-
-add_executable (hwmontempsensor src/HwmonTempMain.cpp ${HWMON_TEMP_SRC_FILES})
-add_dependencies (hwmontempsensor sdbusplus-project)
-target_link_libraries (hwmontempsensor ${SENSOR_LINK_LIBS})
-
-add_executable (intrusionsensor src/IntrusionSensorMain.cpp
-                ${INTRUSION_SRC_FILES})
-add_dependencies (intrusionsensor sdbusplus-project)
-target_link_libraries (intrusionsensor ${SENSOR_LINK_LIBS})
-target_link_libraries (intrusionsensor i2c)
-target_link_libraries (intrusionsensor gpiodcxx)
-
-add_executable (ipmbsensor src/IpmbSensor.cpp ${IPMB_SRC_FILES})
-add_dependencies (ipmbsensor sdbusplus-project)
-target_link_libraries (ipmbsensor ${SENSOR_LINK_LIBS})
-
-add_executable (mcutempsensor src/MCUTempSensor.cpp ${MCUTEMP_SRC_FILES})
-add_dependencies (mcutempsensor sdbusplus-project)
-target_link_libraries (mcutempsensor ${SENSOR_LINK_LIBS})
-target_link_libraries (mcutempsensor i2c)
-
-add_executable (psusensor src/PSUSensorMain.cpp ${PSU_SRC_FILES})
-add_dependencies (psusensor sdbusplus-project)
-target_link_libraries (psusensor ${SENSOR_LINK_LIBS})
-
-if (NOT DISABLE_EXTERNAL)
-    add_executable (externalsensor ${EXTERNAL_SRC_FILES})
-    add_dependencies (externalsensor sdbusplus-project)
-    target_link_libraries (externalsensor ${SENSOR_LINK_LIBS})
-endif()
-
-if (NOT DISABLE_NVME)
-    add_executable (nvmesensor ${NVME_SRC_FILES})
-    add_dependencies (nvmesensor sdbusplus-project)
-    target_link_libraries (nvmesensor liblibmctp.a i2c ${SENSOR_LINK_LIBS})
-endif()
-
-set (SERVICE_FILE_SRC_DIR ${PROJECT_SOURCE_DIR}/service_files)
-set (SERVICE_FILE_INSTALL_DIR /lib/systemd/system/)
-
-if (NOT DISABLE_ADC)
-    add_dependencies (adcsensor ${EXTERNAL_PACKAGES})
-    install (TARGETS adcsensor DESTINATION bin)
-    install (FILES
-                 ${SERVICE_FILE_SRC_DIR}/xyz.openbmc_project.adcsensor.service
-                 DESTINATION ${SERVICE_FILE_INSTALL_DIR})
-endif ()
-
-if (NOT DISABLE_CPU)
-    add_dependencies (cpusensor ${EXTERNAL_PACKAGES})
-    install (TARGETS cpusensor DESTINATION bin)
-    install (FILES
-                 ${SERVICE_FILE_SRC_DIR}/xyz.openbmc_project.cpusensor.service
-                 DESTINATION ${SERVICE_FILE_INSTALL_DIR})
-endif ()
-
-if (NOT DISABLE_EXIT_AIR)
-    add_dependencies (exitairtempsensor ${EXTERNAL_PACKAGES})
-    install (TARGETS exitairtempsensor DESTINATION bin)
-    install (
-        FILES ${SERVICE_FILE_SRC_DIR}/xyz.openbmc_project.exitairsensor.service
-              DESTINATION ${SERVICE_FILE_INSTALL_DIR}
-    )
-endif ()
-
-if (NOT DISABLE_FAN)
-    add_dependencies (fansensor ${EXTERNAL_PACKAGES})
-    install (TARGETS fansensor DESTINATION bin)
-    install (FILES
-                 ${SERVICE_FILE_SRC_DIR}/xyz.openbmc_project.fansensor.service
-                 DESTINATION ${SERVICE_FILE_INSTALL_DIR})
-endif ()
-
-if (NOT DISABLE_HWMON_TEMP)
-    add_dependencies (hwmontempsensor ${EXTERNAL_PACKAGES})
-    install (TARGETS hwmontempsensor DESTINATION bin)
-    install (
-        FILES
-            ${SERVICE_FILE_SRC_DIR}/xyz.openbmc_project.hwmontempsensor.service
-            DESTINATION ${SERVICE_FILE_INSTALL_DIR}
-    )
-endif ()
-
-if (NOT DISABLE_INTRUSION)
-    add_dependencies (intrusionsensor ${EXTERNAL_PACKAGES})
-    install (TARGETS intrusionsensor DESTINATION bin)
-    install (
-        FILES
-            ${SERVICE_FILE_SRC_DIR}/xyz.openbmc_project.intrusionsensor.service
-            DESTINATION ${SERVICE_FILE_INSTALL_DIR}
-    )
-endif ()
-
-if (NOT DISABLE_IPMB)
-    add_dependencies (ipmbsensor ${EXTERNAL_PACKAGES})
-    install (TARGETS ipmbsensor DESTINATION bin)
-    install (FILES
-                 ${SERVICE_FILE_SRC_DIR}/xyz.openbmc_project.ipmbsensor.service
-                 DESTINATION ${SERVICE_FILE_INSTALL_DIR})
-endif ()
-
-if (NOT DISABLE_MCUTEMP)
-    add_dependencies (mcutempsensor ${EXTERNAL_PACKAGES})
-    install (TARGETS mcutempsensor DESTINATION bin)
-    install (
-        FILES ${SERVICE_FILE_SRC_DIR}/xyz.openbmc_project.mcutempsensor.service
-              DESTINATION ${SERVICE_FILE_INSTALL_DIR}
-    )
-endif ()
-
-if (NOT DISABLE_PSU)
-    add_dependencies (psusensor ${EXTERNAL_PACKAGES})
-    install (TARGETS psusensor DESTINATION bin)
-    install (FILES
-                 ${SERVICE_FILE_SRC_DIR}/xyz.openbmc_project.psusensor.service
-                 DESTINATION ${SERVICE_FILE_INSTALL_DIR})
-endif ()
-
-if (NOT DISABLE_EXTERNAL)
-    add_dependencies (externalsensor ${EXTERNAL_PACKAGES})
-    install (TARGETS externalsensor DESTINATION bin)
-    install (FILES
-                 ${SERVICE_FILE_SRC_DIR}/xyz.openbmc_project.externalsensor.service
-                 DESTINATION ${SERVICE_FILE_INSTALL_DIR})
-endif ()
-
-if (NOT DISABLE_NVME)
-    add_dependencies (nvmesensor ${EXTERNAL_PACKAGES})
-    install (TARGETS nvmesensor DESTINATION bin)
-    install (FILES
-                 ${SERVICE_FILE_SRC_DIR}/xyz.openbmc_project.nvmesensor.service
-                 DESTINATION ${SERVICE_FILE_INSTALL_DIR})
-endif ()
diff --git a/cmake-format.json b/cmake-format.json
deleted file mode 100644
index 4a68fb7..0000000
--- a/cmake-format.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "enum_char": ".",
-  "line_ending": "unix",
-  "bullet_char": "*",
-  "max_subargs_per_line": 99,
-  "command_case": "lower",
-  "tab_size": 4,
-  "line_width": 80,
-  "separate_fn_name_with_space": true,
-  "dangle_parens": true,
-  "separate_ctrl_name_with_space": true
-}
-
diff --git a/cmake/Finddbus.cmake b/cmake/Finddbus.cmake
deleted file mode 100644
index 2d8eea2..0000000
--- a/cmake/Finddbus.cmake
+++ /dev/null
@@ -1,61 +0,0 @@
-# - Try to find DBus
-# Once done, this will define
-#
-#  DBUS_FOUND - system has DBus
-#  DBUS_INCLUDE_DIRS - the DBus include directories
-#  DBUS_LIBRARIES - link these to use DBus
-#
-# Copyright (C) 2012 Raphael Kubo da Costa <rakuco@webkit.org>
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1.  Redistributions of source code must retain the above copyright
-#     notice, this list of conditions and the following disclaimer.
-# 2.  Redistributions in binary form must reproduce the above copyright
-#     notice, this list of conditions and the following disclaimer in the
-#     documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
-# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-FIND_PACKAGE(PkgConfig)
-PKG_CHECK_MODULES(PC_DBUS QUIET dbus-1)
-
-FIND_LIBRARY(DBUS_LIBRARIES
-    NAMES dbus-1
-    HINTS ${PC_DBUS_LIBDIR}
-          ${PC_DBUS_LIBRARY_DIRS}
-)
-
-message("DBUS_LIBRARIES = ${DBUS_LIBRARIES}")
-
-FIND_PATH(DBUS_INCLUDE_DIR
-    NAMES dbus/dbus.h
-    HINTS ${PC_DBUS_INCLUDEDIR}
-          ${PC_DBUS_INCLUDE_DIRS}
-)
-
-GET_FILENAME_COMPONENT(_DBUS_LIBRARY_DIR ${DBUS_LIBRARIES} PATH)
-FIND_PATH(DBUS_ARCH_INCLUDE_DIR
-    NAMES dbus/dbus-arch-deps.h
-    HINTS ${PC_DBUS_INCLUDEDIR}
-          ${PC_DBUS_INCLUDE_DIRS}
-          ${_DBUS_LIBRARY_DIR}
-          ${DBUS_INCLUDE_DIR}
-    PATH_SUFFIXES include
-)
-
-SET(DBUS_INCLUDE_DIRS ${DBUS_INCLUDE_DIR} ${DBUS_ARCH_INCLUDE_DIR})
-
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(DBUS REQUIRED_VARS DBUS_INCLUDE_DIRS DBUS_LIBRARIES)
diff --git a/cmake/HunterGate.cmake b/cmake/HunterGate.cmake
deleted file mode 100644
index 97f69cc..0000000
--- a/cmake/HunterGate.cmake
+++ /dev/null
@@ -1,514 +0,0 @@
-# Copyright (c) 2013-2015, Ruslan Baratov
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright notice, this
-#   list of conditions and the following disclaimer.
-#
-# * Redistributions in binary form must reproduce the above copyright notice,
-#   this list of conditions and the following disclaimer in the documentation
-#   and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# This is a gate file to Hunter package manager.
-# Include this file using `include` command and add package you need, example:
-#
-#     cmake_minimum_required(VERSION 3.0)
-#
-#     include("cmake/HunterGate.cmake")
-#     HunterGate(
-#         URL "https://github.com/path/to/hunter/archive.tar.gz"
-#         SHA1 "798501e983f14b28b10cda16afa4de69eee1da1d"
-#     )
-#
-#     project(MyProject)
-#
-#     hunter_add_package(Foo)
-#     hunter_add_package(Boo COMPONENTS Bar Baz)
-#
-# Projects:
-#     * https://github.com/hunter-packages/gate/
-#     * https://github.com/ruslo/hunter
-
-option(HUNTER_ENABLED "Enable Hunter package manager support" ON)
-if(HUNTER_ENABLED)
-  if(CMAKE_VERSION VERSION_LESS "3.0")
-    message(FATAL_ERROR "At least CMake version 3.0 required for hunter dependency management."
-      " Update CMake or set HUNTER_ENABLED to OFF.")
-  endif()
-endif()
-
-include(CMakeParseArguments) # cmake_parse_arguments
-
-option(HUNTER_STATUS_PRINT "Print working status" ON)
-option(HUNTER_STATUS_DEBUG "Print a lot info" OFF)
-
-set(HUNTER_WIKI "https://github.com/ruslo/hunter/wiki")
-
-function(hunter_gate_status_print)
-  foreach(print_message ${ARGV})
-    if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG)
-      message(STATUS "[hunter] ${print_message}")
-    endif()
-  endforeach()
-endfunction()
-
-function(hunter_gate_status_debug)
-  foreach(print_message ${ARGV})
-    if(HUNTER_STATUS_DEBUG)
-      string(TIMESTAMP timestamp)
-      message(STATUS "[hunter *** DEBUG *** ${timestamp}] ${print_message}")
-    endif()
-  endforeach()
-endfunction()
-
-function(hunter_gate_wiki wiki_page)
-  message("------------------------------ WIKI -------------------------------")
-  message("    ${HUNTER_WIKI}/${wiki_page}")
-  message("-------------------------------------------------------------------")
-  message("")
-  message(FATAL_ERROR "")
-endfunction()
-
-function(hunter_gate_internal_error)
-  message("")
-  foreach(print_message ${ARGV})
-    message("[hunter ** INTERNAL **] ${print_message}")
-  endforeach()
-  message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
-  message("")
-  hunter_gate_wiki("error.internal")
-endfunction()
-
-function(hunter_gate_fatal_error)
-  cmake_parse_arguments(hunter "" "WIKI" "" "${ARGV}")
-  string(COMPARE EQUAL "${hunter_WIKI}" "" have_no_wiki)
-  if(have_no_wiki)
-    hunter_gate_internal_error("Expected wiki")
-  endif()
-  message("")
-  foreach(x ${hunter_UNPARSED_ARGUMENTS})
-    message("[hunter ** FATAL ERROR **] ${x}")
-  endforeach()
-  message("[hunter ** FATAL ERROR **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
-  message("")
-  hunter_gate_wiki("${hunter_WIKI}")
-endfunction()
-
-function(hunter_gate_user_error)
-  hunter_gate_fatal_error(${ARGV} WIKI "error.incorrect.input.data")
-endfunction()
-
-function(hunter_gate_self root version sha1 result)
-  string(COMPARE EQUAL "${root}" "" is_bad)
-  if(is_bad)
-    hunter_gate_internal_error("root is empty")
-  endif()
-
-  string(COMPARE EQUAL "${version}" "" is_bad)
-  if(is_bad)
-    hunter_gate_internal_error("version is empty")
-  endif()
-
-  string(COMPARE EQUAL "${sha1}" "" is_bad)
-  if(is_bad)
-    hunter_gate_internal_error("sha1 is empty")
-  endif()
-
-  string(SUBSTRING "${sha1}" 0 7 archive_id)
-
-  if(EXISTS "${root}/cmake/Hunter")
-    set(hunter_self "${root}")
-  else()
-    set(
-        hunter_self
-        "${root}/_Base/Download/Hunter/${version}/${archive_id}/Unpacked"
-    )
-  endif()
-
-  set("${result}" "${hunter_self}" PARENT_SCOPE)
-endfunction()
-
-# Set HUNTER_GATE_ROOT cmake variable to suitable value.
-function(hunter_gate_detect_root)
-  # Check CMake variable
-  string(COMPARE NOTEQUAL "${HUNTER_ROOT}" "" not_empty)
-  if(not_empty)
-    set(HUNTER_GATE_ROOT "${HUNTER_ROOT}" PARENT_SCOPE)
-    hunter_gate_status_debug("HUNTER_ROOT detected by cmake variable")
-    return()
-  endif()
-
-  # Check environment variable
-  string(COMPARE NOTEQUAL "$ENV{HUNTER_ROOT}" "" not_empty)
-  if(not_empty)
-    set(HUNTER_GATE_ROOT "$ENV{HUNTER_ROOT}" PARENT_SCOPE)
-    hunter_gate_status_debug("HUNTER_ROOT detected by environment variable")
-    return()
-  endif()
-
-  # Check HOME environment variable
-  string(COMPARE NOTEQUAL "$ENV{HOME}" "" result)
-  if(result)
-    set(HUNTER_GATE_ROOT "$ENV{HOME}/.hunter" PARENT_SCOPE)
-    hunter_gate_status_debug("HUNTER_ROOT set using HOME environment variable")
-    return()
-  endif()
-
-  # Check SYSTEMDRIVE and USERPROFILE environment variable (windows only)
-  if(WIN32)
-    string(COMPARE NOTEQUAL "$ENV{SYSTEMDRIVE}" "" result)
-    if(result)
-      set(HUNTER_GATE_ROOT "$ENV{SYSTEMDRIVE}/.hunter" PARENT_SCOPE)
-      hunter_gate_status_debug(
-          "HUNTER_ROOT set using SYSTEMDRIVE environment variable"
-      )
-      return()
-    endif()
-
-    string(COMPARE NOTEQUAL "$ENV{USERPROFILE}" "" result)
-    if(result)
-      set(HUNTER_GATE_ROOT "$ENV{USERPROFILE}/.hunter" PARENT_SCOPE)
-      hunter_gate_status_debug(
-          "HUNTER_ROOT set using USERPROFILE environment variable"
-      )
-      return()
-    endif()
-  endif()
-
-  hunter_gate_fatal_error(
-      "Can't detect HUNTER_ROOT"
-      WIKI "error.detect.hunter.root"
-  )
-endfunction()
-
-macro(hunter_gate_lock dir)
-  if(NOT HUNTER_SKIP_LOCK)
-    if("${CMAKE_VERSION}" VERSION_LESS "3.2")
-      hunter_gate_fatal_error(
-          "Can't lock, upgrade to CMake 3.2 or use HUNTER_SKIP_LOCK"
-          WIKI "error.can.not.lock"
-      )
-    endif()
-    hunter_gate_status_debug("Locking directory: ${dir}")
-    file(LOCK "${dir}" DIRECTORY GUARD FUNCTION)
-    hunter_gate_status_debug("Lock done")
-  endif()
-endmacro()
-
-function(hunter_gate_download dir)
-  string(
-      COMPARE
-      NOTEQUAL
-      "$ENV{HUNTER_DISABLE_AUTOINSTALL}"
-      ""
-      disable_autoinstall
-  )
-  if(disable_autoinstall AND NOT HUNTER_RUN_INSTALL)
-    hunter_gate_fatal_error(
-        "Hunter not found in '${dir}'"
-        "Set HUNTER_RUN_INSTALL=ON to auto-install it from '${HUNTER_GATE_URL}'"
-        "Settings:"
-        "  HUNTER_ROOT: ${HUNTER_GATE_ROOT}"
-        "  HUNTER_SHA1: ${HUNTER_GATE_SHA1}"
-        WIKI "error.run.install"
-    )
-  endif()
-  string(COMPARE EQUAL "${dir}" "" is_bad)
-  if(is_bad)
-    hunter_gate_internal_error("Empty 'dir' argument")
-  endif()
-
-  string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" is_bad)
-  if(is_bad)
-    hunter_gate_internal_error("HUNTER_GATE_SHA1 empty")
-  endif()
-
-  string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" is_bad)
-  if(is_bad)
-    hunter_gate_internal_error("HUNTER_GATE_URL empty")
-  endif()
-
-  set(done_location "${dir}/DONE")
-  set(sha1_location "${dir}/SHA1")
-
-  set(build_dir "${dir}/Build")
-  set(cmakelists "${dir}/CMakeLists.txt")
-
-  hunter_gate_lock("${dir}")
-  if(EXISTS "${done_location}")
-    # while waiting for lock other instance can do all the job
-    hunter_gate_status_debug("File '${done_location}' found, skip install")
-    return()
-  endif()
-
-  file(REMOVE_RECURSE "${build_dir}")
-  file(REMOVE_RECURSE "${cmakelists}")
-
-  file(MAKE_DIRECTORY "${build_dir}") # check directory permissions
-
-  # Disabling languages speeds up a little bit, reduces noise in the output
-  # and avoids path too long windows error
-  file(
-      WRITE
-      "${cmakelists}"
-      "cmake_minimum_required(VERSION 3.0)\n"
-      "project(HunterDownload LANGUAGES NONE)\n"
-      "include(ExternalProject)\n"
-      "ExternalProject_Add(\n"
-      "    Hunter\n"
-      "    URL\n"
-      "    \"${HUNTER_GATE_URL}\"\n"
-      "    URL_HASH\n"
-      "    SHA1=${HUNTER_GATE_SHA1}\n"
-      "    DOWNLOAD_DIR\n"
-      "    \"${dir}\"\n"
-      "    SOURCE_DIR\n"
-      "    \"${dir}/Unpacked\"\n"
-      "    CONFIGURE_COMMAND\n"
-      "    \"\"\n"
-      "    BUILD_COMMAND\n"
-      "    \"\"\n"
-      "    INSTALL_COMMAND\n"
-      "    \"\"\n"
-      ")\n"
-  )
-
-  if(HUNTER_STATUS_DEBUG)
-    set(logging_params "")
-  else()
-    set(logging_params OUTPUT_QUIET)
-  endif()
-
-  hunter_gate_status_debug("Run generate")
-
-  # Need to add toolchain file too.
-  # Otherwise on Visual Studio + MDD this will fail with error:
-  # "Could not find an appropriate version of the Windows 10 SDK installed on this machine"
-  if(EXISTS "${CMAKE_TOOLCHAIN_FILE}")
-    set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}")
-  else()
-    # 'toolchain_arg' can't be empty
-    set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=")
-  endif()
-
-  execute_process(
-      COMMAND "${CMAKE_COMMAND}" "-H${dir}" "-B${build_dir}" "-G${CMAKE_GENERATOR}" "${toolchain_arg}"
-      WORKING_DIRECTORY "${dir}"
-      RESULT_VARIABLE download_result
-      ${logging_params}
-  )
-
-  if(NOT download_result EQUAL 0)
-    hunter_gate_internal_error("Configure project failed")
-  endif()
-
-  hunter_gate_status_print(
-      "Initializing Hunter workspace (${HUNTER_GATE_SHA1})"
-      "  ${HUNTER_GATE_URL}"
-      "  -> ${dir}"
-  )
-  execute_process(
-      COMMAND "${CMAKE_COMMAND}" --build "${build_dir}"
-      WORKING_DIRECTORY "${dir}"
-      RESULT_VARIABLE download_result
-      ${logging_params}
-  )
-
-  if(NOT download_result EQUAL 0)
-    hunter_gate_internal_error("Build project failed")
-  endif()
-
-  file(REMOVE_RECURSE "${build_dir}")
-  file(REMOVE_RECURSE "${cmakelists}")
-
-  file(WRITE "${sha1_location}" "${HUNTER_GATE_SHA1}")
-  file(WRITE "${done_location}" "DONE")
-
-  hunter_gate_status_debug("Finished")
-endfunction()
-
-# Must be a macro so master file 'cmake/Hunter' can
-# apply all variables easily just by 'include' command
-# (otherwise PARENT_SCOPE magic needed)
-macro(HunterGate)
-  if(HUNTER_GATE_DONE)
-    # variable HUNTER_GATE_DONE set explicitly for external project
-    # (see `hunter_download`)
-    set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES)
-  endif()
-
-  # First HunterGate command will init Hunter, others will be ignored
-  get_property(_hunter_gate_done GLOBAL PROPERTY HUNTER_GATE_DONE SET)
-
-  if(NOT HUNTER_ENABLED)
-    # Empty function to avoid error "unknown function"
-    function(hunter_add_package)
-    endfunction()
-  elseif(_hunter_gate_done)
-    hunter_gate_status_debug("Secondary HunterGate (use old settings)")
-    hunter_gate_self(
-        "${HUNTER_CACHED_ROOT}"
-        "${HUNTER_VERSION}"
-        "${HUNTER_SHA1}"
-        _hunter_self
-    )
-    include("${_hunter_self}/cmake/Hunter")
-  else()
-    set(HUNTER_GATE_LOCATION "${CMAKE_CURRENT_LIST_DIR}")
-
-    string(COMPARE NOTEQUAL "${PROJECT_NAME}" "" _have_project_name)
-    if(_have_project_name)
-      hunter_gate_fatal_error(
-          "Please set HunterGate *before* 'project' command. "
-          "Detected project: ${PROJECT_NAME}"
-          WIKI "error.huntergate.before.project"
-      )
-    endif()
-
-    cmake_parse_arguments(
-        HUNTER_GATE "LOCAL" "URL;SHA1;GLOBAL;FILEPATH" "" ${ARGV}
-    )
-
-    string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" _empty_sha1)
-    string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" _empty_url)
-    string(
-        COMPARE
-        NOTEQUAL
-        "${HUNTER_GATE_UNPARSED_ARGUMENTS}"
-        ""
-        _have_unparsed
-    )
-    string(COMPARE NOTEQUAL "${HUNTER_GATE_GLOBAL}" "" _have_global)
-    string(COMPARE NOTEQUAL "${HUNTER_GATE_FILEPATH}" "" _have_filepath)
-
-    if(_have_unparsed)
-      hunter_gate_user_error(
-          "HunterGate unparsed arguments: ${HUNTER_GATE_UNPARSED_ARGUMENTS}"
-      )
-    endif()
-    if(_empty_sha1)
-      hunter_gate_user_error("SHA1 suboption of HunterGate is mandatory")
-    endif()
-    if(_empty_url)
-      hunter_gate_user_error("URL suboption of HunterGate is mandatory")
-    endif()
-    if(_have_global)
-      if(HUNTER_GATE_LOCAL)
-        hunter_gate_user_error("Unexpected LOCAL (already has GLOBAL)")
-      endif()
-      if(_have_filepath)
-        hunter_gate_user_error("Unexpected FILEPATH (already has GLOBAL)")
-      endif()
-    endif()
-    if(HUNTER_GATE_LOCAL)
-      if(_have_global)
-        hunter_gate_user_error("Unexpected GLOBAL (already has LOCAL)")
-      endif()
-      if(_have_filepath)
-        hunter_gate_user_error("Unexpected FILEPATH (already has LOCAL)")
-      endif()
-    endif()
-    if(_have_filepath)
-      if(_have_global)
-        hunter_gate_user_error("Unexpected GLOBAL (already has FILEPATH)")
-      endif()
-      if(HUNTER_GATE_LOCAL)
-        hunter_gate_user_error("Unexpected LOCAL (already has FILEPATH)")
-      endif()
-    endif()
-
-    hunter_gate_detect_root() # set HUNTER_GATE_ROOT
-
-    # Beautify path, fix probable problems with windows path slashes
-    get_filename_component(
-        HUNTER_GATE_ROOT "${HUNTER_GATE_ROOT}" ABSOLUTE
-    )
-    hunter_gate_status_debug("HUNTER_ROOT: ${HUNTER_GATE_ROOT}")
-    if(NOT HUNTER_ALLOW_SPACES_IN_PATH)
-      string(FIND "${HUNTER_GATE_ROOT}" " " _contain_spaces)
-      if(NOT _contain_spaces EQUAL -1)
-        hunter_gate_fatal_error(
-            "HUNTER_ROOT (${HUNTER_GATE_ROOT}) contains spaces."
-            "Set HUNTER_ALLOW_SPACES_IN_PATH=ON to skip this error"
-            "(Use at your own risk!)"
-            WIKI "error.spaces.in.hunter.root"
-        )
-      endif()
-    endif()
-
-    string(
-        REGEX
-        MATCH
-        "[0-9]+\\.[0-9]+\\.[0-9]+[-_a-z0-9]*"
-        HUNTER_GATE_VERSION
-        "${HUNTER_GATE_URL}"
-    )
-    string(COMPARE EQUAL "${HUNTER_GATE_VERSION}" "" _is_empty)
-    if(_is_empty)
-      set(HUNTER_GATE_VERSION "unknown")
-    endif()
-
-    hunter_gate_self(
-        "${HUNTER_GATE_ROOT}"
-        "${HUNTER_GATE_VERSION}"
-        "${HUNTER_GATE_SHA1}"
-        _hunter_self
-    )
-
-    set(_master_location "${_hunter_self}/cmake/Hunter")
-    if(EXISTS "${HUNTER_GATE_ROOT}/cmake/Hunter")
-      # Hunter downloaded manually (e.g. by 'git clone')
-      set(_unused "xxxxxxxxxx")
-      set(HUNTER_GATE_SHA1 "${_unused}")
-      set(HUNTER_GATE_VERSION "${_unused}")
-    else()
-      get_filename_component(_archive_id_location "${_hunter_self}/.." ABSOLUTE)
-      set(_done_location "${_archive_id_location}/DONE")
-      set(_sha1_location "${_archive_id_location}/SHA1")
-
-      # Check Hunter already downloaded by HunterGate
-      if(NOT EXISTS "${_done_location}")
-        hunter_gate_download("${_archive_id_location}")
-      endif()
-
-      if(NOT EXISTS "${_done_location}")
-        hunter_gate_internal_error("hunter_gate_download failed")
-      endif()
-
-      if(NOT EXISTS "${_sha1_location}")
-        hunter_gate_internal_error("${_sha1_location} not found")
-      endif()
-      file(READ "${_sha1_location}" _sha1_value)
-      string(COMPARE EQUAL "${_sha1_value}" "${HUNTER_GATE_SHA1}" _is_equal)
-      if(NOT _is_equal)
-        hunter_gate_internal_error(
-            "Short SHA1 collision:"
-            "  ${_sha1_value} (from ${_sha1_location})"
-            "  ${HUNTER_GATE_SHA1} (HunterGate)"
-        )
-      endif()
-      if(NOT EXISTS "${_master_location}")
-        hunter_gate_user_error(
-            "Master file not found:"
-            "  ${_master_location}"
-            "try to update Hunter/HunterGate"
-        )
-      endif()
-    endif()
-    include("${_master_location}")
-    set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES)
-  endif()
-endmacro()
\ No newline at end of file
diff --git a/include/PSUEvent.hpp b/include/PSUEvent.hpp
index 8dfa3ea..aebb58d 100644
--- a/include/PSUEvent.hpp
+++ b/include/PSUEvent.hpp
@@ -52,7 +52,7 @@
     size_t errCount;
     std::string path;
     std::string eventName;
-    std::string groupEventName;
+
     boost::asio::deadline_timer waitTimer;
     std::shared_ptr<boost::asio::streambuf> readBuf;
     void handleResponse(const boost::system::error_code& err);
@@ -63,6 +63,7 @@
     static constexpr unsigned int eventPollMs = 1000;
     static constexpr size_t warnAfterErrorCount = 10;
     std::string psuName;
+    std::string groupEventName;
     std::string fanName;
     std::string assertMessage;
     std::string deassertMessage;
diff --git a/include/PSUSensor.hpp b/include/PSUSensor.hpp
index 102fe63..7b4bfdb 100644
--- a/include/PSUSensor.hpp
+++ b/include/PSUSensor.hpp
@@ -30,8 +30,8 @@
     boost::asio::deadline_timer waitTimer;
     std::shared_ptr<boost::asio::streambuf> readBuf;
     std::string path;
-    std::string pathRatedMin;
     std::string pathRatedMax;
+    std::string pathRatedMin;
     size_t errCount;
     unsigned int sensorFactor;
     uint8_t minMaxReadCounter;
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..a1b79be
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,66 @@
+project(
+    'dbus-sensors',
+    'cpp',
+    default_options: [
+        'warning_level=3',
+        'werror=true',
+        'cpp_std=c++17'
+    ],
+    license: 'Apache-2.0',
+    version: '0.1',
+)
+
+add_project_arguments(
+    '-DBOOST_SYSTEM_NO_DEPRECATED',
+    '-DBOOST_ERROR_CODE_HEADER_ONLY',
+    '-DBOOST_NO_RTTI',
+    '-DBOOST_NO_TYPEID',
+    '-DBOOST_ALL_NO_LIB',
+    '-DBOOST_ASIO_DISABLE_THREADS',
+    '-DBOOST_ALLOW_DEPRECATED_HEADERS',
+    language: 'cpp',
+)
+
+build_tests = get_option('tests')
+cppfs = meson.get_compiler('cpp').find_library('stdc++fs')
+gpiodcxx = dependency('libgpiodcxx')
+i2c = meson.get_compiler('cpp').find_library('i2c')
+sdbusplus = dependency('sdbusplus')
+mctp = meson.get_compiler('cpp').find_library('mctp', required : false)
+systemd = dependency('systemd')
+systemd_system_unit_dir = systemd.get_pkgconfig_variable(
+    'systemdsystemunitdir',
+    define_variable: ['prefix', get_option('prefix')])
+threads = dependency('threads')
+
+thresholds_a = static_library(
+    'thresholds_a',
+    'src/Thresholds.cpp',
+    implicit_include_directories: false,
+    include_directories: 'include',
+)
+
+utils_a = static_library(
+    'utils_a',
+    'src/Utils.cpp',
+    dependencies: [
+        cppfs,
+    ],
+    implicit_include_directories: false,
+    include_directories: 'include',
+)
+
+pwmsensor_a = static_library(
+    'pwmsensor_a',
+    'src/PwmSensor.cpp',
+    implicit_include_directories: false,
+    include_directories: 'include',
+)
+
+
+subdir('service_files')
+subdir('src')
+
+if not build_tests.disabled()
+    subdir('tests')
+endif
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..5fa3fd3
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,13 @@
+option('adc', type: 'feature', value: 'enabled', description: 'Enable ADC sensor.',)
+option('cpu', type: 'feature', value: 'enabled', description: 'Enable CPU sensor.',)
+option('exit-air', type: 'feature', value: 'enabled', description: 'Enable exit air sensor.',)
+option('fan', type: 'feature', value: 'enabled', description: 'Enable fan sensor.',)
+option('hwmon-temp', type: 'feature', value: 'enabled', description: 'Enable HWMON temperature sensor.',)
+option('intrusion', type: 'feature', value: 'enabled', description: 'Enable intrusion sensor.',)
+option('ipmb', type: 'feature', value: 'enabled', description: 'Enable IPMB sensor.',)
+option('mcu', type: 'feature', value: 'enabled', description: 'Enable CPU sensor.',)
+option('mcu-temp', type: 'feature', value: 'enabled', description: 'Enable MCU sensor.',)
+option('nvme', type: 'feature', value: 'disabled', description: 'Enable NVMe sensor.',)
+option('psu-temp', type: 'feature', value: 'enabled', description: 'Enable PSU sensor.',)
+option('external', type: 'feature', value: 'enabled', description: 'Enable External sensor.',)
+option('tests', type: 'feature', description: 'Build tests.',)
diff --git a/service_files/meson.build b/service_files/meson.build
new file mode 100644
index 0000000..9158ef2
--- /dev/null
+++ b/service_files/meson.build
@@ -0,0 +1,26 @@
+unit_files = [
+    ['adc', 'xyz.openbmc_project.adcsensor.service'],
+    ['cpu', 'xyz.openbmc_project.cpusensor.service'],
+    ['exit-air', 'xyz.openbmc_project.exitairsensor.service'],
+    ['fan', 'xyz.openbmc_project.fansensor.service'],
+    ['hwmon-temp', 'xyz.openbmc_project.hwmontempsensor.service'],
+    ['ipmb', 'xyz.openbmc_project.ipmbsensor.service'],
+    ['intrusion', 'xyz.openbmc_project.intrusionsensor.service'],
+    ['mcu-temp', 'xyz.openbmc_project.mcutempsensor.service'],
+    ['nvme', 'xyz.openbmc_project.nvmesensor.service'],
+    ['psu-temp', 'xyz.openbmc_project.psusensor.service'],
+]
+
+foreach tuple : unit_files
+    if get_option(tuple[0]).enabled()
+        configure_file(
+            copy: true,
+            input: tuple[1],
+            install: true,
+            install_dir: systemd_system_unit_dir,
+            output: tuple[1],
+        )
+    endif
+
+
+endforeach
diff --git a/src/PSUSensorMain.cpp b/src/PSUSensorMain.cpp
index d55d3a0..3520fbe 100644
--- a/src/PSUSensorMain.cpp
+++ b/src/PSUSensorMain.cpp
@@ -470,7 +470,7 @@
             std::string labelPath;
 
             /* find and differentiate _max and _input to replace "label" */
-            int pos = sensorPathStr.find("_");
+            size_t pos = sensorPathStr.find("_");
             if (pos != std::string::npos)
             {
 
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 0000000..32b6e85
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,211 @@
+peci_incdirs = []
+if not meson.get_compiler('cpp').has_header('linux/peci-ioctl.h')
+    peci_incdirs = ['../include']
+endif
+
+if get_option('adc').enabled()
+    executable(
+        'adcsensor',
+        'ADCSensor.cpp',
+        'ADCSensorMain.cpp',
+        dependencies: [
+            gpiodcxx,
+            sdbusplus,
+        ],
+        implicit_include_directories: false,
+        include_directories: '../include',
+        install: true,
+        link_with: [
+            thresholds_a,
+            utils_a,
+        ],
+    )
+endif
+
+if get_option('cpu').enabled()
+    executable(
+        'cpusensor',
+        'CPUSensorMain.cpp',
+        'CPUSensor.cpp',
+        dependencies: [
+            gpiodcxx,
+            sdbusplus,
+        ],
+        implicit_include_directories: false,
+        include_directories: [
+            '../include'
+        ] + peci_incdirs,
+        install: true,
+        link_with: [
+            thresholds_a,
+            utils_a,
+        ],
+    )
+endif
+
+if get_option('exit-air').enabled()
+    executable(
+        'exitairtempsensor',
+        'ExitAirTempSensor.cpp',
+        dependencies: [
+            sdbusplus,
+        ],
+        implicit_include_directories: false,
+        include_directories: '../include',
+        install: true,
+        link_with: [
+            thresholds_a,
+            utils_a,
+        ],
+    )
+endif
+
+if get_option('fan').enabled()
+    executable(
+        'fansensor',
+        'FanMain.cpp',
+        'TachSensor.cpp',
+        'PwmSensor.cpp',
+        dependencies: [
+            sdbusplus,
+            gpiodcxx
+        ],
+        implicit_include_directories: false,
+        include_directories: '../include',
+        install: true,
+        link_with: [
+            thresholds_a,
+            utils_a,
+        ],
+    )
+endif
+
+if get_option('hwmon-temp').enabled()
+    executable(
+        'hwmontempsensor',
+        'HwmonTempMain.cpp',
+        'HwmonTempSensor.cpp',
+        dependencies: [
+            sdbusplus,
+        ],
+        implicit_include_directories: false,
+        include_directories: '../include',
+        install: true,
+        link_with: [
+            thresholds_a,
+            utils_a,
+        ],
+    )
+endif
+
+if get_option('intrusion').enabled()
+    executable(
+        'intrusionsensor',
+        'ChassisIntrusionSensor.cpp',
+        'IntrusionSensorMain.cpp',
+        dependencies: [
+            i2c,
+            sdbusplus,
+            gpiodcxx,
+        ],
+        implicit_include_directories: false,
+        include_directories: '../include',
+        install: true,
+        link_with: [
+            utils_a,
+        ],
+    )
+endif
+
+if get_option('ipmb').enabled()
+    executable(
+        'ipmbsensor',
+        'IpmbSensor.cpp',
+        dependencies: [
+            sdbusplus,
+        ],
+        implicit_include_directories: false,
+        include_directories: '../include',
+        install: true,
+        link_with: [
+            thresholds_a,
+            utils_a,
+        ],
+    )
+endif
+
+if get_option('mcu-temp').enabled()
+    executable(
+        'mcutempsensor',
+        'MCUTempSensor.cpp',
+        dependencies: [
+            i2c,
+            sdbusplus,
+        ],
+        implicit_include_directories: false,
+        include_directories: '../include',
+        install: true,
+        link_with: [
+            utils_a,
+            thresholds_a,
+        ],
+    )
+endif
+
+if get_option('nvme').enabled()
+    executable(
+        'nvmesensor',
+        'NVMeSensorMain.cpp',
+	'NVMeSensor.cpp',
+        dependencies: [
+            i2c,
+            sdbusplus,
+            mctp,
+	],
+        implicit_include_directories: false,
+        include_directories: '../include',
+        install: true,
+        link_with: [
+            utils_a,
+            thresholds_a,
+        ],
+    )
+endif
+
+if get_option('psu-temp').enabled()
+    executable(
+        'psutempsensor',
+        'PSUEvent.cpp',
+        'PSUSensor.cpp',
+        'PSUSensorMain.cpp',
+        dependencies: [
+            sdbusplus,
+        ],
+        implicit_include_directories: false,
+        include_directories: '../include',
+        install: true,
+        link_with: [
+            pwmsensor_a,
+            thresholds_a,
+            utils_a,
+        ],
+    )
+endif
+
+if get_option('external').enabled()
+    executable(
+        'externalsensor',
+        'ExternalSensor.cpp',
+        'ExternalSensorMain.cpp',
+        dependencies: [
+            sdbusplus,
+        ],
+        implicit_include_directories: false,
+        include_directories: '../include',
+        install: true,
+        link_with: [
+            thresholds_a,
+            utils_a,
+        ],
+    )
+endif
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 0000000..b63d437
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,32 @@
+gtest = dependency('gtest', main: true, disabler: true, required: build_tests)
+have_boost_dbus = meson.get_compiler('cpp').has_header('dbus/connection.hpp')
+
+if have_boost_dbus
+test(
+    'test_hwmon_temp_sensor',
+    executable(
+        'test_hwmon_temp_sensor',
+        'test_HwmonTempSensor.cpp',
+        dependencies: [
+            gtest,
+            boost_dbus,
+        ],
+        implicit_include_directories: false,
+        include_directories: '../include',
+    )
+)
+
+test(
+    'test_tach_sensor',
+    executable(
+        'test_tach_sensor',
+        'test_TachSensor.cpp',
+        dependencies: [
+            gtest,
+            boost_dbus,
+        ],
+        implicit_include_directories: false,
+        include_directories: '../include',
+    )
+)
+endif
