Merge "soundstream: make mailbox optional"
diff --git a/sw/device/cheriot/soundstream/soundstream.cc b/sw/device/cheriot/soundstream/soundstream.cc
index 9e880da..a1c4fc6 100644
--- a/sw/device/cheriot/soundstream/soundstream.cc
+++ b/sw/device/cheriot/soundstream/soundstream.cc
@@ -43,7 +43,9 @@
 
   i2s_init();
   ml_top_init();
+#if DEVICE_EXISTS_mailbox
   mailbox_init();
+#endif
 
   i2s_rxfifo_clear();
   i2s_irq_acknowledge_all();
@@ -69,6 +71,7 @@
 #else
   {
 #endif
+#if DEVICE_EXISTS_mailbox
     // TODO(sleffler): need custom security core code running and
     //   a way to toggle the gpio associated with the button; for now
     //   just force it to appear as though the button has been pressed.
@@ -79,12 +82,19 @@
     mailbox_wait_for_button_pressed();
 
     mailbox_set_led(/*enabled=*/true);
+#else
+#endif
     Debug::log("Start recording (max {} samples)...", kSamples);
     i2s_record_begin();
 
     // Record until our buffer is full or the switch is released.
     int sample = 0;
-    while (sample < kSamples && mailbox_button_pressed()) {
+    while (sample < kSamples
+#if DEVICE_EXISTS_mailbox
+           && mailbox_button_pressed()
+#else
+#endif
+    ) {
       i2s_irq_set_enabled(kI2sIrqRxWatermark, /*enabled=*/true);
 
       i2s_wait_for_rx_watermark();
@@ -111,14 +121,22 @@
         uint32_t offset_reg_val = (((left - mean_left) & 0xFFFF) << 16) |
                                   ((right - mean_right) & 0xFFFF);
         samples[sample++] = offset_reg_val;
-        if (sample == kSamples || !mailbox_button_pressed()) {
+        if (sample == kSamples
+#if DEVICE_EXISTS_mailbox
+            || !mailbox_button_pressed()
+#else
+#endif
+        ) {
           break;
         }
       }
     }
 
     i2s_record_end();
+#if DEVICE_EXISTS_mailbox
     mailbox_set_led(/*enabled=*/false);
+#else
+#endif
 
     Debug::log("Done recording {} samples", sample);
     int samples_captured = sample;
diff --git a/sw/device/cheriot/soundstream/soundstream.h b/sw/device/cheriot/soundstream/soundstream.h
index 640834c..4158d95 100644
--- a/sw/device/cheriot/soundstream/soundstream.h
+++ b/sw/device/cheriot/soundstream/soundstream.h
@@ -21,7 +21,9 @@
 
 #include "encode.h"
 #include "i2s.h"
+#if DEVICE_EXISTS_mailbox
 #include "mailbox.h"
+#endif
 #include "ml_top.h"
 
 #endif  // EXAMPLES_SOUNDSTREAM_SOUNDSTREAM_H_
diff --git a/sw/device/cheriot/soundstream/xmake.lua b/sw/device/cheriot/soundstream/xmake.lua
index 0872683..a99ec77 100644
--- a/sw/device/cheriot/soundstream/xmake.lua
+++ b/sw/device/cheriot/soundstream/xmake.lua
@@ -41,6 +41,10 @@
 includes(path.join(sdkdir, "lib"))
 includes(path.join(sdkdir, "lib/freestanding"))
 
+local function is_sencha()
+    return is_config("board", "sencha")
+end
+
 -- Each driver operates in a compartment.
 compartment("i2s")
     add_files("i2s.cc")
@@ -49,12 +53,14 @@
     add_includedirs(matcha_dir, matcha_gen_dir, opentitan_dir)
     add_defines("CHERIOT_NO_AMBIENT_MALLOC")
 
+if is_sencha() then
 compartment("mailbox")
     add_files("mailbox.cc")
     add_files(path.join(dif_dir, "dif_tlul_mailbox.c"),
               path.join(dif_autogen_dir, "dif_tlul_mailbox_autogen.c"))
     add_includedirs(matcha_dir, matcha_gen_dir, opentitan_dir)
     add_defines("CHERIOT_NO_AMBIENT_MALLOC")
+end
 
 compartment("ml_top")
     add_files("ml_top.cc")
@@ -72,13 +78,17 @@
 
 -- Firmware image.
 firmware("soundstream-firmware")
-    add_deps("freestanding")
-    add_deps("debug", "i2s", "ml_top", "mailbox", "soundstream")
+    add_deps("i2s", "ml_top")
+    if is_sencha() then
+        add_deps("mailbox")
+    end
+    add_deps("soundstream")
+    add_deps("freestanding", "debug")
     on_load(function(target)
         target:values_set("board", "$(board)")
         -- NB: trusted_stack_frames is a guess; +1'd for any
         --     compartment error handler usage?
-        target:values_set("threads", {
+        local threads = {
             {
                 compartment = "soundstream",
                 priority = 1,
@@ -101,12 +111,15 @@
                 stack_size = 0x400, -- 512B
                 trusted_stack_frames = 3
             },
-            {
+        }
+        if is_sencha() then
+            table.insert(threads, {
                 compartment = "mailbox",
                 priority = 10,
                 entry_point = "mailbox_isr",
                 stack_size = 0x400, -- 512B
                 trusted_stack_frames = 3
-            }
-        }, {expand = false})
+            })
+        end
+        target:values_set("threads", threads, {expand = false})
     end)