bancha: package the soundstream model for loading from SPI

Bypass-Presubmit-Reason: checked as part of topic

Change-Id: I887f2e0461a140a92aeec0957c8c7ef7462e7ce8
diff --git a/platforms/bancha/cantrip_builtins.mk b/platforms/bancha/cantrip_builtins.mk
index f85e941..40b8afa 100644
--- a/platforms/bancha/cantrip_builtins.mk
+++ b/platforms/bancha/cantrip_builtins.mk
@@ -15,7 +15,13 @@
 # Placeholder until the top-level cantrip_builtins.mk is cleaned up.
 
 CANTRIP_APPS_RELEASE  :=
+# Builtins are loaded from SPI flash which is 16M by default
+ifneq ("$(wildcard $(ROOTDIR)/ml/ml-models)", "")
+CANTRIP_MODEL_RELEASE := $(OUT)/kelvin/sw/bazel_out/soundstream_encoder_non_streaming.elf
+else
+# TODO(sleffler): fallback to IREE version
 CANTRIP_MODEL_RELEASE :=
+endif
 
 CANTRIP_APPS_DEBUG    :=
 CANTRIP_MODEL_DEBUG   :=
diff --git a/platforms/bancha/sim.mk b/platforms/bancha/sim.mk
index 5da3432..5c0dab2 100644
--- a/platforms/bancha/sim.mk
+++ b/platforms/bancha/sim.mk
@@ -65,11 +65,15 @@
 	tar -C $(TMP_DEBUG) -cvhf $@ matcha-tock-bundle.bin kernel
 ext_flash_debug: $(EXT_FLASH_DEBUG)
 
-$(EXT_FLASH_RELEASE): $(CHERIOT_FIRMWARE_RELEASE) | $(TMP_RELEASE)
+$(EXT_FLASH_RELEASE): $(CHERIOT_FIRMWARE_RELEASE) ${CANTRIP_MODEL_RELEASE} | $(TMP_RELEASE)
 	cp -f $(CHERIOT_FIRMWARE_RELEASE) $(TMP_RELEASE)/cheriot-firmware
 	${C_PREFIX}strip $(TMP_RELEASE)/cheriot-firmware
 	${C_PREFIX}objcopy -O binary -g $(TMP_RELEASE)/cheriot-firmware $(TMP_RELEASE)/cheriot-firmware.bin
 	tar -C $(TMP_RELEASE) -cvhf $@ cheriot-firmware.bin
+	if [[ -f "${CANTRIP_MODEL_RELEASE}" ]]; then \
+		${C_PREFIX}objcopy -O binary -g ${CANTRIP_MODEL_RELEASE} $(TMP_RELEASE)/kelvin.bin; \
+		tar -C $(TMP_RELEASE) -uvf $@ kelvin.bin; \
+	fi
 ext_flash_release: $(EXT_FLASH_RELEASE)
 
 # Renode commands to issue before the initial start of a simulation.