[sw] Add Header Extern Guards to DIFs and libbase

Signed-off-by: Sam Elliott <selliott@lowrisc.org>
diff --git a/sw/device/lib/base/bitfield.h b/sw/device/lib/base/bitfield.h
index e96134e..5261425 100644
--- a/sw/device/lib/base/bitfield.h
+++ b/sw/device/lib/base/bitfield.h
@@ -7,6 +7,11 @@
 
 #include <stdint.h>
 
+// Header Extern Guard  (so header can be used from C and C++)
+#ifdef __cplusplus
+extern "C" {
+#endif  // __cplusplus
+
 /**
  * Masked field offset for 32-bit bitfields, with optional value.
  *
@@ -63,4 +68,8 @@
   return bitfield;
 }
 
+#ifdef __cplusplus
+}  // extern "C"
+#endif  // __cplusplus
+
 #endif  // OPENTITAN_SW_DEVICE_LIB_BASE_BITFIELD_H_
diff --git a/sw/device/lib/base/memory.h b/sw/device/lib/base/memory.h
index afab02a..1e0f277 100644
--- a/sw/device/lib/base/memory.h
+++ b/sw/device/lib/base/memory.h
@@ -9,6 +9,11 @@
 #include <stddef.h>
 #include <stdint.h>
 
+// Header Extern Guard  (so header can be used from C and C++)
+#ifdef __cplusplus
+extern "C" {
+#endif  // __cplusplus
+
 /**
  * Load a word from memory directly, bypassing aliasing rules.
  *
@@ -133,4 +138,8 @@
  */
 void *memrchr(const void *ptr, int value, size_t len);
 
+#ifdef __cplusplus
+}  // extern "C"
+#endif  // __cplusplus
+
 #endif  // OPENTITAN_SW_DEVICE_LIB_BASE_MEMORY_H_
diff --git a/sw/device/lib/base/mmio.h b/sw/device/lib/base/mmio.h
index c13c9b5..575a036 100644
--- a/sw/device/lib/base/mmio.h
+++ b/sw/device/lib/base/mmio.h
@@ -5,18 +5,17 @@
 #ifndef OPENTITAN_SW_DEVICE_LIB_BASE_MMIO_H_
 #define OPENTITAN_SW_DEVICE_LIB_BASE_MMIO_H_
 
-// This file is included in C and C++, and, as such, needs to be marked as
-// extern "C" in C++ to make sure linking works out.
-#ifdef __cplusplus
-extern "C" {
-#endif  // __cplusplus
-
 #include <stdbool.h>
 #include <stddef.h>
 #include <stdint.h>
 
 #include "sw/device/lib/base/bitfield.h"
 
+// Header Extern Guard  (so header can be used from C and C++)
+#ifdef __cplusplus
+extern "C" {
+#endif  // __cplusplus
+
 /**
  * Memory-mapped IO functions, which either map to volatile accesses, or can be
  * replaced with instrumentation calls at compile time, for use with tests.
diff --git a/sw/device/lib/dif/dif_gpio.h b/sw/device/lib/dif/dif_gpio.h
index 8253703..669e0e0 100644
--- a/sw/device/lib/dif/dif_gpio.h
+++ b/sw/device/lib/dif/dif_gpio.h
@@ -10,6 +10,11 @@
 
 #include "sw/device/lib/base/mmio.h"
 
+// Header Extern Guard (so header can be used from C and C++)
+#ifdef __cplusplus
+extern "C" {
+#endif  // __cplusplus
+
 /**
  * Configuration for initializing a GPIO device.
  */
@@ -343,4 +348,8 @@
                                                      uint32_t mask,
                                                      dif_gpio_irq_t config);
 
+#ifdef __cplusplus
+}  // extern "C"
+#endif  // __cplusplus
+
 #endif  // OPENTITAN_SW_DEVICE_LIB_DIF_DIF_GPIO_H_
diff --git a/sw/device/lib/dif/dif_plic.h b/sw/device/lib/dif/dif_plic.h
index 0d71db5..bd5b8e6 100644
--- a/sw/device/lib/dif/dif_plic.h
+++ b/sw/device/lib/dif/dif_plic.h
@@ -10,6 +10,11 @@
 
 #include "sw/device/lib/base/mmio.h"
 
+// Header Extern Guard (so header can be used from C and C++)
+#ifdef __cplusplus
+extern "C" {
+#endif  // __cplusplus
+
 /** The lowest interrupt priority. */
 extern const uint32_t kDifPlicMinPriority;
 
@@ -203,4 +208,8 @@
                                         dif_plic_target_t target,
                                         const dif_plic_irq_id_t *complete_data);
 
+#ifdef __cplusplus
+}  // extern "C"
+#endif  // __cplusplus
+
 #endif  // OPENTITAN_SW_DEVICE_LIB_DIF_DIF_PLIC_H_
diff --git a/sw/device/lib/dif/dif_spi_device.h b/sw/device/lib/dif/dif_spi_device.h
index 748fd3a..5b3dc7f 100644
--- a/sw/device/lib/dif/dif_spi_device.h
+++ b/sw/device/lib/dif/dif_spi_device.h
@@ -10,6 +10,11 @@
 
 #include "sw/device/lib/base/mmio.h"
 
+// Header Extern Guard (so header can be used from C and C++)
+#ifdef __cplusplus
+extern "C" {
+#endif  // __cplusplus
+
 /**
  * Represents a signal edge type.
  */
@@ -242,4 +247,8 @@
                                             const void *buf, size_t buf_len,
                                             size_t *bytes_sent);
 
+#ifdef __cplusplus
+}  // extern "C"
+#endif  // __cplusplus
+
 #endif  // OPENTITAN_SW_DEVICE_LIB_DIF_DIF_SPI_DEVICE_H_
diff --git a/sw/device/lib/dif/dif_uart.h b/sw/device/lib/dif/dif_uart.h
index 36b4041..a27559d 100644
--- a/sw/device/lib/dif/dif_uart.h
+++ b/sw/device/lib/dif/dif_uart.h
@@ -10,6 +10,11 @@
 
 #include "sw/device/lib/base/mmio.h"
 
+// Header Extern Guard (so header can be used from C and C++)
+#ifdef __cplusplus
+extern "C" {
+#endif  // __cplusplus
+
 // The size of UART TX and RX FIFOs in bytes.
 extern const uint32_t kDifUartFifoSizeBytes;
 
@@ -339,4 +344,8 @@
 dif_uart_result_t dif_uart_tx_bytes_available(const dif_uart_t *uart,
                                               size_t *num_bytes);
 
+#ifdef __cplusplus
+}  // extern "C"
+#endif  // __cplusplus
+
 #endif  // OPENTITAN_SW_DEVICE_LIB_DIF_DIF_UART_H_