nvidia-gpu: add gpu sensor app

The commit adds a dbus sensor app that uses MCTP VDM protocol to read
temperature sensor value from the gpu.

The MCTP VDM protocol is an extension of the OCP specification -
'''
  https://www.opencompute.org/documents/ocp-gpu-accelerator-management-interfaces-v1-pdf
'''

Tested.

Copy the gpusensor app on gb200nvl-obmc machine and run it.
```
root@gb200nvl-obmc:~# ./nvidiagpusensor
```

The app runs without errors.
```
root@gb200nvl-obmc:~# busctl tree xyz.openbmc_project.GpuSensor
└─ /xyz
  └─ /xyz/openbmc_project
    └─ /xyz/openbmc_project/sensors
```

Change-Id: Iee7376a9116489052c690f2e3a1ca8d0f29564dd
Signed-off-by: Harshit Aghera <haghera@nvidia.com>
diff --git a/meson.options b/meson.options
index de8fed4..306a953 100644
--- a/meson.options
+++ b/meson.options
@@ -65,6 +65,12 @@
     description: 'Enable PSU sensor.',
 )
 option(
+    'nvidia-gpu',
+    type: 'feature',
+    value: 'enabled',
+    description: 'Enable GPU sensor.',
+)
+option(
     'external',
     type: 'feature',
     value: 'enabled',
diff --git a/src/meson.build b/src/meson.build
index 5668bf4..2371d56 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -137,6 +137,10 @@
     subdir('psu')
 endif
 
+if get_option('nvidia-gpu').allowed()
+    subdir('nvidia-gpu')
+endif
+
 if get_option('external').allowed()
     subdir('external')
 endif
diff --git a/src/nvidia-gpu/NvidiaGpuSensorMain.cpp b/src/nvidia-gpu/NvidiaGpuSensorMain.cpp
new file mode 100644
index 0000000..85fec45
--- /dev/null
+++ b/src/nvidia-gpu/NvidiaGpuSensorMain.cpp
@@ -0,0 +1,23 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION &
+ * AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <boost/asio/io_context.hpp>
+#include <sdbusplus/asio/connection.hpp>
+#include <sdbusplus/asio/object_server.hpp>
+
+#include <memory>
+#include <string>
+
+int main()
+{
+    boost::asio::io_context io;
+    auto systemBus = std::make_shared<sdbusplus::asio::connection>(io);
+    sdbusplus::asio::object_server objectServer(systemBus, true);
+    objectServer.add_manager("/xyz/openbmc_project/sensors");
+    systemBus->request_name("xyz.openbmc_project.GpuSensor");
+
+    io.run();
+    return 0;
+}
diff --git a/src/nvidia-gpu/meson.build b/src/nvidia-gpu/meson.build
new file mode 100644
index 0000000..4a28491
--- /dev/null
+++ b/src/nvidia-gpu/meson.build
@@ -0,0 +1,13 @@
+gpusensor_sources = files('NvidiaGpuSensorMain.cpp')
+
+gpusensor_include_dir = include_directories('.', is_system: true)
+sensor_include_dir = include_directories('../..')
+
+executable(
+    'nvidiagpusensor',
+    gpusensor_sources,
+    implicit_include_directories: false,
+    include_directories: [gpusensor_include_dir, sensor_include_dir],
+    dependencies: [thresholds_dep, utils_dep],
+    install: true,
+)