blob: 27d8b24f67ac80baa0f65565e156de539eb71257 [file] [log] [blame]
Damien George66098c02020-09-23 15:53:46 +10001# CMake fragment for MicroPython rules
2
Damien George66098c02020-09-23 15:53:46 +10003set(MICROPY_GENHDR_DIR "${CMAKE_BINARY_DIR}/genhdr")
4set(MICROPY_MPVERSION "${MICROPY_GENHDR_DIR}/mpversion.h")
Damien Georged867d202021-02-21 11:30:12 +11005set(MICROPY_QSTRDEFS_PY "${MICROPY_PY_DIR}/qstrdefs.h")
6set(MICROPY_QSTRDEFS_LAST "${MICROPY_GENHDR_DIR}/qstr.i.last")
7set(MICROPY_QSTRDEFS_SPLIT "${MICROPY_GENHDR_DIR}/qstr.split")
8set(MICROPY_QSTRDEFS_COLLECTED "${MICROPY_GENHDR_DIR}/qstrdefs.collected.h")
9set(MICROPY_QSTRDEFS_PREPROCESSED "${MICROPY_GENHDR_DIR}/qstrdefs.preprocessed.h")
10set(MICROPY_QSTRDEFS_GENERATED "${MICROPY_GENHDR_DIR}/qstrdefs.generated.h")
Damien George47f63432022-05-31 17:10:14 +100011set(MICROPY_MODULEDEFS_SPLIT "${MICROPY_GENHDR_DIR}/moduledefs.split")
12set(MICROPY_MODULEDEFS_COLLECTED "${MICROPY_GENHDR_DIR}/moduledefs.collected")
13set(MICROPY_MODULEDEFS "${MICROPY_GENHDR_DIR}/moduledefs.h")
David Lechnerfc3d7ae2022-07-01 12:29:08 -050014set(MICROPY_ROOT_POINTERS_SPLIT "${MICROPY_GENHDR_DIR}/root_pointers.split")
15set(MICROPY_ROOT_POINTERS_COLLECTED "${MICROPY_GENHDR_DIR}/root_pointers.collected")
16set(MICROPY_ROOT_POINTERS "${MICROPY_GENHDR_DIR}/root_pointers.h")
Damien Georgebb148992025-03-13 15:18:48 +110017set(MICROPY_COMPRESSED_SPLIT "${MICROPY_GENHDR_DIR}/compressed.split")
18set(MICROPY_COMPRESSED_COLLECTED "${MICROPY_GENHDR_DIR}/compressed.collected")
19set(MICROPY_COMPRESSED_DATA "${MICROPY_GENHDR_DIR}/compressed.data.h")
Damien George66098c02020-09-23 15:53:46 +100020
Jim Mussared3bf70f12023-10-10 16:50:28 +110021if(NOT MICROPY_PREVIEW_VERSION_2)
22 set(MICROPY_PREVIEW_VERSION_2 0)
23endif()
24
Damien Georgef5b45452025-03-02 23:52:13 +110025# Set the board name.
26if(MICROPY_BOARD)
27 if(MICROPY_BOARD_VARIANT)
28 set(MICROPY_BOARD_BUILD_NAME ${MICROPY_BOARD}-${MICROPY_BOARD_VARIANT})
29 else()
30 set(MICROPY_BOARD_BUILD_NAME ${MICROPY_BOARD})
31 endif()
32
33 target_compile_definitions(${MICROPY_TARGET} PRIVATE
34 MICROPY_BOARD_BUILD_NAME="${MICROPY_BOARD_BUILD_NAME}"
35 )
36endif()
37
Damien Georgebb148992025-03-13 15:18:48 +110038# Need to do this before extracting MICROPY_CPP_DEF below.
39if(MICROPY_ROM_TEXT_COMPRESSION)
40 target_compile_definitions(${MICROPY_TARGET} PUBLIC
41 MICROPY_ROM_TEXT_COMPRESSION=\(1\)
42 )
43endif()
44
Jim Mussaredd6d4a582021-12-11 23:01:58 +110045# Need to do this before extracting MICROPY_CPP_DEF below. Rest of frozen
46# manifest handling is at the end of this file.
47if(MICROPY_FROZEN_MANIFEST)
48 target_compile_definitions(${MICROPY_TARGET} PUBLIC
49 MICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
50 MICROPY_MODULE_FROZEN_MPY=\(1\)
51 )
52endif()
53
Jim Mussared3bf70f12023-10-10 16:50:28 +110054if(MICROPY_PREVIEW_VERSION_2)
55 target_compile_definitions(${MICROPY_TARGET} PUBLIC
56 MICROPY_PREVIEW_VERSION_2=\(1\)
57 )
58endif()
59
Damien George66098c02020-09-23 15:53:46 +100060# Provide defaults for preprocessor flags if not already defined
61if(NOT MICROPY_CPP_FLAGS)
62 get_target_property(MICROPY_CPP_INC ${MICROPY_TARGET} INCLUDE_DIRECTORIES)
63 get_target_property(MICROPY_CPP_DEF ${MICROPY_TARGET} COMPILE_DEFINITIONS)
64endif()
65
66# Compute MICROPY_CPP_FLAGS for preprocessor
67list(APPEND MICROPY_CPP_INC ${MICROPY_CPP_INC_EXTRA})
68list(APPEND MICROPY_CPP_DEF ${MICROPY_CPP_DEF_EXTRA})
69set(_prefix "-I")
70foreach(_arg ${MICROPY_CPP_INC})
71 list(APPEND MICROPY_CPP_FLAGS ${_prefix}${_arg})
72endforeach()
73set(_prefix "-D")
74foreach(_arg ${MICROPY_CPP_DEF})
75 list(APPEND MICROPY_CPP_FLAGS ${_prefix}${_arg})
76endforeach()
77list(APPEND MICROPY_CPP_FLAGS ${MICROPY_CPP_FLAGS_EXTRA})
78
Angus Gratton516709b2025-02-11 17:44:19 +110079# Include anything passed in via CFLAGS_EXTRA
80# in both MICROPY_CPP_FLAGS and CMAKE_C_FLAGS
81if(DEFINED ENV{CFLAGS_EXTRA})
82 set(CFLAGS_EXTRA $ENV{CFLAGS_EXTRA})
83 string(APPEND CMAKE_C_FLAGS " ${CFLAGS_EXTRA}") # ... not a list
84 separate_arguments(CFLAGS_EXTRA)
85 list(APPEND MICROPY_CPP_FLAGS ${CFLAGS_EXTRA}) # ... a list
86endif()
87
Damien George66098c02020-09-23 15:53:46 +100088find_package(Python3 REQUIRED COMPONENTS Interpreter)
89
90target_sources(${MICROPY_TARGET} PRIVATE
91 ${MICROPY_MPVERSION}
Damien Georged867d202021-02-21 11:30:12 +110092 ${MICROPY_QSTRDEFS_GENERATED}
Damien George47f63432022-05-31 17:10:14 +100093 ${MICROPY_MODULEDEFS}
David Lechnerfc3d7ae2022-07-01 12:29:08 -050094 ${MICROPY_ROOT_POINTERS}
Damien George66098c02020-09-23 15:53:46 +100095)
96
Damien Georgebb148992025-03-13 15:18:48 +110097if(MICROPY_ROM_TEXT_COMPRESSION)
98 target_sources(${MICROPY_TARGET} PRIVATE
99 ${MICROPY_COMPRESSED_DATA}
100 )
101endif()
102
Damien George66098c02020-09-23 15:53:46 +1000103# Command to force the build of another command
104
Damien George66098c02020-09-23 15:53:46 +1000105# Generate mpversion.h
106
Jim Mussared9848b062023-02-08 12:24:12 +1100107add_custom_target(
108 BUILD_VERSION_HEADER ALL
109 BYPRODUCTS ${MICROPY_MPVERSION}
Damien George66098c02020-09-23 15:53:46 +1000110 COMMAND ${CMAKE_COMMAND} -E make_directory ${MICROPY_GENHDR_DIR}
111 COMMAND ${Python3_EXECUTABLE} ${MICROPY_DIR}/py/makeversionhdr.py ${MICROPY_MPVERSION}
Damien George66098c02020-09-23 15:53:46 +1000112)
113
Damien George66098c02020-09-23 15:53:46 +1000114# Generate qstrs
115
116# If any of the dependencies in this rule change then the C-preprocessor step must be run.
117# It only needs to be passed the list of MICROPY_SOURCE_QSTR files that have changed since
118# it was last run, but it looks like it's not possible to specify that with cmake.
119add_custom_command(
Damien Georged867d202021-02-21 11:30:12 +1100120 OUTPUT ${MICROPY_QSTRDEFS_LAST}
Phil Howard0cf12dd2021-02-23 22:57:14 +0000121 COMMAND ${Python3_EXECUTABLE} ${MICROPY_PY_DIR}/makeqstrdefs.py pp ${CMAKE_C_COMPILER} -E output ${MICROPY_GENHDR_DIR}/qstr.i.last cflags ${MICROPY_CPP_FLAGS} -DNO_QSTR cxxflags ${MICROPY_CPP_FLAGS} -DNO_QSTR sources ${MICROPY_SOURCE_QSTR}
Damien George47f63432022-05-31 17:10:14 +1000122 DEPENDS ${MICROPY_MPVERSION}
Damien George66098c02020-09-23 15:53:46 +1000123 ${MICROPY_SOURCE_QSTR}
124 VERBATIM
Maureen Helmdff6fc62020-11-10 19:05:30 -0600125 COMMAND_EXPAND_LISTS
Damien George66098c02020-09-23 15:53:46 +1000126)
127
128add_custom_command(
Damien Georged867d202021-02-21 11:30:12 +1100129 OUTPUT ${MICROPY_QSTRDEFS_SPLIT}
Damien George66098c02020-09-23 15:53:46 +1000130 COMMAND ${Python3_EXECUTABLE} ${MICROPY_PY_DIR}/makeqstrdefs.py split qstr ${MICROPY_GENHDR_DIR}/qstr.i.last ${MICROPY_GENHDR_DIR}/qstr _
Damien Georged867d202021-02-21 11:30:12 +1100131 COMMAND touch ${MICROPY_QSTRDEFS_SPLIT}
132 DEPENDS ${MICROPY_QSTRDEFS_LAST}
Damien George66098c02020-09-23 15:53:46 +1000133 VERBATIM
Maureen Helmdff6fc62020-11-10 19:05:30 -0600134 COMMAND_EXPAND_LISTS
Damien George66098c02020-09-23 15:53:46 +1000135)
136
137add_custom_command(
Damien Georged867d202021-02-21 11:30:12 +1100138 OUTPUT ${MICROPY_QSTRDEFS_COLLECTED}
139 COMMAND ${Python3_EXECUTABLE} ${MICROPY_PY_DIR}/makeqstrdefs.py cat qstr _ ${MICROPY_GENHDR_DIR}/qstr ${MICROPY_QSTRDEFS_COLLECTED}
Trent Piepho0d933922023-11-28 14:26:59 -0800140 BYPRODUCTS "${MICROPY_QSTRDEFS_COLLECTED}.hash"
Damien Georged867d202021-02-21 11:30:12 +1100141 DEPENDS ${MICROPY_QSTRDEFS_SPLIT}
Damien George66098c02020-09-23 15:53:46 +1000142 VERBATIM
Maureen Helmdff6fc62020-11-10 19:05:30 -0600143 COMMAND_EXPAND_LISTS
Damien George66098c02020-09-23 15:53:46 +1000144)
145
146add_custom_command(
Damien Georged867d202021-02-21 11:30:12 +1100147 OUTPUT ${MICROPY_QSTRDEFS_PREPROCESSED}
Damien George2adf20c2021-02-21 11:32:00 +1100148 COMMAND cat ${MICROPY_QSTRDEFS_PY} ${MICROPY_QSTRDEFS_PORT} ${MICROPY_QSTRDEFS_COLLECTED} | sed "s/^Q(.*)/\"&\"/" | ${CMAKE_C_COMPILER} -E ${MICROPY_CPP_FLAGS} - | sed "s/^\\\"\\(Q(.*)\\)\\\"/\\1/" > ${MICROPY_QSTRDEFS_PREPROCESSED}
149 DEPENDS ${MICROPY_QSTRDEFS_PY}
150 ${MICROPY_QSTRDEFS_PORT}
151 ${MICROPY_QSTRDEFS_COLLECTED}
Damien George66098c02020-09-23 15:53:46 +1000152 VERBATIM
Maureen Helmdff6fc62020-11-10 19:05:30 -0600153 COMMAND_EXPAND_LISTS
Damien George66098c02020-09-23 15:53:46 +1000154)
155
156add_custom_command(
Damien Georged867d202021-02-21 11:30:12 +1100157 OUTPUT ${MICROPY_QSTRDEFS_GENERATED}
158 COMMAND ${Python3_EXECUTABLE} ${MICROPY_PY_DIR}/makeqstrdata.py ${MICROPY_QSTRDEFS_PREPROCESSED} > ${MICROPY_QSTRDEFS_GENERATED}
159 DEPENDS ${MICROPY_QSTRDEFS_PREPROCESSED}
Damien George66098c02020-09-23 15:53:46 +1000160 VERBATIM
Maureen Helmdff6fc62020-11-10 19:05:30 -0600161 COMMAND_EXPAND_LISTS
Damien George66098c02020-09-23 15:53:46 +1000162)
163
Damien George47f63432022-05-31 17:10:14 +1000164# Generate moduledefs.h
165
166add_custom_command(
167 OUTPUT ${MICROPY_MODULEDEFS_SPLIT}
168 COMMAND ${Python3_EXECUTABLE} ${MICROPY_PY_DIR}/makeqstrdefs.py split module ${MICROPY_GENHDR_DIR}/qstr.i.last ${MICROPY_GENHDR_DIR}/module _
169 COMMAND touch ${MICROPY_MODULEDEFS_SPLIT}
170 DEPENDS ${MICROPY_QSTRDEFS_LAST}
171 VERBATIM
172 COMMAND_EXPAND_LISTS
173)
174
175add_custom_command(
176 OUTPUT ${MICROPY_MODULEDEFS_COLLECTED}
177 COMMAND ${Python3_EXECUTABLE} ${MICROPY_PY_DIR}/makeqstrdefs.py cat module _ ${MICROPY_GENHDR_DIR}/module ${MICROPY_MODULEDEFS_COLLECTED}
Trent Piepho0d933922023-11-28 14:26:59 -0800178 BYPRODUCTS "${MICROPY_MODULEDEFS_COLLECTED}.hash"
Damien George47f63432022-05-31 17:10:14 +1000179 DEPENDS ${MICROPY_MODULEDEFS_SPLIT}
180 VERBATIM
181 COMMAND_EXPAND_LISTS
182)
183
184add_custom_command(
185 OUTPUT ${MICROPY_MODULEDEFS}
186 COMMAND ${Python3_EXECUTABLE} ${MICROPY_PY_DIR}/makemoduledefs.py ${MICROPY_MODULEDEFS_COLLECTED} > ${MICROPY_MODULEDEFS}
187 DEPENDS ${MICROPY_MODULEDEFS_COLLECTED}
188)
189
David Lechnerfc3d7ae2022-07-01 12:29:08 -0500190# Generate root_pointers.h
191
192add_custom_command(
193 OUTPUT ${MICROPY_ROOT_POINTERS_SPLIT}
194 COMMAND ${Python3_EXECUTABLE} ${MICROPY_PY_DIR}/makeqstrdefs.py split root_pointer ${MICROPY_GENHDR_DIR}/qstr.i.last ${MICROPY_GENHDR_DIR}/root_pointer _
195 COMMAND touch ${MICROPY_ROOT_POINTERS_SPLIT}
196 DEPENDS ${MICROPY_QSTRDEFS_LAST}
197 VERBATIM
198 COMMAND_EXPAND_LISTS
199)
200
201add_custom_command(
202 OUTPUT ${MICROPY_ROOT_POINTERS_COLLECTED}
203 COMMAND ${Python3_EXECUTABLE} ${MICROPY_PY_DIR}/makeqstrdefs.py cat root_pointer _ ${MICROPY_GENHDR_DIR}/root_pointer ${MICROPY_ROOT_POINTERS_COLLECTED}
Trent Piepho0d933922023-11-28 14:26:59 -0800204 BYPRODUCTS "${MICROPY_ROOT_POINTERS_COLLECTED}.hash"
David Lechnerfc3d7ae2022-07-01 12:29:08 -0500205 DEPENDS ${MICROPY_ROOT_POINTERS_SPLIT}
206 VERBATIM
207 COMMAND_EXPAND_LISTS
208)
209
210add_custom_command(
211 OUTPUT ${MICROPY_ROOT_POINTERS}
212 COMMAND ${Python3_EXECUTABLE} ${MICROPY_PY_DIR}/make_root_pointers.py ${MICROPY_ROOT_POINTERS_COLLECTED} > ${MICROPY_ROOT_POINTERS}
213 DEPENDS ${MICROPY_ROOT_POINTERS_COLLECTED} ${MICROPY_PY_DIR}/make_root_pointers.py
214)
215
Damien Georgebb148992025-03-13 15:18:48 +1100216# Generate compressed.data.h
217
218add_custom_command(
219 OUTPUT ${MICROPY_COMPRESSED_SPLIT}
220 COMMAND ${Python3_EXECUTABLE} ${MICROPY_PY_DIR}/makeqstrdefs.py split compress ${MICROPY_QSTRDEFS_LAST} ${MICROPY_GENHDR_DIR}/compress _
221 COMMAND touch ${MICROPY_COMPRESSED_SPLIT}
222 DEPENDS ${MICROPY_QSTRDEFS_LAST}
223 VERBATIM
224 COMMAND_EXPAND_LISTS
225)
226
227add_custom_command(
228 OUTPUT ${MICROPY_COMPRESSED_COLLECTED}
229 COMMAND ${Python3_EXECUTABLE} ${MICROPY_PY_DIR}/makeqstrdefs.py cat compress _ ${MICROPY_GENHDR_DIR}/compress ${MICROPY_COMPRESSED_COLLECTED}
230 BYPRODUCTS "${MICROPY_COMPRESSED_COLLECTED}.hash"
231 DEPENDS ${MICROPY_COMPRESSED_SPLIT}
232 VERBATIM
233 COMMAND_EXPAND_LISTS
234)
235
236add_custom_command(
237 OUTPUT ${MICROPY_COMPRESSED_DATA}
238 COMMAND ${Python3_EXECUTABLE} ${MICROPY_PY_DIR}/makecompresseddata.py ${MICROPY_COMPRESSED_COLLECTED} > ${MICROPY_COMPRESSED_DATA}
239 DEPENDS ${MICROPY_COMPRESSED_COLLECTED} ${MICROPY_PY_DIR}/makecompresseddata.py
240)
241
Damien George66098c02020-09-23 15:53:46 +1000242# Build frozen code if enabled
243
244if(MICROPY_FROZEN_MANIFEST)
245 set(MICROPY_FROZEN_CONTENT "${CMAKE_BINARY_DIR}/frozen_content.c")
246
247 target_sources(${MICROPY_TARGET} PRIVATE
248 ${MICROPY_FROZEN_CONTENT}
249 )
250
Jim Mussaredd6d4a582021-12-11 23:01:58 +1100251 # Note: target_compile_definitions already added earlier.
Damien George66098c02020-09-23 15:53:46 +1000252
Damien Georgee61ac452021-05-22 22:09:25 +1000253 if(NOT MICROPY_LIB_DIR)
Angus Grattoncccac2c2025-03-11 17:17:39 +1100254 list(APPEND GIT_SUBMODULES lib/micropython-lib)
Jim Mussared579f3302022-07-08 15:00:33 +1000255 set(MICROPY_LIB_DIR ${MICROPY_DIR}/lib/micropython-lib)
256 endif()
257
Angus Grattoncccac2c2025-03-11 17:17:39 +1100258 if(NOT UPDATE_SUBMODULES AND NOT EXISTS ${MICROPY_LIB_DIR}/README.md)
Jim Mussared579f3302022-07-08 15:00:33 +1000259 message(FATAL_ERROR " micropython-lib not initialized.\n Run 'make BOARD=${MICROPY_BOARD} submodules'")
Damien Georgee61ac452021-05-22 22:09:25 +1000260 endif()
261
Damien George78718ff2021-08-03 22:30:15 +1000262 # If MICROPY_MPYCROSS is not explicitly defined in the environment (which
263 # is what makemanifest.py will use) then create an mpy-cross dependency
264 # to automatically build mpy-cross if needed.
265 set(MICROPY_MPYCROSS $ENV{MICROPY_MPYCROSS})
266 if(NOT MICROPY_MPYCROSS)
Daniel Jour47c84282022-08-02 23:48:41 +0200267 set(MICROPY_MPYCROSS_DEPENDENCY ${MICROPY_DIR}/mpy-cross/build/mpy-cross)
Damien George78718ff2021-08-03 22:30:15 +1000268 if(NOT MICROPY_MAKE_EXECUTABLE)
269 set(MICROPY_MAKE_EXECUTABLE make)
270 endif()
271 add_custom_command(
272 OUTPUT ${MICROPY_MPYCROSS_DEPENDENCY}
Andrew Leechb603fa32025-02-03 16:03:22 +1100273 COMMAND ${MICROPY_MAKE_EXECUTABLE} -C ${MICROPY_DIR}/mpy-cross USER_C_MODULES=
Damien George78718ff2021-08-03 22:30:15 +1000274 )
275 endif()
276
Alessandro Gatti95ce61d2023-10-31 13:28:25 +0100277 if(NOT MICROPY_CROSS_FLAGS)
278 set(MICROPY_CROSS_FLAGS "")
279 else()
280 set(MICROPY_CROSS_FLAGS "-f${MICROPY_CROSS_FLAGS}")
281 endif()
282
Jim Mussared992cd642023-11-09 17:57:40 +1100283 # Set default path variables to be passed to makemanifest.py. These will
284 # be available in path substitutions. Additional variables can be set
285 # per-board in mpconfigboard.cmake.
286 set(MICROPY_MANIFEST_PORT_DIR ${MICROPY_PORT_DIR})
287 set(MICROPY_MANIFEST_BOARD_DIR ${MICROPY_BOARD_DIR})
288 set(MICROPY_MANIFEST_MPY_DIR ${MICROPY_DIR})
289 set(MICROPY_MANIFEST_MPY_LIB_DIR ${MICROPY_LIB_DIR})
290
291 # Find all MICROPY_MANIFEST_* variables and turn them into command line arguments.
292 get_cmake_property(_manifest_vars VARIABLES)
293 list(FILTER _manifest_vars INCLUDE REGEX "MICROPY_MANIFEST_.*")
294 foreach(_manifest_var IN LISTS _manifest_vars)
295 list(APPEND _manifest_var_args "-v")
296 string(REGEX REPLACE "MICROPY_MANIFEST_(.*)" "\\1" _manifest_var_name ${_manifest_var})
297 list(APPEND _manifest_var_args "${_manifest_var_name}=${${_manifest_var}}")
298 endforeach()
299
Jim Mussared9848b062023-02-08 12:24:12 +1100300 add_custom_target(
301 BUILD_FROZEN_CONTENT ALL
302 BYPRODUCTS ${MICROPY_FROZEN_CONTENT}
Jim Mussared992cd642023-11-09 17:57:40 +1100303 COMMAND ${Python3_EXECUTABLE} ${MICROPY_DIR}/tools/makemanifest.py -o ${MICROPY_FROZEN_CONTENT} ${_manifest_var_args} -b "${CMAKE_BINARY_DIR}" ${MICROPY_CROSS_FLAGS} --mpy-tool-flags=${MICROPY_MPY_TOOL_FLAGS} ${MICROPY_FROZEN_MANIFEST}
Jim Mussared9848b062023-02-08 12:24:12 +1100304 DEPENDS
Damien Georged867d202021-02-21 11:30:12 +1100305 ${MICROPY_QSTRDEFS_GENERATED}
David Lechnerfc3d7ae2022-07-01 12:29:08 -0500306 ${MICROPY_ROOT_POINTERS}
Damien George78718ff2021-08-03 22:30:15 +1000307 ${MICROPY_MPYCROSS_DEPENDENCY}
Damien George66098c02020-09-23 15:53:46 +1000308 VERBATIM
309 )
310endif()
Andrew Leech7d9cc692022-04-29 05:49:20 +1000311
Angus Grattoncccac2c2025-03-11 17:17:39 +1100312# Update submodules, this is invoked on some ports via 'make submodules'.
313#
314# Note: This logic has a Makefile equivalent in py/mkrules.mk
315if(UPDATE_SUBMODULES AND GIT_SUBMODULES)
316 macro(run_git)
317 execute_process(COMMAND git ${ARGV} WORKING_DIRECTORY ${MICROPY_DIR}
318 RESULT_VARIABLE RES)
319 endmacro()
320
321 list(JOIN GIT_SUBMODULES " " GIT_SUBMODULES_MSG)
322 message("Updating submodules: ${GIT_SUBMODULES_MSG}")
323 run_git(submodule sync ${GIT_SUBMODULES})
324 if(RES EQUAL 0)
325 # If available, do blobless partial clones of submodules to save time and space.
326 # A blobless partial clone lazily fetches data as needed, but has all the metadata available (tags, etc.).
327 run_git(submodule update --init --filter=blob:none ${GIT_SUBMODULES})
328 # Fallback to standard submodule update if blobless isn't available (earlier than git 2.36.0)
329 if (NOT RES EQUAL 0)
330 run_git(submodule update --init ${GIT_SUBMODULES})
331 endif()
332 endif()
333
334 if (NOT RES EQUAL 0)
335 message(FATAL_ERROR "Submodule update failed")
336 endif()
Andrew Leech7d9cc692022-04-29 05:49:20 +1000337endif()