diff --git a/epicardium/meson.build b/epicardium/meson.build
index 27848d2a2bef9a9f1996965687e479f9beb6fcb5..0f1cfddb7633a32f6e04e82e4c27d79a3d3c2155 100644
--- a/epicardium/meson.build
+++ b/epicardium/meson.build
@@ -61,13 +61,15 @@ freertos = static_library(
 #
 ##########################################################################
 
+subdir('modules/')
+
 elf = executable(
   name + '.elf',
   'cdcacm.c',
   'main.c',
   'serial.c',
   'support.c',
-  'modules/leds.c',
+  module_sources,
   dependencies: [libcard10, max32665_startup_core0, maxusb],
   link_with: [api_dispatcher_lib, freertos],
   link_whole: [max32665_startup_core0_lib, board_card10_lib],
diff --git a/epicardium/modules/meson.build b/epicardium/modules/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..8a8e39ba70ff203e751777471334165e57b5ed1a
--- /dev/null
+++ b/epicardium/modules/meson.build
@@ -0,0 +1,3 @@
+module_sources = files(
+  'leds.c',
+)