CMakeLists.txt 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. cmake_minimum_required(VERSION 3.16)
  2. message(STATUS "** SPIFFS ")
  3. include(../tools/protoc_utils/protobuf_utils.cmake)
  4. set(GENERATED_BIN_DIRECTORY "${GENERATED_SPIFFS_DIRECTORY}/data")
  5. file(MAKE_DIRECTORY "${GENERATED_BIN_DIRECTORY}")
  6. function(generate_protobuf_bin SOURCE_JSON_FILE PROTO_FILE MAIN_CLASS GENERATED_BIN_DIRECTORY)
  7. # Get the relative path from SOURCE_JSON_FILE
  8. file(RELATIVE_PATH RELATIVE_JSON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/" "${SOURCE_JSON_FILE}")
  9. get_filename_component(RELATIVE_DIR "${RELATIVE_JSON_PATH}" DIRECTORY)
  10. get_filename_component(STRUCTURE_NAME "${RELATIVE_JSON_PATH}" NAME_WE)
  11. # Create the directory structure in GENERATED_BIN_DIRECTORY
  12. set(TARGET_BIN_DIRECTORY "${GENERATED_BIN_DIRECTORY}/${RELATIVE_DIR}")
  13. file(MAKE_DIRECTORY "${TARGET_BIN_DIRECTORY}")
  14. # Set the path for the generated .bin file
  15. set(GENERATED_BIN "${TARGET_BIN_DIRECTORY}/${STRUCTURE_NAME}.bin")
  16. string(TOLOWER ${GENERATED_BIN} GENERATED_BIN)
  17. # Prepare the protodot command and its arguments
  18. set(PROTOBIN_COMMAND
  19. ${PYTHON_EXECUTABLE}
  20. ${TOOLS_DIR}/protoc_utils/generate_bin.py
  21. --proto_file "${PROTO_FILE}"
  22. --main_class "${MAIN_CLASS}"
  23. --target_dir "${TARGET_BIN_DIRECTORY}"
  24. --json ${SOURCE_JSON_FILE}
  25. --include "${GENERATED_PROTOBUF_ROOT}/proto/nanopb/generator/proto"
  26. --include "${GENERATED_PROTOBUF_ROOT}/py/"
  27. )
  28. add_custom_command(
  29. OUTPUT ${GENERATED_BIN}
  30. COMMAND ${PROTOBIN_COMMAND}
  31. DEPENDS ${SOURCE_JSON_FILE}
  32. COMMENT "Generating BIN file ${GENERATED_BIN} for structure ${STRUCTURE_NAME} from json ${SOURCE_JSON_FILE}"
  33. VERBATIM
  34. )
  35. set(GENERATED_BIN_FILES ${GENERATED_BIN_FILES} ${GENERATED_BIN} PARENT_SCOPE)
  36. endfunction()
  37. file(GLOB_RECURSE SOURCE_JSON_FILES "${CMAKE_CURRENT_SOURCE_DIR}/targets/*.json")
  38. foreach(SOURCE_JSON_FILE IN LISTS SOURCE_JSON_FILES)
  39. generate_protobuf_bin("${SOURCE_JSON_FILE}" "${GENERATED_PROTOBUF_ROOT}/py/configuration" "config" "${GENERATED_BIN_DIRECTORY}")
  40. endforeach()
  41. generate_protobuf_bin("${CMAKE_CURRENT_SOURCE_DIR}/data/default_sets.json" "${GENERATED_PROTOBUF_ROOT}/py/DAC" "default_sets" "${GENERATED_BIN_DIRECTORY}")
  42. add_custom_target(generate_spiffs_bin DEPENDS ${GENERATED_BIN_FILES} )
  43. set_source_files_properties(${GENERATED_BIN_FILES} PROPERTIES GENERATED TRUE)
  44. add_dependencies(generate_spiffs_bin generate_system_proto)
  45. add_dependencies(generate_spiffs_bin generate_py_files)
  46. # Copy .bin files from spiffs_src/data to GENERATED_SPIFFS_DIRECTORY/data
  47. file(GLOB_RECURSE SPIFFS_SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/data/*.bin")
  48. copy_files("${SPIFFS_SRC_FILES}" "${CMAKE_CURRENT_SOURCE_DIR}/data" "${GENERATED_SPIFFS_DIRECTORY}/data")
  49. list(APPEND SPIFFS_DATA_FILES "${CUSTOM_COPY_TARGET}")
  50. # Copy .gz and png files from components/wifi-manager/webapp/dist to GENERATED_SPIFFS_DIRECTORY/data/www
  51. file(GLOB_RECURSE WIFI_MANAGER_FILES
  52. "${PROJECT_ROOT_DIR}/components/wifi-manager/webapp/dist/*.gz"
  53. "${PROJECT_ROOT_DIR}/components/wifi-manager/webapp/dist/*.png")
  54. copy_files("${WIFI_MANAGER_FILES}" "${PROJECT_ROOT_DIR}/components/wifi-manager/webapp/dist" "${GENERATED_SPIFFS_DIRECTORY}/data/www")
  55. list(APPEND SPIFFS_DATA_FILES "${CUSTOM_COPY_TARGET}")
  56. # Retrieve the list of custom target names
  57. get_property(CUSTOM_COPY_TARGETS GLOBAL PROPERTY CUSTOM_COPY_TARGETS)
  58. spiffs_create_partition_image(spiffs ${GENERATED_SPIFFS_DIRECTORY}/data FLASH_IN_PROJECT DEPENDS generate_spiffs_bin ${CUSTOM_COPY_TARGETS} )
  59. message(STATUS "** ")