CMakeLists.txt
1 if(CONFIG_COMPONENT_MICROPYTHON_ENABLE) 2 set(mpy_component_name "micropython") 3 get_filename_component(mpy_dir ${CMAKE_CURRENT_LIST_FILE} DIRECTORY) 4 set(mpy_core_dir "${mpy_dir}/core") 5 set(mpy_core_src_dir "${mpy_core_dir}/py") 6 set(mpy_port_dir "${mpy_dir}/port") 7 set(mpy_build_dir "${CMAKE_BINARY_DIR}/micropython") 8 set(mpy_build_gen_header_dir "${mpy_build_dir}/genhdr") 9 10 if(IS_DIRECTORY ${CONFIG_BUILTIN_PY_DIR}) 11 set(mpy_frozen_py_dir ${CONFIG_BUILTIN_PY_DIR}) 12 else() 13 set(mpy_frozen_py_dir "${mpy_port_dir}/builtin_py") 14 endif() 15 message(STATUS "builtin py dir: ${mpy_frozen_py_dir}") 16 set(mpy_build_mpy_dir "${mpy_build_dir}/mpy") 17 set(lvgl_build_dir "${mpy_build_dir}/port/lvgl") 18 set(lodepng_build_dir "${mpy_build_dir}/port/lodepng") 19 set(components_requirements kendryte_sdk drivers boards utils spiffs) 20 21 ################# Add include ################# 22 list(APPEND ADD_INCLUDE "${mpy_core_dir}" 23 "${mpy_core_src_dir}" 24 "${mpy_core_dir}/lib/oofatfs" 25 "${mpy_core_dir}/lib/mp-readline" 26 "${mpy_core_dir}/lib/utils" 27 "${mpy_core_dir}/lib/netutils" 28 "${mpy_core_dir}/lib/timeutils" 29 "${mpy_port_dir}/include" 30 "${mpy_port_dir}/src/audio/include" 31 "${mpy_port_dir}/src/audio/wav/include" 32 "${mpy_port_dir}/src/Maix/include" 33 "${mpy_port_dir}/src/modules/include" 34 "${mpy_port_dir}/src/modules/ultrasonic/include" 35 "${mpy_port_dir}/src/speech/include" 36 "${mpy_port_dir}/src/speech/maix_asr/include" 37 "${mpy_port_dir}/src/speech/isolated_word/include" 38 "${mpy_port_dir}/src/omv/include" 39 "${mpy_port_dir}/src/omv/boards/MAIX" 40 "${mpy_port_dir}/src/omv/img/include" 41 "${mpy_port_dir}/src/omv/py/include" 42 "${mpy_port_dir}/src/standard_lib/include" 43 "${mpy_build_dir}" 44 ) 45 list(APPEND ADD_PRIVATE_INCLUDE "${mpy_port_dir}/src/nes/mapper") 46 ############################################### 47 48 49 50 ############## Add source files ############### 51 append_srcs_dir(MPY_PORT_SRCS "port/src") 52 append_srcs_dir(MPY_PORT_SRCS "port/src/audio") 53 append_srcs_dir(MPY_PORT_SRCS "port/src/audio/wav") 54 append_srcs_dir(MPY_PORT_SRCS "port/src/Maix") 55 if(NOT CONFIG_MAIXPY_MIC_ARRAY_ENABLE) 56 list(REMOVE_ITEM MPY_PORT_SRCS "port/src/Maix/Maix_mic_array.c") 57 endif() 58 append_srcs_dir(MPY_PORT_SRCS "port/src/modules") 59 append_srcs_dir(MPY_PORT_SRCS "port/src/modules/ultrasonic/src") 60 append_srcs_dir(MPY_PORT_SRCS "port/src/modules/onewire") 61 append_srcs_dir(MPY_PORT_SRCS "port/src/speech/") 62 append_srcs_dir(MPY_PORT_SRCS "port/src/speech/maix_asr") 63 list(APPEND ADD_STATIC_LIB "port/src/speech/maix_asr/libmaix_asr.a") # append_srcs_dir(MPY_PORT_SRCS "port/src/speech/maix_asr/src") 64 append_srcs_dir(MPY_PORT_SRCS "port/src/speech/isolated_word") 65 append_srcs_dir(MPY_PORT_SRCS "port/src/modules/ws2812/src") 66 append_srcs_dir(MPY_PORT_SRCS "port/src/modules/htpa/src") 67 append_srcs_dir(MPY_PORT_SRCS "port/src/modules/amg88xx/src") 68 append_srcs_dir(MPY_PORT_SRCS "port/src/omv") 69 append_srcs_dir(MPY_PORT_SRCS "port/src/omv/img") 70 append_srcs_dir(MPY_PORT_SRCS "port/src/omv/py") 71 append_srcs_dir(MPY_PORT_SRCS "port/src/standard_lib/machine") 72 append_srcs_dir(MPY_PORT_SRCS "port/src/standard_lib/network") 73 append_srcs_dir(MPY_PORT_SRCS "port/src/standard_lib/network/esp32") 74 append_srcs_dir(MPY_PORT_SRCS "port/src/standard_lib/network/esp8285") 75 if(CONFIG_MAIXPY_WIZNET5K_ENABLE) 76 append_srcs_dir(MPY_PORT_SRCS "port/src/standard_lib/network/wiznet5k") 77 append_srcs_dir(MPY_PORT_SRCS "port/src/standard_lib/network/wiznet5k/w5500") 78 append_srcs_dir(MPY_PORT_SRCS "port/src/standard_lib/network/wiznet5k/dns") 79 append_srcs_dir(MPY_PORT_SRCS "port/src/standard_lib/network/wiznet5k/dhcp") 80 endif() 81 append_srcs_dir(MPY_PORT_SRCS "port/src/standard_lib/socket") 82 append_srcs_dir(MPY_PORT_SRCS "port/src/standard_lib/uos") 83 append_srcs_dir(MPY_PORT_SRCS "port/src/standard_lib/utime") 84 85 list(APPEND MPY_SRCS 86 "core/py/mpstate.c" 87 "core/py/nlr.c" 88 "core/py/nlrx86.c" 89 "core/py/nlrx64.c" 90 "core/py/nlrthumb.c" 91 "core/py/nlrxtensa.c" 92 "core/py/nlrsetjmp.c" 93 "core/py/malloc.c" 94 "core/py/gc.c" 95 "core/py/pystack.c" 96 "core/py/qstr.c" 97 "core/py/vstr.c" 98 "core/py/mpprint.c" 99 "core/py/unicode.c" 100 "core/py/mpz.c" 101 "core/py/reader.c" 102 "core/py/lexer.c" 103 "core/py/parse.c" 104 "core/py/scope.c" 105 "core/py/compile.c" 106 "core/py/emitcommon.c" 107 "core/py/emitbc.c" 108 "core/py/asmbase.c" 109 "core/py/asmx64.c" 110 "core/py/emitnx64.c" 111 "core/py/asmx86.c" 112 "core/py/emitnx86.c" 113 "core/py/asmthumb.c" 114 "core/py/emitnthumb.c" 115 "core/py/emitinlinethumb.c" 116 "core/py/asmarm.c" 117 "core/py/emitnarm.c" 118 "core/py/asmxtensa.c" 119 "core/py/emitnxtensa.c" 120 "core/py/emitinlinextensa.c" 121 "core/py/formatfloat.c" 122 "core/py/parsenumbase.c" 123 "core/py/parsenum.c" 124 "core/py/emitglue.c" 125 "core/py/persistentcode.c" 126 "core/py/runtime.c" 127 "core/py/runtime_utils.c" 128 "core/py/scheduler.c" 129 "core/py/nativeglue.c" 130 "core/py/stackctrl.c" 131 "core/py/argcheck.c" 132 "core/py/warning.c" 133 "core/py/map.c" 134 "core/py/obj.c" 135 "core/py/objarray.c" 136 "core/py/objattrtuple.c" 137 "core/py/objbool.c" 138 "core/py/objboundmeth.c" 139 "core/py/objcell.c" 140 "core/py/objclosure.c" 141 "core/py/objcomplex.c" 142 "core/py/objdeque.c" 143 "core/py/objdict.c" 144 "core/py/objenumerate.c" 145 "core/py/objexcept.c" 146 "core/py/objfilter.c" 147 "core/py/objfloat.c" 148 "core/py/objfun.c" 149 "core/py/objgenerator.c" 150 "core/py/objgetitemiter.c" 151 "core/py/objint.c" 152 "core/py/objint_longlong.c" 153 "core/py/objint_mpz.c" 154 "core/py/objlist.c" 155 "core/py/objmap.c" 156 "core/py/objmodule.c" 157 "core/py/objobject.c" 158 "core/py/objpolyiter.c" 159 "core/py/objproperty.c" 160 "core/py/objnone.c" 161 "core/py/objnamedtuple.c" 162 "core/py/objrange.c" 163 "core/py/objreversed.c" 164 "core/py/objset.c" 165 "core/py/objsingleton.c" 166 "core/py/objslice.c" 167 "core/py/objstr.c" 168 "core/py/objstrunicode.c" 169 "core/py/objstringio.c" 170 "core/py/objtuple.c" 171 "core/py/objtype.c" 172 "core/py/objzip.c" 173 "core/py/opmethods.c" 174 "core/py/sequence.c" 175 "core/py/stream.c" 176 "core/py/binary.c" 177 "core/py/builtinimport.c" 178 "core/py/builtinevex.c" 179 "core/py/builtinhelp.c" 180 "core/py/modarray.c" 181 "core/py/modbuiltins.c" 182 "core/py/modcollections.c" 183 "core/py/modgc.c" 184 "core/py/modio.c" 185 "core/py/modmath.c" 186 "core/py/modcmath.c" 187 "core/py/modmicropython.c" 188 "core/py/modstruct.c" 189 "core/py/modsys.c" 190 "core/py/moduerrno.c" 191 "core/py/modthread.c" 192 "core/py/vm.c" 193 "core/py/bc.c" 194 "core/py/showbc.c" 195 "core/py/repl.c" 196 "core/py/smallint.c" 197 "core/py/frozenmod.c" 198 ) 199 200 list(APPEND MPY_EXTMOD_SRCS 201 "core/extmod/moductypes.c" 202 "core/extmod/modujson.c" 203 "core/extmod/modure.c" 204 "core/extmod/moduzlib.c" 205 "core/extmod/moduheapq.c" 206 "core/extmod/modutimeq.c" 207 "core/extmod/moduhashlib.c" 208 "core/extmod/moducryptolib.c" 209 "core/extmod/modubinascii.c" 210 "core/extmod/virtpin.c" 211 "core/extmod/machine_mem.c" 212 "core/extmod/machine_pinbase.c" 213 "core/extmod/machine_signal.c" 214 "core/extmod/machine_pulse.c" 215 "core/extmod/machine_i2c.c" 216 "core/extmod/machine_spi.c" 217 "core/extmod/modurandom.c" 218 "core/extmod/moduselect.c" 219 "core/extmod/moduwebsocket.c" 220 "core/extmod/modwebrepl.c" 221 "core/extmod/modframebuf.c" 222 "core/extmod/vfs.c" 223 "core/extmod/vfs_reader.c" 224 "core/extmod/vfs_posix.c" 225 "core/extmod/vfs_posix_file.c" 226 "core/extmod/vfs_fat.c" 227 "core/extmod/vfs_fat_diskio.c" 228 "core/extmod/vfs_fat_file.c" 229 "core/extmod/utime_mphal.c" 230 "core/extmod/uos_dupterm.c" 231 "core/lib/embed/abort_.c" 232 "core/lib/utils/printf.c" 233 "core/lib/utils/stdout_helpers.c" 234 "core/lib/utils/interrupt_char.c" 235 "core/lib/utils/pyexec.c" 236 "core/lib/libc/string0.c" 237 "core/lib/mp-readline/readline.c" 238 "core/lib/netutils/netutils.c" 239 "core/lib/timeutils/timeutils.c" 240 "core/lib/utils/sys_stdio_mphal.c" 241 "core/lib/oofatfs/ff.c" 242 "core/lib/oofatfs/ffunicode.c" 243 ) 244 set(MPY_FROZEN_SRC "${mpy_build_dir}/frozen_mpy.c") 245 246 if(CONFIG_MICROPY_SSL_ENABLE) 247 list(APPEND MPY_EXTMOD_SRCS 248 "core/extmod/modussl_axtls.c" 249 "core/extmod/modussl_mbedtls.c" 250 ) 251 endif() 252 253 list(APPEND ADD_SRCS ${MPY_SRCS} 254 ${MPY_PORT_SRCS} 255 ${MPY_EXTMOD_SRCS} 256 ${MPY_FROZEN_SRC} 257 ) 258 # list(APPEND ADD_SRCS_GENERATED ${MPY_FROZEN_SRC}) 259 set_property(SOURCE ${MPY_FROZEN_SRC} PROPERTY GENERATED 1) 260 ############################################### 261 262 263 ############# OPTIONAL MODULES PART 1 ############## 264 # nes emulator 265 if(CONFIG_MAIXPY_NES_ENABLE) 266 list(APPEND ADD_INCLUDE "${mpy_port_dir}/src/nes/include") 267 append_srcs_dir(ADD_SRCS "port/src/nes") 268 endif() 269 # video support 270 if(CONFIG_MAIXPY_VIDEO_ENABLE) 271 list(APPEND ADD_INCLUDE "${mpy_port_dir}/src/video/include" 272 "${mpy_port_dir}/src/video/avi/include" 273 ) 274 append_srcs_dir(ADD_SRCS "port/src/video") 275 append_srcs_dir(ADD_SRCS "port/src/video/avi") 276 endif() 277 # touch screen 278 if(CONFIG_MAIXPY_TOUCH_SCREEN_ENABLE) 279 list(APPEND ADD_INCLUDE "${mpy_port_dir}/src/touchscreen/include" 280 ) 281 append_srcs_dir(ADD_SRCS "port/src/touchscreen") 282 if(CONFIG_MAIXPY_TOUCH_SCREEN_DRIVER_NS2009) 283 list(APPEND ADD_INCLUDE "${mpy_port_dir}/src/touchscreen/ns2009/include") 284 append_srcs_dir(ADD_SRCS "port/src/touchscreen/ns2009") 285 endif() 286 if(CONFIG_MAIXPY_TOUCH_SCREEN_DRIVER_FT52XX) 287 list(APPEND ADD_INCLUDE "${mpy_port_dir}/src/touchscreen/ft52xx" 288 "${mpy_port_dir}/src/touchscreen/ns2009/include") 289 append_srcs_dir(ADD_SRCS "port/src/touchscreen/ft52xx") 290 append_srcs_dir(ADD_SRCS "port/src/touchscreen/ns2009") 291 endif() 292 endif() 293 # omv minimum 294 if(CONFIG_MAIXPY_OMV_MINIMUM) 295 # TODO: 296 message(STATUS "OMV minimum enabled") 297 endif() 298 # LVGL 299 if(CONFIG_MAIXPY_LVGL_ENABLE) 300 list(APPEND ADD_INCLUDE "${mpy_port_dir}/src/lvgl/include" 301 "${mpy_port_dir}/src/lvgl/lv_bindings/include" 302 "${mpy_port_dir}/src/lvgl/lv_bindings/lvgl" 303 "${mpy_port_dir}/src/lvgl/lv_bindings/lvgl/src" 304 "${mpy_port_dir}/src/lvgl/lv_bindings/lvgl/src/lv_core" 305 "${mpy_port_dir}/src/lvgl/lv_bindings/lvgl/src/lv_draw" 306 "${mpy_port_dir}/src/lvgl/lv_bindings/lvgl/src/lv_font" 307 "${mpy_port_dir}/src/lvgl/lv_bindings/lvgl/src/lv_hal" 308 "${mpy_port_dir}/src/lvgl/lv_bindings/lvgl/src/lv_misc" 309 "${mpy_port_dir}/src/lvgl/lv_bindings/lvgl/src/lv_objx" 310 "${mpy_port_dir}/src/lvgl/lv_bindings/lvgl/src/lv_themes" 311 "${mpy_port_dir}/src/lvgl/lv_bindings" 312 ) 313 append_srcs_dir(LVGL_MPY_SRCS "port/src/lvgl/lv_bindings/lvgl/src/lv_core") 314 append_srcs_dir(LVGL_MPY_SRCS "port/src/lvgl/lv_bindings/lvgl/src/lv_draw") 315 append_srcs_dir(LVGL_MPY_SRCS "port/src/lvgl/lv_bindings/lvgl/src/lv_font") 316 append_srcs_dir(LVGL_MPY_SRCS "port/src/lvgl/lv_bindings/lvgl/src/lv_hal") 317 append_srcs_dir(LVGL_MPY_SRCS "port/src/lvgl/lv_bindings/lvgl/src/lv_misc") 318 append_srcs_dir(LVGL_MPY_SRCS "port/src/lvgl/lv_bindings/lvgl/src/lv_objx") 319 append_srcs_dir(LVGL_MPY_SRCS "port/src/lvgl/lv_bindings/lvgl/src/lv_themes") 320 append_srcs_dir(LVGL_MPY_SRCS "port/src/lvgl") 321 set(LVGL_MPY_GEN_SRC "${lvgl_build_dir}/lv_mpy.c") 322 # add relative path for ${mpy_build_gen_header_dir}/qstr.i.last need 323 file(RELATIVE_PATH LVGL_MPY_GEN_SRC_REL ${CMAKE_CURRENT_LIST_DIR} ${LVGL_MPY_GEN_SRC}) 324 list(APPEND ADD_SRCS ${LVGL_MPY_SRCS} ${LVGL_MPY_GEN_SRC_REL}) 325 set_property(SOURCE ${LVGL_MPY_GEN_SRC} PROPERTY GENERATED 1) 326 327 set(lvgl_gen_py_tool ${mpy_port_dir}/src/lvgl/lv_bindings/gen/gen_mpy.py) 328 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DLV_CONF_H=1 -DLV_CONF_INCLUDE_SIMPLE") 329 else() 330 set(LVGL_MPY_GEN_SRC "") 331 endif() 332 # lodepng 333 if(CONFIG_MAIXPY_LODEPNG_ENABLE) 334 list(APPEND ADD_INCLUDE "${mpy_port_dir}/src/lvgl/lv_bindings/driver/png/lodepng") 335 set(LODEPNG_SRC "${mpy_port_dir}/src/lvgl/lv_bindings/driver/png/lodepng/lodepng.cpp") 336 set(LODEPNG_SRC_C "${lodepng_build_dir}/lodepng.c") 337 set_property(SOURCE ${LODEPNG_SRC_C} PROPERTY GENERATED 1) 338 # add relative path for ${mpy_build_gen_header_dir}/qstr.i.last need 339 file(RELATIVE_PATH LODEPNG_SRC_C_REL ${CMAKE_CURRENT_LIST_DIR} ${LODEPNG_SRC_C}) 340 list(APPEND ADD_SRCS ${LODEPNG_SRC_C_REL}) 341 set(LODEPNG_MPY_GEN_SRC "${lodepng_build_dir}/lodepng_mpy.c") 342 set_property(SOURCE ${LODEPNG_MPY_GEN_SRC} PROPERTY GENERATED 1) 343 # add relative path for ${mpy_build_gen_header_dir}/qstr.i.last need 344 file(RELATIVE_PATH LODEPNG_MPY_GEN_SRC_REL ${CMAKE_CURRENT_LIST_DIR} ${LODEPNG_MPY_GEN_SRC}) 345 list(APPEND ADD_SRCS ${LODEPNG_MPY_GEN_SRC_REL}) 346 add_custom_command(OUTPUT ${LODEPNG_SRC_C} 347 COMMAND mkdir -p ${lodepng_build_dir} 348 COMMAND cp ${LODEPNG_SRC} ${LODEPNG_SRC_C} 349 DEPENDS ${LODEPNG_SRC} 350 ) 351 set(lvgl_gen_py_tool ${mpy_port_dir}/src/lvgl/lv_bindings/gen/gen_mpy.py) 352 else() 353 set(LODEPNG_MPY_GEN_SRC "") 354 endif() 355 # ulab 356 if(CONFIG_MICROPYTHON_ULAB_ENALBE) 357 list(APPEND ADD_INCLUDE "${mpy_port_dir}/src/ulab/micropython-ulab/code") 358 append_srcs_dir(ADD_SRCS "port/src/ulab/micropython-ulab/code") 359 endif() 360 361 if(CONFIG_MICROPY_SSL_ENABLE) 362 list(APPEND ADD_INCLUDE "${mpy_core_dir}/lib/mbedtls/include") 363 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DMBEDTLS_CONFIG_FILE='\"${mpy_port_dir}/src/mbedtls/include/mbedtls_config.h\"'") 364 # message(${CMAKE_C_FLAGS}) 365 append_srcs_dir(ADD_SRCS "port/src/mbedtls") 366 append_srcs_dir(ADD_SRCS "core/lib/mbedtls/library") 367 list(REMOVE_ITEM ADD_SRCS "${mpy_core_dir}/lib/mbedtls/library/net_sockets.c") 368 endif() 369 370 ############################################# 371 372 ################## FLAGS #################### 373 # find requirements include //TODO: maybe cmake have functio or variable can do this 374 set(include_dir_flags ${ADD_INCLUDE}) 375 prepend(include_dir_flags "-I" ${include_dir_flags}) 376 foreach(component ${components_requirements}) 377 get_target_property(include_dir ${component} INTERFACE_INCLUDE_DIRECTORIES) 378 prepend(include_dir "-I" ${include_dir}) 379 list(APPEND include_dir_flags ${include_dir}) 380 endforeach() 381 string(REPLACE ";" " " include_dir_flags "${include_dir_flags}") 382 separate_arguments(cmd_param_cflag NATIVE_COMMAND ${CMAKE_C_FLAGS}) 383 separate_arguments(cmd_param_cinclude NATIVE_COMMAND ${include_dir_flags}) 384 ############################################# 385 386 ########### OPTIONAL MODULES PART 2 ######### 387 388 # lvgl 389 if(CONFIG_MAIXPY_LVGL_ENABLE) 390 separate_arguments(cmd_param_lvgl_fake_libc_inc NATIVE_COMMAND ${mpy_port_dir}/src/lvgl/lv_bindings/pycparser/utils/fake_libc_include) 391 set(lvgl_core_header ${mpy_port_dir}/src/lvgl/lv_bindings/lvgl/lvgl.h) 392 set(LVGL_MPY_GEN_SRC_PP ${lvgl_build_dir}/lvgl.pp.c) 393 set(LVGL_MPY_METADATA ${lvgl_build_dir}/lv_mpy.json) 394 add_custom_command(OUTPUT ${LVGL_MPY_GEN_SRC_PP} 395 COMMAND mkdir -p ${lvgl_build_dir} 396 COMMAND ${CMAKE_C_COMPILER} -E ${cmd_param_cflag} ${cmd_param_cinclude} -I${cmd_param_lvgl_fake_libc_inc} ${lvgl_core_header} > ${LVGL_MPY_GEN_SRC_PP} 397 DEPENDS ${lvgl_core_header} 398 ) 399 add_custom_command(OUTPUT ${LVGL_MPY_GEN_SRC} 400 COMMAND ${python} ${lvgl_gen_py_tool} ${cmd_param_cinclude} -M lvgl -MP lv -MD ${LVGL_MPY_METADATA} -E ${LVGL_MPY_GEN_SRC_PP} ${lvgl_core_header} > ${LVGL_MPY_GEN_SRC} 401 DEPENDS ${LVGL_MPY_GEN_SRC_PP} 402 ) 403 endif() 404 # lodepng 405 if(CONFIG_MAIXPY_LODEPNG_ENABLE) 406 separate_arguments(cmd_param_lvgl_fake_libc_inc NATIVE_COMMAND ${mpy_port_dir}/src/lvgl/lv_bindings/pycparser/utils/fake_libc_include) 407 set(lodepng_core_header ${mpy_port_dir}/src/lvgl/lv_bindings/driver/png/lodepng/lodepng.h) 408 set(LODEPNG_MPY_GEN_SRC_PP ${lodepng_build_dir}/lodepng.pp.c) 409 set(LODEPNG_MPY_METADATA ${lodepng_build_dir}/lodepng_mpy.json) 410 add_custom_command(OUTPUT ${LODEPNG_MPY_GEN_SRC_PP} 411 COMMAND mkdir -p ${lodepng_build_dir} 412 COMMAND ${CMAKE_C_COMPILER} -E ${cmd_param_cflag} ${cmd_param_cinclude} -I${cmd_param_lvgl_fake_libc_inc} ${lodepng_core_header} > ${LODEPNG_MPY_GEN_SRC_PP} 413 DEPENDS ${lodepng_core_header} 414 ) 415 add_custom_command(OUTPUT ${LODEPNG_MPY_GEN_SRC} 416 COMMAND ${python} ${lvgl_gen_py_tool} ${cmd_param_cinclude} -M lodepng -MP lodepng -MD ${LODEPNG_MPY_METADATA} -E ${LODEPNG_MPY_GEN_SRC_PP} ${lodepng_core_header} > ${LODEPNG_MPY_GEN_SRC} 417 DEPENDS ${LODEPNG_MPY_GEN_SRC_PP} 418 ) 419 endif() 420 ############################################# 421 422 423 ############ QSTR(SRC_QSTR) ############## 424 set(QSTR_SRCS ${ADD_SRCS}) 425 list(REMOVE_ITEM QSTR_SRCS "core/py/nlr.c" 426 "core/py/nlrsetjmp.c" 427 "core/py/nlrthumb.c" 428 "core/py/nlrx64.c" 429 "core/py/nlrx86.c" 430 "core/py/nlrxtensa.c" 431 ${MPY_FROZEN_SRC} 432 ) 433 434 # add version header 435 set(version_header ${mpy_build_gen_header_dir}/mpversion.h) 436 add_custom_target(gen_version_header 437 COMMAND mkdir -p ${mpy_build_gen_header_dir} 438 COMMAND ${python} ${mpy_core_src_dir}/makeversionhdr.py ${version_header} 439 DEPENDS ${LVGL_MPY_GEN_SRC} ${LODEPNG_SRC_C} ${LODEPNG_MPY_GEN_SRC} 440 VERBATIM 441 ) 442 443 444 # add qstr header 445 set(qstr_header ${mpy_build_gen_header_dir}/qstrdefs.generated.h) 446 # set_property(SOURCE ${qstr_header} PROPERTY GENERATED 1) 447 set(PY_QSTR_DEFS ${mpy_core_src_dir}/qstrdefs.h) 448 set(QSTR_DEFS ${mpy_port_dir}/include/qstrdefsport.h) 449 set(MODULE_DEFS ${mpy_build_gen_header_dir}/moduledefs.h) 450 set(QSTR_DEFS_COLLECTED ${mpy_build_gen_header_dir}/qstrdefs.collected.h) 451 set(QSTR_GEN_EXTRA_CFLAGS -DNO_QSTR -I${mpy_build_dir}/tmp) 452 set(QSTR_GLOBAL_DEPENDENCIES ${mpy_core_src_dir}/mpconfig.h ${mpy_port_dir}/include/mpconfigport.h ${global_config_dir}/global_config.h) 453 454 add_custom_target(gen_module_defs 455 COMMAND ${python} ${mpy_core_src_dir}/makemoduledefs.py --vpath=${mpy_dir}, ${mpy_dir}, ${QSTR_SRCS} > ${MODULE_DEFS} 456 DEPENDS gen_version_header 457 VERBATIM 458 ) 459 460 abspath(QSTR_SRCS_FULL_PATH ${QSTR_SRCS}) 461 add_custom_target(gen_qstr_i_last 462 COMMAND ${CMAKE_C_COMPILER} -E ${QSTR_GEN_EXTRA_CFLAGS} ${cmd_param_cflag} ${cmd_param_cinclude} -DFFCONF_H="${mpy_core_dir}/lib/oofatfs/ffconf.h" ${QSTR_SRCS_FULL_PATH} ${QSTR_GLOBAL_DEPENDENCIES} > ${mpy_build_gen_header_dir}/qstr.i.last 463 DEPENDS gen_module_defs ${QSTR_GLOBAL_DEPENDENCIES} ${QSTR_SRCS} 464 VERBATIM 465 ) 466 add_custom_target(gen_collected_h 467 COMMAND ${python} ${mpy_core_src_dir}/makeqstrdefs.py split ${mpy_build_gen_header_dir}/qstr.i.last ${mpy_build_gen_header_dir}/qstr ${QSTR_DEFS_COLLECTED} 468 COMMAND touch ${mpy_build_gen_header_dir}/qstr.split 469 COMMAND ${python} ${mpy_core_src_dir}/makeqstrdefs.py cat ${mpy_build_gen_header_dir}/qstr.i.last ${mpy_build_gen_header_dir}/qstr ${QSTR_DEFS_COLLECTED} 470 DEPENDS gen_qstr_i_last 471 VERBATIM 472 ) 473 add_custom_target(gen_mpy_cross 474 COMMAND ${CMAKE_MAKE_PROGRAM} -C ${mpy_core_dir}/mpy-cross 475 COMMENT "Generate mpy-cross ..." 476 ) 477 separate_arguments(cmd_sed0 NATIVE_COMMAND "s/^Q(.*)/\"&\"/") 478 separate_arguments(cmd_sed1 NATIVE_COMMAND "s/^\"\\(Q(.*)\\)\"/\\1/") 479 480 add_custom_command(OUTPUT ${mpy_build_gen_header_dir}/qstrdefs.preprocessed.h 481 COMMAND cat ${PY_QSTR_DEFS} ${QSTR_DEFS} ${QSTR_DEFS_COLLECTED} | sed '${cmd_sed0}' | ${CMAKE_C_COMPILER} -E ${cmd_param_cflag} ${cmd_param_cinclude} - | sed '${cmd_sed1}' > ${mpy_build_gen_header_dir}/qstrdefs.preprocessed.h 482 DEPENDS gen_mpy_cross gen_version_header gen_module_defs gen_collected_h gen_qstr_i_last ${QSTR_DEFS_COLLECTED} 483 ) 484 add_custom_command(OUTPUT ${qstr_header} 485 COMMAND ${python} ${mpy_core_src_dir}/makeqstrdata.py ${mpy_build_gen_header_dir}/qstrdefs.preprocessed.h > ${qstr_header} 486 DEPENDS ${mpy_build_gen_header_dir}/qstrdefs.preprocessed.h gen_qstr_i_last 487 ) 488 489 file(GLOB frozen_py "${mpy_frozen_py_dir}/*.py") 490 if(NOT CONFIG_MAIXPY_BUILTIN_PY_PYE) 491 list(REMOVE_ITEM frozen_py "${mpy_frozen_py_dir}/pye_mp.py") 492 endif() 493 if(NOT CONFIG_MAIXPY_BUILTIN_PY_BOARD) 494 list(REMOVE_ITEM frozen_py "${mpy_frozen_py_dir}/board.py") 495 endif() 496 if(NOT CONFIG_MAIXPY_BUILTIN_PY_FPIOA_MANAGER) 497 list(REMOVE_ITEM frozen_py "${mpy_frozen_py_dir}/fpioa_manager.py") 498 endif() 499 foreach(py ${frozen_py}) 500 get_filename_component(py_name ${py} NAME) 501 string(REPLACE ".py" "" py_name ${py_name}) 502 string(REPLACE ".py" ".mpy" mpy ${py}) 503 set(mpy_path ${mpy_build_mpy_dir}/${py_name}.mpy) 504 list(APPEND frozen_mpy ${mpy_path}) 505 add_custom_command(OUTPUT ${mpy_path} 506 COMMAND mkdir -p ${mpy_build_mpy_dir} 507 DEPENDS ${py} 508 COMMAND ${mpy_core_dir}/mpy-cross/mpy-cross -o ${mpy_path} -s ${py_name}.py ${py} 509 ) 510 # add_custom_target("mpy_${py_name}_target" DEPENDS ${mpy}) 511 endforeach() 512 add_custom_command(OUTPUT ${MPY_FROZEN_SRC} 513 COMMAND ${python} ${mpy_core_dir}/tools/mpy-tool.py -f -q ${mpy_build_gen_header_dir}/qstrdefs.preprocessed.h ${frozen_mpy} > ${MPY_FROZEN_SRC} 514 DEPENDS ${qstr_header} ${frozen_mpy} 515 ) 516 517 ################################ 518 519 if(CONFIG_COMPONENT_LIB_SIPEED_KPU_SRC_ENABLE) 520 include("lib_sipeed_kpu/compile.cmake") 521 endif() 522 523 524 ###### Add required/dependent components ###### 525 list(APPEND ADD_REQUIREMENTS ${components_requirements}) 526 ############################################### 527 528 ############ Add static libs ################## 529 # list(APPEND ADD_STATIC_LIB "lib/libtest.a") 530 ############################################### 531 add_definitions(-DFFCONF_H=\"${mpy_core_dir}/lib/oofatfs/ffconf.h\" 532 -DNOT_GEN_MPY_CROSS=1 533 ) 534 535 register_component() 536 537 endif() 538