Skip to content

Commit 9242c30

Browse files
CopilotJohnAmadis
andcommitted
Add manifest support for extra flash.dmd and sdcard.dmd files
Co-authored-by: JohnAmadis <17320783+JohnAmadis@users.noreply.github.com>
1 parent eb4d9c5 commit 9242c30

3 files changed

Lines changed: 94 additions & 22 deletions

File tree

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ set(USER_DATA_FILE "" CACHE FILEPATH "Optional user_data file to embed in ROM")
1313
set(DMBOOT_CONFIG_DIR "${CMAKE_BINARY_DIR}/configs" CACHE PATH "Config directory to mount as /configs/ using dmffs (defaults to build/configs)")
1414
set(DMBOOT_MAIN_MODULE "dmell" CACHE STRING "Name of the main module to start after boot")
1515
set(DMBOOT_EXTRA_FLASH_DMD_FILES "" CACHE STRING "Additional flash.dmd files to include (semicolon-separated list of absolute paths)")
16+
set(DMBOOT_EXTRA_FLASH_DMD_MANIFESTS "" CACHE STRING "Manifests for extra flash.dmd files (semicolon-separated list of manifest paths/URLs, one per extra flash.dmd file)")
1617
set(DMBOOT_EXTRA_SDCARD_DMD_FILES "" CACHE STRING "Additional sdcard.dmd files to include (semicolon-separated list of absolute paths)")
18+
set(DMBOOT_EXTRA_SDCARD_DMD_MANIFESTS "" CACHE STRING "Manifests for extra sdcard.dmd files (semicolon-separated list of manifest paths/URLs, one per extra sdcard.dmd file)")
1719
option(DMBOOT_EMULATION "Enable Renode emulation mode" OFF)
1820

1921
# ======================================================================

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ cmake --build build
4646
- `STARTUP_DMP_FILE` (optional) - Path to a startup package file (`.dmp`) that will be automatically loaded using `Dmod_AddPackageBuffer` at boot
4747
- `USER_DATA_FILE` (optional) - Path to a user data file that will be embedded in ROM, with its address and size available via environment variables `USER_DATA_ADDR` and `USER_DATA_SIZE`
4848
- `DMBOOT_CONFIG_DIR` (optional, defaults to `build/configs`) - Path to a directory that will be converted to a dmffs filesystem image and mounted at `/configs/` at boot time. By default, configuration files from `modules.dmd` are downloaded to this directory.
49+
- `DMBOOT_EXTRA_FLASH_DMD_FILES` (optional) - Semicolon-separated list of additional `flash.dmd` files. Each file adds more flash modules to download at build time.
50+
- `DMBOOT_EXTRA_FLASH_DMD_MANIFESTS` (optional) - Semicolon-separated list of manifest paths/URLs (one per extra flash.dmd file). Use this to specify a custom manifest for each extra flash.dmd file.
51+
- `DMBOOT_EXTRA_SDCARD_DMD_FILES` (optional) - Semicolon-separated list of additional `sdcard.dmd` files. Each file adds more sdcard modules to download at build time.
52+
- `DMBOOT_EXTRA_SDCARD_DMD_MANIFESTS` (optional) - Semicolon-separated list of manifest paths/URLs (one per extra sdcard.dmd file). Use this to specify a custom manifest for each extra sdcard.dmd file.
4953
- `DMBOOT_EMULATION` (optional) - Enable Renode simulation mode instead of hardware mode
5054

5155
**Automatic Build-Time Embedding:**

modules/CMakeLists.txt

Lines changed: 88 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,27 @@ if(BOARD)
2424
endif()
2525

2626
# Extra flash modules from cmake parameter
27-
foreach(_EXTRA_FLASH_DMD IN LISTS DMBOOT_EXTRA_FLASH_DMD_FILES)
28-
if(EXISTS "${_EXTRA_FLASH_DMD}")
29-
list(APPEND DMBOOT_FLASH_DMD_FILES "${_EXTRA_FLASH_DMD}")
30-
else()
31-
message(WARNING "Extra flash.dmd file not found: ${_EXTRA_FLASH_DMD}")
32-
endif()
33-
endforeach()
27+
set(_EXTRA_FLASH_DMD_VALID_FILES "")
28+
set(_EXTRA_FLASH_DMD_VALID_MANIFESTS "")
29+
list(LENGTH DMBOOT_EXTRA_FLASH_DMD_FILES _EXTRA_FLASH_COUNT)
30+
if(_EXTRA_FLASH_COUNT GREATER 0)
31+
math(EXPR _EXTRA_FLASH_LAST "${_EXTRA_FLASH_COUNT} - 1")
32+
foreach(_IDX RANGE 0 ${_EXTRA_FLASH_LAST})
33+
list(GET DMBOOT_EXTRA_FLASH_DMD_FILES ${_IDX} _EXTRA_FLASH_DMD)
34+
if(EXISTS "${_EXTRA_FLASH_DMD}")
35+
list(APPEND _EXTRA_FLASH_DMD_VALID_FILES "${_EXTRA_FLASH_DMD}")
36+
list(LENGTH DMBOOT_EXTRA_FLASH_DMD_MANIFESTS _FLASH_MANIFEST_COUNT)
37+
if(_IDX LESS _FLASH_MANIFEST_COUNT)
38+
list(GET DMBOOT_EXTRA_FLASH_DMD_MANIFESTS ${_IDX} _EXTRA_FLASH_MANIFEST)
39+
else()
40+
set(_EXTRA_FLASH_MANIFEST "")
41+
endif()
42+
list(APPEND _EXTRA_FLASH_DMD_VALID_MANIFESTS "${_EXTRA_FLASH_MANIFEST}")
43+
else()
44+
message(WARNING "Extra flash.dmd file not found: ${_EXTRA_FLASH_DMD}")
45+
endif()
46+
endforeach()
47+
endif()
3448

3549
# ======================================================================
3650
# Collecting sdcard.dmd files (common + MCU + board)
@@ -58,13 +72,27 @@ if(BOARD)
5872
endif()
5973

6074
# Extra sdcard modules from cmake parameter
61-
foreach(_EXTRA_SDCARD_DMD IN LISTS DMBOOT_EXTRA_SDCARD_DMD_FILES)
62-
if(EXISTS "${_EXTRA_SDCARD_DMD}")
63-
list(APPEND DMBOOT_SDCARD_DMD_FILES "${_EXTRA_SDCARD_DMD}")
64-
else()
65-
message(WARNING "Extra sdcard.dmd file not found: ${_EXTRA_SDCARD_DMD}")
66-
endif()
67-
endforeach()
75+
set(_EXTRA_SDCARD_DMD_VALID_FILES "")
76+
set(_EXTRA_SDCARD_DMD_VALID_MANIFESTS "")
77+
list(LENGTH DMBOOT_EXTRA_SDCARD_DMD_FILES _EXTRA_SDCARD_COUNT)
78+
if(_EXTRA_SDCARD_COUNT GREATER 0)
79+
math(EXPR _EXTRA_SDCARD_LAST "${_EXTRA_SDCARD_COUNT} - 1")
80+
foreach(_IDX RANGE 0 ${_EXTRA_SDCARD_LAST})
81+
list(GET DMBOOT_EXTRA_SDCARD_DMD_FILES ${_IDX} _EXTRA_SDCARD_DMD)
82+
if(EXISTS "${_EXTRA_SDCARD_DMD}")
83+
list(APPEND _EXTRA_SDCARD_DMD_VALID_FILES "${_EXTRA_SDCARD_DMD}")
84+
list(LENGTH DMBOOT_EXTRA_SDCARD_DMD_MANIFESTS _SDCARD_MANIFEST_COUNT)
85+
if(_IDX LESS _SDCARD_MANIFEST_COUNT)
86+
list(GET DMBOOT_EXTRA_SDCARD_DMD_MANIFESTS ${_IDX} _EXTRA_SDCARD_MANIFEST)
87+
else()
88+
set(_EXTRA_SDCARD_MANIFEST "")
89+
endif()
90+
list(APPEND _EXTRA_SDCARD_DMD_VALID_MANIFESTS "${_EXTRA_SDCARD_MANIFEST}")
91+
else()
92+
message(WARNING "Extra sdcard.dmd file not found: ${_EXTRA_SDCARD_DMD}")
93+
endif()
94+
endforeach()
95+
endif()
6896

6997
# ======================================================================
7098
# Downloading modules from DMD
@@ -77,7 +105,7 @@ endif()
77105
set(DMBOOT_MODULES_OUT_DIR "${CMAKE_BINARY_DIR}/dmf")
78106
set(DMBOOT_MODULES_MARKER_FILE "${DMBOOT_MODULES_OUT_DIR}/.download_complete")
79107

80-
if(DMBOOT_FLASH_DMD_FILES)
108+
if(DMBOOT_FLASH_DMD_FILES OR _EXTRA_FLASH_DMD_VALID_FILES)
81109
# Build a sequence of download commands, one per flash.dmd file
82110
set(_FLASH_DOWNLOAD_COMMANDS
83111
COMMAND ${CMAKE_COMMAND} -E make_directory "${DMBOOT_MODULES_OUT_DIR}"
@@ -88,21 +116,40 @@ if(DMBOOT_FLASH_DMD_FILES)
88116
COMMAND ${DMF_GET} -d "${_DMD_FILE}" -o "${DMBOOT_MODULES_OUT_DIR}" -t "${DMOD_TOOLS_NAME}" --cpu-family "${DMBOOT_MCU_SERIES}" -y --type dmf --config-dir "${DMBOOT_CONFIG_DIR}"
89117
)
90118
endforeach()
119+
list(LENGTH _EXTRA_FLASH_DMD_VALID_FILES _EXTRA_FLASH_VALID_COUNT)
120+
if(_EXTRA_FLASH_VALID_COUNT GREATER 0)
121+
math(EXPR _EXTRA_FLASH_VALID_LAST "${_EXTRA_FLASH_VALID_COUNT} - 1")
122+
foreach(_IDX RANGE 0 ${_EXTRA_FLASH_VALID_LAST})
123+
list(GET _EXTRA_FLASH_DMD_VALID_FILES ${_IDX} _DMD_FILE)
124+
list(GET _EXTRA_FLASH_DMD_VALID_MANIFESTS ${_IDX} _MANIFEST)
125+
if(_MANIFEST)
126+
list(APPEND _FLASH_DOWNLOAD_COMMANDS
127+
COMMAND ${CMAKE_COMMAND} -E echo "Downloading flash modules from ${_DMD_FILE} (manifest: ${_MANIFEST})..."
128+
COMMAND ${DMF_GET} -d "${_DMD_FILE}" -m "${_MANIFEST}" -o "${DMBOOT_MODULES_OUT_DIR}" -t "${DMOD_TOOLS_NAME}" --cpu-family "${DMBOOT_MCU_SERIES}" -y --type dmf --config-dir "${DMBOOT_CONFIG_DIR}"
129+
)
130+
else()
131+
list(APPEND _FLASH_DOWNLOAD_COMMANDS
132+
COMMAND ${CMAKE_COMMAND} -E echo "Downloading flash modules from ${_DMD_FILE}..."
133+
COMMAND ${DMF_GET} -d "${_DMD_FILE}" -o "${DMBOOT_MODULES_OUT_DIR}" -t "${DMOD_TOOLS_NAME}" --cpu-family "${DMBOOT_MCU_SERIES}" -y --type dmf --config-dir "${DMBOOT_CONFIG_DIR}"
134+
)
135+
endif()
136+
endforeach()
137+
endif()
91138
list(APPEND _FLASH_DOWNLOAD_COMMANDS
92139
COMMAND ${CMAKE_COMMAND} -E touch "${DMBOOT_MODULES_MARKER_FILE}"
93140
)
94141

95142
add_custom_command(
96143
OUTPUT "${DMBOOT_MODULES_MARKER_FILE}"
97144
${_FLASH_DOWNLOAD_COMMANDS}
98-
DEPENDS ${DMBOOT_FLASH_DMD_FILES}
99-
COMMENT "Downloading flash modules from: ${DMBOOT_FLASH_DMD_FILES}"
145+
DEPENDS ${DMBOOT_FLASH_DMD_FILES} ${_EXTRA_FLASH_DMD_VALID_FILES}
146+
COMMENT "Downloading flash modules from: ${DMBOOT_FLASH_DMD_FILES} ${_EXTRA_FLASH_DMD_VALID_FILES}"
100147
VERBATIM
101148
)
102149
add_custom_target(download_modules ALL
103150
DEPENDS "${DMBOOT_MODULES_MARKER_FILE}"
104151
)
105-
message(STATUS "Flash DMD files: ${DMBOOT_FLASH_DMD_FILES}")
152+
message(STATUS "Flash DMD files: ${DMBOOT_FLASH_DMD_FILES} ${_EXTRA_FLASH_DMD_VALID_FILES}")
106153
else()
107154
message(WARNING "No flash.dmd files found. Skipping flash module download.")
108155
add_custom_target(download_modules ALL)
@@ -114,7 +161,7 @@ endif()
114161
set(DMBOOT_SDCARD_OUT_DIR "${CMAKE_BINARY_DIR}/sdcard")
115162
set(DMBOOT_SDCARD_MARKER_FILE "${DMBOOT_SDCARD_OUT_DIR}/.download_complete")
116163

117-
if(DMBOOT_SDCARD_DMD_FILES)
164+
if(DMBOOT_SDCARD_DMD_FILES OR _EXTRA_SDCARD_DMD_VALID_FILES)
118165
set(_SDCARD_DOWNLOAD_COMMANDS
119166
COMMAND ${CMAKE_COMMAND} -E make_directory "${DMBOOT_SDCARD_OUT_DIR}"
120167
)
@@ -124,21 +171,40 @@ if(DMBOOT_SDCARD_DMD_FILES)
124171
COMMAND ${DMF_GET} -d "${_DMD_FILE}" -o "${DMBOOT_SDCARD_OUT_DIR}" -t "${DMOD_TOOLS_NAME}" --cpu-family "${DMBOOT_MCU_SERIES}" -y --type dmf --config-dir "${DMBOOT_CONFIG_DIR}"
125172
)
126173
endforeach()
174+
list(LENGTH _EXTRA_SDCARD_DMD_VALID_FILES _EXTRA_SDCARD_VALID_COUNT)
175+
if(_EXTRA_SDCARD_VALID_COUNT GREATER 0)
176+
math(EXPR _EXTRA_SDCARD_VALID_LAST "${_EXTRA_SDCARD_VALID_COUNT} - 1")
177+
foreach(_IDX RANGE 0 ${_EXTRA_SDCARD_VALID_LAST})
178+
list(GET _EXTRA_SDCARD_DMD_VALID_FILES ${_IDX} _DMD_FILE)
179+
list(GET _EXTRA_SDCARD_DMD_VALID_MANIFESTS ${_IDX} _MANIFEST)
180+
if(_MANIFEST)
181+
list(APPEND _SDCARD_DOWNLOAD_COMMANDS
182+
COMMAND ${CMAKE_COMMAND} -E echo "Downloading sdcard modules from ${_DMD_FILE} (manifest: ${_MANIFEST})..."
183+
COMMAND ${DMF_GET} -d "${_DMD_FILE}" -m "${_MANIFEST}" -o "${DMBOOT_SDCARD_OUT_DIR}" -t "${DMOD_TOOLS_NAME}" --cpu-family "${DMBOOT_MCU_SERIES}" -y --type dmf --config-dir "${DMBOOT_CONFIG_DIR}"
184+
)
185+
else()
186+
list(APPEND _SDCARD_DOWNLOAD_COMMANDS
187+
COMMAND ${CMAKE_COMMAND} -E echo "Downloading sdcard modules from ${_DMD_FILE}..."
188+
COMMAND ${DMF_GET} -d "${_DMD_FILE}" -o "${DMBOOT_SDCARD_OUT_DIR}" -t "${DMOD_TOOLS_NAME}" --cpu-family "${DMBOOT_MCU_SERIES}" -y --type dmf --config-dir "${DMBOOT_CONFIG_DIR}"
189+
)
190+
endif()
191+
endforeach()
192+
endif()
127193
list(APPEND _SDCARD_DOWNLOAD_COMMANDS
128194
COMMAND ${CMAKE_COMMAND} -E touch "${DMBOOT_SDCARD_MARKER_FILE}"
129195
)
130196

131197
add_custom_command(
132198
OUTPUT "${DMBOOT_SDCARD_MARKER_FILE}"
133199
${_SDCARD_DOWNLOAD_COMMANDS}
134-
DEPENDS ${DMBOOT_SDCARD_DMD_FILES}
135-
COMMENT "Downloading sdcard modules from: ${DMBOOT_SDCARD_DMD_FILES}"
200+
DEPENDS ${DMBOOT_SDCARD_DMD_FILES} ${_EXTRA_SDCARD_DMD_VALID_FILES}
201+
COMMENT "Downloading sdcard modules from: ${DMBOOT_SDCARD_DMD_FILES} ${_EXTRA_SDCARD_DMD_VALID_FILES}"
136202
VERBATIM
137203
)
138204
add_custom_target(download_sdcard_modules ALL
139205
DEPENDS "${DMBOOT_SDCARD_MARKER_FILE}"
140206
)
141-
message(STATUS "Sdcard DMD files: ${DMBOOT_SDCARD_DMD_FILES}")
207+
message(STATUS "Sdcard DMD files: ${DMBOOT_SDCARD_DMD_FILES} ${_EXTRA_SDCARD_DMD_VALID_FILES}")
142208
else()
143209
message(STATUS "No sdcard.dmd files found. Skipping sdcard module download.")
144210
add_custom_target(download_sdcard_modules ALL)

0 commit comments

Comments
 (0)