From 17609a2491771b2e389c1ee648d97b7a558324f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20H=C3=BCttel?= Date: Fri, 16 Jul 2021 21:57:30 +0200 Subject: [PATCH] Add automatic flash CRC patching to cmake --- stm-firmware/CMakeLists.txt | 29 +++++++++++++++++++ .../{ => crc-patcher}/crc-patch-elf.py | 0 stm-firmware/crc-patcher/requirements.txt | 2 ++ 3 files changed, 31 insertions(+) rename stm-firmware/{ => crc-patcher}/crc-patch-elf.py (100%) create mode 100644 stm-firmware/crc-patcher/requirements.txt diff --git a/stm-firmware/CMakeLists.txt b/stm-firmware/CMakeLists.txt index 5038ad2..22a84a6 100644 --- a/stm-firmware/CMakeLists.txt +++ b/stm-firmware/CMakeLists.txt @@ -43,6 +43,27 @@ else (GIT_FOUND) message("Version is set to: ${GIT_DESCRIBE}${ColorReset}") endif (GIT_FOUND) +find_program(VIRTUALENV virtualenv) +if (VIRTUALENV) + message("Python virtual environment found") + execute_process( + COMMAND ${VIRTUALENV} venv + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + OUTPUT_QUIET + COMMAND_ERROR_IS_FATAL ANY + ) + set(VENV_BIN "${CMAKE_CURRENT_BINARY_DIR}/venv/bin") + execute_process( + COMMAND ./pip install -r "${CMAKE_CURRENT_SOURCE_DIR}/crc-patcher/requirements.txt" + WORKING_DIRECTORY ${VENV_BIN} + OUTPUT_QUIET + COMMAND_ERROR_IS_FATAL ANY + ) + message("${BoldGreen}python virtual environment set up!${ColorReset}") +else(VIRTUALENV) +endif (VIRTUALENV) + + set(ELFFILE ${PROJECT_NAME}.elf) set(HEXFILE ${PROJECT_NAME}.hex) set(MAPFILE ${PROJECT_NAME}.map) @@ -105,6 +126,14 @@ target_link_options(${ELFFILE} PRIVATE -mlittle-endian -mthumb -mcpu=cortex-m4 - target_link_libraries(${ELFFILE} base64-lib linklist-lib) target_include_directories(${ELFFILE} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/updater/ram-code/include/") +add_custom_command( + TARGET ${ELFFILE} + POST_BUILD + COMMAND ./python "${CMAKE_CURRENT_SOURCE_DIR}/crc-patcher/crc-patch-elf.py" "${CMAKE_CURRENT_BINARY_DIR}/${ELFFILE}" + WORKING_DIRECTORY ${VENV_BIN} + COMMENT "Running Flash CRC Patcher" + ) + set(HEX_PATH "${CMAKE_CURRENT_BINARY_DIR}/${HEXFILE}") add_custom_target(update-image ALL DEPENDS ${HEX_PATH}) add_custom_command( diff --git a/stm-firmware/crc-patch-elf.py b/stm-firmware/crc-patcher/crc-patch-elf.py similarity index 100% rename from stm-firmware/crc-patch-elf.py rename to stm-firmware/crc-patcher/crc-patch-elf.py diff --git a/stm-firmware/crc-patcher/requirements.txt b/stm-firmware/crc-patcher/requirements.txt new file mode 100644 index 0000000..90599cf --- /dev/null +++ b/stm-firmware/crc-patcher/requirements.txt @@ -0,0 +1,2 @@ +crcmod==1.7 +pyelftools==0.27