From 3bac13fcc88c6b69a3e87aefd3a4f951231186f0 Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Mon, 8 Jan 2024 09:45:17 +0000 Subject: [PATCH 1/9] CI: Bump MicroPython to v1.22.1. --- .github/workflows/micropython.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/micropython.yml b/.github/workflows/micropython.yml index fca6a18f..cfdc85bf 100644 --- a/.github/workflows/micropython.yml +++ b/.github/workflows/micropython.yml @@ -7,7 +7,7 @@ on: types: [created] env: - MICROPYTHON_VERSION: v1.21.0 + MICROPYTHON_VERSION: v1.22.1 WORKFLOW_VERSION: v1 jobs: From 4dd76525f6010408ffda6df9b8630d0518ed3280 Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Mon, 8 Jan 2024 10:06:14 +0000 Subject: [PATCH 2/9] CI: Update MicroPython patch for v1.22.1. --- micropython/micropython_nano_specs.patch | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/micropython/micropython_nano_specs.patch b/micropython/micropython_nano_specs.patch index 7801b58a..9a2bc620 100644 --- a/micropython/micropython_nano_specs.patch +++ b/micropython/micropython_nano_specs.patch @@ -1,11 +1,11 @@ diff --git a/ports/rp2/CMakeLists.txt b/ports/rp2/CMakeLists.txt -index 094031c6852a..5f268414c08f 100644 +index 281b0c3bc..7e04bb549 100644 --- a/ports/rp2/CMakeLists.txt +++ b/ports/rp2/CMakeLists.txt -@@ -374,6 +374,15 @@ target_compile_options(${MICROPY_TARGET} PRIVATE - target_link_options(${MICROPY_TARGET} PRIVATE - -Wl,--defsym=__micropy_c_heap_size__=${MICROPY_C_HEAP_SIZE} +@@ -453,6 +453,16 @@ target_link_options(${MICROPY_TARGET} PRIVATE + -Wl,--wrap=dcd_event_handler ) + +# Do not include stack unwinding & exception handling for C++ user modules +target_compile_definitions(usermod INTERFACE PICO_CXX_ENABLE_EXCEPTIONS=0) +target_compile_options(usermod INTERFACE $<$: @@ -15,6 +15,7 @@ index 094031c6852a..5f268414c08f 100644 + -fno-use-cxa-atexit +>) +target_link_options(usermod INTERFACE -specs=nano.specs) - ++ set_source_files_properties( ${PICO_SDK_PATH}/src/rp2_common/pico_double/double_math.c + ${PICO_SDK_PATH}/src/rp2_common/pico_float/float_math.c From 1b3d9d9fb200dd36e9cfa7fc65feecfd56c9484c Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Mon, 8 Jan 2024 10:15:28 +0000 Subject: [PATCH 3/9] Pimoroni I2C: Update to use modmachine.h consolidated header. --- micropython/modules/pimoroni_i2c/pimoroni_i2c.cpp | 2 +- micropython/modules/pimoroni_i2c/pimoroni_i2c.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/micropython/modules/pimoroni_i2c/pimoroni_i2c.cpp b/micropython/modules/pimoroni_i2c/pimoroni_i2c.cpp index 6d9df2fc..609e9acb 100644 --- a/micropython/modules/pimoroni_i2c/pimoroni_i2c.cpp +++ b/micropython/modules/pimoroni_i2c/pimoroni_i2c.cpp @@ -8,7 +8,7 @@ using namespace pimoroni; extern "C" { #include "pimoroni_i2c.h" #include "py/mperrno.h" -#include "extmod/machine_i2c.h" +#include "extmod/modmachine.h" _PimoroniI2C_obj_t* PimoroniI2C_from_machine_i2c_or_native(mp_obj_t i2c_obj) { diff --git a/micropython/modules/pimoroni_i2c/pimoroni_i2c.h b/micropython/modules/pimoroni_i2c/pimoroni_i2c.h index 3ea3f6d5..cb4fea97 100644 --- a/micropython/modules/pimoroni_i2c/pimoroni_i2c.h +++ b/micropython/modules/pimoroni_i2c/pimoroni_i2c.h @@ -1,6 +1,6 @@ // Include MicroPython API. #include "py/runtime.h" -#include "extmod/machine_i2c.h" +#include "extmod/modmachine.h" #include "hardware/i2c.h" /***** Extern of Class Definition *****/ From d45daef654cca461d3bf683dbb35b45c8a75a1ab Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Mon, 8 Jan 2024 10:33:26 +0000 Subject: [PATCH 4/9] MicroPython: Switch from MICROPY_EVENT_POLL_HOOK to mp_event_handle_nowait(). Note: Unsure if mp_event_handle_nowait() is the right answer in all cases, but this seems to be what we want in our blocking loops. --- micropython/modules/badger2040/badger2040.cpp | 20 +++++++++---------- micropython/modules/jpegdec/jpegdec.cpp | 4 ++-- .../modules/pico_scroll/pico_scroll.cpp | 2 +- .../modules/picographics/picographics.cpp | 16 +++++++-------- micropython/modules/pngdec/pngdec.cpp | 4 ++-- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/micropython/modules/badger2040/badger2040.cpp b/micropython/modules/badger2040/badger2040.cpp index de59c6d2..f2a38a5d 100644 --- a/micropython/modules/badger2040/badger2040.cpp +++ b/micropython/modules/badger2040/badger2040.cpp @@ -122,8 +122,8 @@ mp_obj_t Badger2040_update(mp_obj_t self_in) { _Badger2040_obj_t *self = MP_OBJ_TO_PTR2(self_in, _Badger2040_obj_t); while(self->badger2040->is_busy()) { -#ifdef MICROPY_EVENT_POLL_HOOK -MICROPY_EVENT_POLL_HOOK +#ifdef mp_event_handle_nowait +mp_event_handle_nowait(); #endif } @@ -133,8 +133,8 @@ MICROPY_EVENT_POLL_HOOK // Ensure blocking for the minimum amount of time // in cases where "is_busy" is unreliable. while(self->badger2040->is_busy() || absolute_time_diff_us(get_absolute_time(), t_end) > 0) { -#ifdef MICROPY_EVENT_POLL_HOOK -MICROPY_EVENT_POLL_HOOK +#ifdef mp_event_handle_nowait +mp_event_handle_nowait(); #endif } @@ -166,8 +166,8 @@ mp_obj_t Badger2040_partial_update(size_t n_args, const mp_obj_t *pos_args, mp_m while(self->badger2040->is_busy()) { -#ifdef MICROPY_EVENT_POLL_HOOK -MICROPY_EVENT_POLL_HOOK +#ifdef mp_event_handle_nowait +mp_event_handle_nowait(); #endif } @@ -177,8 +177,8 @@ MICROPY_EVENT_POLL_HOOK // Ensure blocking for the minimum amount of time // in cases where "is_busy" is unreliable. while(self->badger2040->is_busy() || absolute_time_diff_us(get_absolute_time(), t_end) > 0) { -#ifdef MICROPY_EVENT_POLL_HOOK -MICROPY_EVENT_POLL_HOOK +#ifdef mp_event_handle_nowait +mp_event_handle_nowait(); #endif } @@ -199,8 +199,8 @@ mp_obj_t Badger2040_halt(mp_obj_t self_in) { self->badger2040->update_button_states(); while (self->badger2040->button_states() == 0) { -#ifdef MICROPY_EVENT_POLL_HOOK -MICROPY_EVENT_POLL_HOOK +#ifdef mp_event_handle_nowait +mp_event_handle_nowait(); #endif self->badger2040->update_button_states(); } diff --git a/micropython/modules/jpegdec/jpegdec.cpp b/micropython/modules/jpegdec/jpegdec.cpp index fb440250..5c8e3405 100644 --- a/micropython/modules/jpegdec/jpegdec.cpp +++ b/micropython/modules/jpegdec/jpegdec.cpp @@ -84,8 +84,8 @@ int32_t jpegdec_seek_callback(JPEGFILE *jpeg, int32_t p) { } int JPEGDraw(JPEGDRAW *pDraw) { -#ifdef MICROPY_EVENT_POLL_HOOK -MICROPY_EVENT_POLL_HOOK +#ifdef mp_event_handle_nowait +mp_event_handle_nowait(); #endif PicoGraphics *current_graphics = (PicoGraphics *)pDraw->pUser; // "pixel" is slow and clipped, diff --git a/micropython/modules/pico_scroll/pico_scroll.cpp b/micropython/modules/pico_scroll/pico_scroll.cpp index 3effcd6f..e382788a 100644 --- a/micropython/modules/pico_scroll/pico_scroll.cpp +++ b/micropython/modules/pico_scroll/pico_scroll.cpp @@ -110,7 +110,7 @@ mp_obj_t picoscroll_scroll_text(mp_uint_t n_args, const mp_obj_t *args) { self->scroll->clear(); self->scroll->set_bitmap_1d((const char *)draw_buffer, draw_buffer_len, brightness, offset); self->scroll->update(); - MICROPY_EVENT_POLL_HOOK + mp_event_handle_nowait(); sleep_ms(delay_ms); } diff --git a/micropython/modules/picographics/picographics.cpp b/micropython/modules/picographics/picographics.cpp index e10f78c8..2a855374 100644 --- a/micropython/modules/picographics/picographics.cpp +++ b/micropython/modules/picographics/picographics.cpp @@ -623,16 +623,16 @@ mp_obj_t ModPicoGraphics_update(mp_obj_t self_in) { */ while(self->display->is_busy()) { - #ifdef MICROPY_EVENT_POLL_HOOK - MICROPY_EVENT_POLL_HOOK + #ifdef mp_event_handle_nowait + mp_event_handle_nowait(); #endif } self->display->update(self->graphics); while(self->display->is_busy()) { - #ifdef MICROPY_EVENT_POLL_HOOK - MICROPY_EVENT_POLL_HOOK + #ifdef mp_event_handle_nowait + mp_event_handle_nowait(); #endif } @@ -647,8 +647,8 @@ mp_obj_t ModPicoGraphics_partial_update(size_t n_args, const mp_obj_t *args) { ModPicoGraphics_obj_t *self = MP_OBJ_TO_PTR2(args[ARG_self], ModPicoGraphics_obj_t); while(self->display->is_busy()) { - #ifdef MICROPY_EVENT_POLL_HOOK - MICROPY_EVENT_POLL_HOOK + #ifdef mp_event_handle_nowait + mp_event_handle_nowait(); #endif } @@ -660,8 +660,8 @@ mp_obj_t ModPicoGraphics_partial_update(size_t n_args, const mp_obj_t *args) { }); while(self->display->is_busy()) { - #ifdef MICROPY_EVENT_POLL_HOOK - MICROPY_EVENT_POLL_HOOK + #ifdef mp_event_handle_nowait + mp_event_handle_nowait(); #endif } diff --git a/micropython/modules/pngdec/pngdec.cpp b/micropython/modules/pngdec/pngdec.cpp index 9e69f596..03903219 100644 --- a/micropython/modules/pngdec/pngdec.cpp +++ b/micropython/modules/pngdec/pngdec.cpp @@ -118,8 +118,8 @@ void pngdec_open_helper(_PNG_obj_t *self) { } void PNGDraw(PNGDRAW *pDraw) { -#ifdef MICROPY_EVENT_POLL_HOOK -MICROPY_EVENT_POLL_HOOK +#ifdef mp_event_handle_nowait +mp_event_handle_nowait(); #endif _PNG_decode_target *target = (_PNG_decode_target*)pDraw->pUser; PicoGraphics *current_graphics = (PicoGraphics *)target->target; From 6154116662d2ce5ec3f42fffeb45396e71c72a4e Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Thu, 16 Nov 2023 12:03:59 +0000 Subject: [PATCH 5/9] CI: Move build steps to a bash script. --- .github/workflows/micropython.yml | 143 +++++++----------------- ci/micropython.sh | 77 +++++++++++++ micropython/modules_py/modules_py.cmake | 12 +- 3 files changed, 122 insertions(+), 110 deletions(-) create mode 100644 ci/micropython.sh diff --git a/.github/workflows/micropython.yml b/.github/workflows/micropython.yml index cfdc85bf..10c83cd4 100644 --- a/.github/workflows/micropython.yml +++ b/.github/workflows/micropython.yml @@ -8,62 +8,10 @@ on: env: MICROPYTHON_VERSION: v1.22.1 - WORKFLOW_VERSION: v1 jobs: - deps: - runs-on: ubuntu-20.04 - name: Dependencies - steps: - - name: Workspace Cache - id: cache - uses: actions/cache@v3 - with: - path: ${{runner.workspace}} - key: workspace-micropython-${{env.MICROPYTHON_VERSION}}-${{env.WORKFLOW_VERSION}} - restore-keys: | - workspace-micropython-${{env.MICROPYTHON_VERSION}}-${{env.WORKFLOW_VERSION}} - - # Check out MicroPython - - name: Checkout MicroPython - if: steps.cache.outputs.cache-hit != 'true' - uses: actions/checkout@v3 - with: - repository: micropython/micropython - ref: ${{env.MICROPYTHON_VERSION}} - submodules: false # MicroPython submodules are hideously broken - path: micropython - - # Check out MicroPython Libs - - name: Checkout MicroPython Libs - if: steps.cache.outputs.cache-hit != 'true' - uses: actions/checkout@v3 - with: - repository: micropython/micropython-lib - path: micropython-lib - - - name: Fetch Pico submodules - if: steps.cache.outputs.cache-hit != 'true' - shell: bash - working-directory: micropython/ports/rp2 - run: | - git submodule update --init ../../lib/pico-sdk - git submodule update --init ../../lib/cyw43-driver - git submodule update --init ../../lib/lwip - git submodule update --init ../../lib/mbedtls - git submodule update --init ../../lib/micropython-lib - git submodule update --init ../../lib/tinyusb - git submodule update --init ../../lib/btstack - - - name: Build mpy-cross - if: steps.cache.outputs.cache-hit != 'true' - shell: bash - working-directory: micropython/mpy-cross - run: make - build: - needs: deps - name: ${{matrix.name}} (${{matrix.board}}) + name: ${{ matrix.name }} (${{ matrix.board }}) runs-on: ubuntu-20.04 strategy: matrix: @@ -82,7 +30,6 @@ jobs: board: PIMORONI_TUFTY2040 - name: enviro board: PICO_W_ENVIRO - patch: true - name: galactic_unicorn board: RPI_PICO_W - name: cosmic_unicorn @@ -91,93 +38,81 @@ jobs: board: RPI_PICO_W - name: inky_frame board: PICO_W_INKY - patch: true env: # MicroPython version will be contained in github.event.release.tag_name for releases - RELEASE_FILE: pimoroni-${{matrix.name}}-${{github.event.release.tag_name || github.sha}}-micropython - MICROPY_BOARD_DIR: "$GITHUB_WORKSPACE/pimoroni-pico-${{ github.sha }}/micropython/board/${{ matrix.BOARD }}" - USER_C_MODULES: "$GITHUB_WORKSPACE/pimoroni-pico-${{ github.sha }}/micropython/modules/micropython-${{matrix.name}}.cmake" + RELEASE_FILE: pimoroni-${{ matrix.name }}-${{ github.event.release.tag_name || github.sha }}-micropython + PIMORONI_PICO_DIR: "${{ github.workspace }}/pimoroni-pico-${{ github.sha }}" + MICROPY_BOARD_DIR: "${{ github.workspace }}/pimoroni-pico-${{ github.sha }}/micropython/board/${{ matrix.BOARD }}" + USER_C_MODULES: "${{ github.workspace }}/pimoroni-pico-${{ github.sha }}/micropython/modules/micropython-${{ matrix.name }}.cmake" + TAG_OR_SHA: ${{ github.event.release.tag_name || github.sha }} + MICROPY_BOARD: ${{ matrix.board }} + BOARD_NAME: ${{ matrix.name }} + BUILD_TOOLS: pimoroni-pico-${{ github.sha }}/ci/micropython.sh steps: - name: Compiler Cache uses: actions/cache@v3 with: path: /home/runner/.ccache - key: ccache-micropython-${{matrix.name}}-${{github.ref}}-${{github.sha}} + key: ccache-micropython-${{ matrix.name }}-${{ github.ref }}-${{ github.sha }} restore-keys: | - ccache-micropython-${{matrix.name}}-${{github.ref}} - ccache-micropython-${{matrix.name}}- + ccache-micropython-${{ matrix.name }}-${{ github.ref }} + ccache-micropython-${{ matrix.name }}- - - name: Workspace Cache - uses: actions/cache@v3 - with: - path: ${{runner.workspace}} - key: workspace-micropython-${{env.MICROPYTHON_VERSION}}-${{env.WORKFLOW_VERSION}} - restore-keys: | - workspace-micropython-${{env.MICROPYTHON_VERSION}}-${{env.WORKFLOW_VERSION}} - - - name: Install Compiler & CCache - if: runner.os == 'Linux' - run: | - sudo apt update && sudo apt install ccache gcc-arm-none-eabi - - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true path: pimoroni-pico-${{ github.sha }} - - - name: Set MicroPython Version Env Vars - shell: bash + + - name: Install Compiler & CCache run: | - echo "MICROPY_GIT_TAG=$MICROPYTHON_VERSION, ${{matrix.name}} ${{github.event.release.tag_name || github.sha}}" >> $GITHUB_ENV - echo "MICROPY_GIT_HASH=$MICROPYTHON_VERSION-${{github.event.release.tag_name || github.sha}}" >> $GITHUB_ENV + source $BUILD_TOOLS + build_deps + + - name: Checkout MicroPython & MicroPython Libs + run: | + source $BUILD_TOOLS + clone_micropython_lib + clone_micropython - name: "HACK: CMakeLists.txt Disable C++ Exceptions Patch" shell: bash - working-directory: micropython - run: git apply $GITHUB_WORKSPACE/pimoroni-pico-${{ github.sha }}/micropython/micropython_nano_specs.patch + run: | + source $BUILD_TOOLS + hack_patch_micropython_disable_exceptions - name: "HACK: Pico SDK Patch" - if: matrix.patch == true shell: bash - working-directory: micropython run: | - $GITHUB_WORKSPACE/pimoroni-pico-${{ github.sha }}/micropython/board/pico-sdk-patch.sh ${{matrix.board}} + source $BUILD_TOOLS + hack_patch_pico_sdk - name: Configure MicroPython shell: bash - working-directory: micropython/ports/rp2 run: | - cmake -S . -B build-${{matrix.name}} -DPICO_BUILD_DOCS=0 -DUSER_C_MODULES=${{env.USER_C_MODULES}} -DMICROPY_BOARD_DIR=${{env.MICROPY_BOARD_DIR}} -DMICROPY_BOARD=${{matrix.board}} -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + source $BUILD_TOOLS + cmake_configure - - name: Build MicroPython # Multiple simultaneous jobs trigger https://github.com/pimoroni/pimoroni-pico/issues/761 + - name: Build MicroPython shell: bash - working-directory: micropython/ports/rp2 run: | - ccache --zero-stats || true - cmake --build build-${{matrix.name}} -j 1 - ccache --show-stats || true - - - name: Rename .uf2 for artifact - shell: bash - working-directory: micropython/ports/rp2/build-${{matrix.name}} - run: | - cp firmware.uf2 $RELEASE_FILE.uf2 + source $BUILD_TOOLS + cmake_build - name: Store .uf2 as artifact uses: actions/upload-artifact@v3 with: - name: ${{env.RELEASE_FILE}}.uf2 - path: micropython/ports/rp2/build-${{matrix.name}}/${{env.RELEASE_FILE}}.uf2 + name: ${{ env.RELEASE_FILE }}.uf2 + path: build-${{ matrix.name }}/${{ env.RELEASE_FILE }}.uf2 - name: Upload .uf2 if: github.event_name == 'release' uses: actions/upload-release-asset@v1 env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - asset_path: micropython/ports/rp2/build-${{matrix.name}}/firmware.uf2 - upload_url: ${{github.event.release.upload_url}} - asset_name: ${{env.RELEASE_FILE}}.uf2 + asset_path: build-${{ matrix.name }}/firmware.uf2 + upload_url: ${{ github.event.release.upload_url }} + asset_name: ${{ env.RELEASE_FILE }}.uf2 asset_content_type: application/octet-stream diff --git a/ci/micropython.sh b/ci/micropython.sh new file mode 100644 index 00000000..ec0447fb --- /dev/null +++ b/ci/micropython.sh @@ -0,0 +1,77 @@ +export TERM=${TERM:="xterm-256color"} + +function log_success { + echo -e "$(tput setaf 2)$1$(tput sgr0)" +} + +function log_inform { + echo -e "$(tput setaf 6)$1$(tput sgr0)" +} + +function log_warning { + echo -e "$(tput setaf 1)$1$(tput sgr0)" +} + +function clone_micropython_lib { + git clone https://github.com/micropython/micropython-lib --depth=1 +} + +function clone_micropython { + log_inform "Using MicroPython $MICROPYTHON_VERSION" + git clone https://github.com/micropython/micropython --depth=1 --branch=$MICROPYTHON_VERSION + cd micropython + git submodule update --init lib/pico-sdk + git submodule update --init lib/cyw43-driver + git submodule update --init lib/lwip + git submodule update --init lib/mbedtls + git submodule update --init lib/micropython-lib + git submodule update --init lib/tinyusb + git submodule update --init lib/btstack + cd mpy-cross + make + cd ../../ +} + +function build_deps { + sudo apt update && sudo apt install ccache gcc-arm-none-eabi +} + +function clone_pimoroni_pico { + git clone https://github.com/micropython/micropython --branch=$PIMORONI_PICO_SHA --depth=1 +} + +function micropython_version { + echo "MICROPY_GIT_TAG=\"$MICROPYTHON_VERSION, $BOARD_NAME $TAG_OR_SHA\"" >> $GITHUB_ENV + echo "MICROPY_GIT_HASH=\"$MICROPYTHON_VERSION-$TAG_OR_SHA\"" >> $GITHUB_ENV +} + +function hack_patch_micropython_disable_exceptions { + cd micropython + git apply $PIMORONI_PICO_DIR/micropython/micropython_nano_specs.patch + cd ../ +} + +function hack_patch_pico_sdk { + # pico-sdk-patch.sh will apply the patch if it exists + cd micropython + $PIMORONI_PICO_DIR/micropython/board/pico-sdk-patch.sh $MICROPY_BOARD + cd ../ +} + +function cmake_configure { + cmake -S micropython/ports/rp2 -B build-$BOARD_NAME \ + -DPICO_BUILD_DOCS=0 \ + -DUSER_C_MODULES=$USER_C_MODULES \ + -DMICROPY_BOARD_DIR=$MICROPY_BOARD_DIR \ + -DMICROPY_BOARD=$MICROPY_BOARD \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache +} + +function cmake_build { + ccache --zero-stats || true + cmake --build build-$BOARD_NAME -j 2 + ccache --show-stats || true + cd build-$BOARD_NAME + cp firmware.uf2 $RELEASE_FILE.uf2 +} \ No newline at end of file diff --git a/micropython/modules_py/modules_py.cmake b/micropython/modules_py/modules_py.cmake index f0951441..0573f665 100644 --- a/micropython/modules_py/modules_py.cmake +++ b/micropython/modules_py/modules_py.cmake @@ -2,28 +2,28 @@ set(MODULES_DIR ${CMAKE_CURRENT_LIST_DIR}) function (copy_module MODULE) add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/../modules/${MODULE} + OUTPUT ${MICROPY_PORT_DIR}/modules/${MODULE} COMMAND - cp ${MODULES_DIR}/${MODULE} ${CMAKE_CURRENT_BINARY_DIR}/../modules/${MODULE} + cp ${MODULES_DIR}/${MODULE} ${MICROPY_PORT_DIR}/modules/${MODULE} DEPENDS ${MODULES_DIR}/${MODULE} ) - target_sources(usermod_modules_py INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/../modules/${MODULE}) + target_sources(usermod_modules_py INTERFACE ${MICROPY_PORT_DIR}/modules/${MODULE}) endfunction() function (genversion VERSION_FILE) add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/../modules/${VERSION_FILE} + OUTPUT ${MICROPY_PORT_DIR}/modules/${VERSION_FILE} COMMAND - bash ${MODULES_DIR}/genversion.sh ${CMAKE_CURRENT_BINARY_DIR}/../modules/${VERSION_FILE} + bash ${MODULES_DIR}/genversion.sh ${MICROPY_PORT_DIR}/modules/${VERSION_FILE} DEPENDS ${MODULES_DIR}/genversion.sh ) - target_sources(usermod_modules_py INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/../modules/${VERSION_FILE}) + target_sources(usermod_modules_py INTERFACE ${MICROPY_PORT_DIR}/modules/${VERSION_FILE}) endfunction() # Create a dummy usermod to hang our .py copies from From 116bbb1296cd49d2c8e1fd9bd307bcd9eaf2b9ea Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Thu, 16 Nov 2023 12:37:36 +0000 Subject: [PATCH 6/9] CI: Use arm-none-eabi-gcc-action Speeds up toolchain install (when cached) to ~7s an decouples us from the runner OS ARM GCC version. --- .github/workflows/micropython.yml | 11 ++++++++--- ci/micropython.sh | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/micropython.yml b/.github/workflows/micropython.yml index 10c83cd4..704d4032 100644 --- a/.github/workflows/micropython.yml +++ b/.github/workflows/micropython.yml @@ -59,13 +59,18 @@ jobs: restore-keys: | ccache-micropython-${{ matrix.name }}-${{ github.ref }} ccache-micropython-${{ matrix.name }}- - + - uses: actions/checkout@v4 with: submodules: true path: pimoroni-pico-${{ github.sha }} - - - name: Install Compiler & CCache + + - name: Install Arm GNU Toolchain (arm-none-eabi-gcc) + uses: carlosperate/arm-none-eabi-gcc-action@v1 + with: + release: '9-2020-q2' + + - name: Install CCache run: | source $BUILD_TOOLS build_deps diff --git a/ci/micropython.sh b/ci/micropython.sh index ec0447fb..c52b4b7f 100644 --- a/ci/micropython.sh +++ b/ci/micropython.sh @@ -33,7 +33,7 @@ function clone_micropython { } function build_deps { - sudo apt update && sudo apt install ccache gcc-arm-none-eabi + sudo apt update && sudo apt install ccache } function clone_pimoroni_pico { From b5df0ac277909a0f73dbd6030ac141fd620f11f8 Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Thu, 16 Nov 2023 13:12:59 +0000 Subject: [PATCH 7/9] CI: Setup version env, patch skipped message. --- .github/workflows/micropython.yml | 1 + ci/micropython.sh | 4 ++-- micropython/board/pico-sdk-patch.sh | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/micropython.yml b/.github/workflows/micropython.yml index 704d4032..1c7cb5fc 100644 --- a/.github/workflows/micropython.yml +++ b/.github/workflows/micropython.yml @@ -97,6 +97,7 @@ jobs: shell: bash run: | source $BUILD_TOOLS + micropython_version cmake_configure - name: Build MicroPython diff --git a/ci/micropython.sh b/ci/micropython.sh index c52b4b7f..919c74a5 100644 --- a/ci/micropython.sh +++ b/ci/micropython.sh @@ -41,8 +41,8 @@ function clone_pimoroni_pico { } function micropython_version { - echo "MICROPY_GIT_TAG=\"$MICROPYTHON_VERSION, $BOARD_NAME $TAG_OR_SHA\"" >> $GITHUB_ENV - echo "MICROPY_GIT_HASH=\"$MICROPYTHON_VERSION-$TAG_OR_SHA\"" >> $GITHUB_ENV + echo "MICROPY_GIT_TAG=$MICROPYTHON_VERSION, $BOARD_NAME $TAG_OR_SHA" >> $GITHUB_ENV + echo "MICROPY_GIT_HASH=$MICROPYTHON_VERSION-$TAG_OR_SHA" >> $GITHUB_ENV } function hack_patch_micropython_disable_exceptions { diff --git a/micropython/board/pico-sdk-patch.sh b/micropython/board/pico-sdk-patch.sh index eb2ea42e..15135a07 100755 --- a/micropython/board/pico-sdk-patch.sh +++ b/micropython/board/pico-sdk-patch.sh @@ -7,4 +7,6 @@ if [[ -f "$FIXUP_DIR/$BOARD/pico_sdk.patch" ]]; then echo "Applying pico_sdk.patch" cd $MPY_DIR/lib/pico-sdk git apply "$FIXUP_DIR/$BOARD/pico_sdk.patch" +else + echo "Skipping patch. $FIXUP_DIR/$BOARD/pico_sdk.patch not found!" fi \ No newline at end of file From b6953c25a1a5abe6ba2d853bd6965ac634b854e8 Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Thu, 16 Nov 2023 14:43:58 +0000 Subject: [PATCH 8/9] CI: Tidy up build steps --- .github/workflows/micropython.yml | 3 +-- ci/micropython.sh | 8 -------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/.github/workflows/micropython.yml b/.github/workflows/micropython.yml index 1c7cb5fc..6b4b1302 100644 --- a/.github/workflows/micropython.yml +++ b/.github/workflows/micropython.yml @@ -75,10 +75,9 @@ jobs: source $BUILD_TOOLS build_deps - - name: Checkout MicroPython & MicroPython Libs + - name: Checkout MicroPython & Submodules run: | source $BUILD_TOOLS - clone_micropython_lib clone_micropython - name: "HACK: CMakeLists.txt Disable C++ Exceptions Patch" diff --git a/ci/micropython.sh b/ci/micropython.sh index 919c74a5..39cd3e70 100644 --- a/ci/micropython.sh +++ b/ci/micropython.sh @@ -12,10 +12,6 @@ function log_warning { echo -e "$(tput setaf 1)$1$(tput sgr0)" } -function clone_micropython_lib { - git clone https://github.com/micropython/micropython-lib --depth=1 -} - function clone_micropython { log_inform "Using MicroPython $MICROPYTHON_VERSION" git clone https://github.com/micropython/micropython --depth=1 --branch=$MICROPYTHON_VERSION @@ -36,10 +32,6 @@ function build_deps { sudo apt update && sudo apt install ccache } -function clone_pimoroni_pico { - git clone https://github.com/micropython/micropython --branch=$PIMORONI_PICO_SHA --depth=1 -} - function micropython_version { echo "MICROPY_GIT_TAG=$MICROPYTHON_VERSION, $BOARD_NAME $TAG_OR_SHA" >> $GITHUB_ENV echo "MICROPY_GIT_HASH=$MICROPYTHON_VERSION-$TAG_OR_SHA" >> $GITHUB_ENV From bd6bd289d1011db8566eb68e6527e5c83c8fed53 Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Thu, 16 Nov 2023 15:07:38 +0000 Subject: [PATCH 9/9] CI: Try to ccache mpy-cross --- .github/workflows/micropython.yml | 9 +++++++-- ci/micropython.sh | 14 ++++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/.github/workflows/micropython.yml b/.github/workflows/micropython.yml index 6b4b1302..19f2d2cb 100644 --- a/.github/workflows/micropython.yml +++ b/.github/workflows/micropython.yml @@ -73,12 +73,17 @@ jobs: - name: Install CCache run: | source $BUILD_TOOLS - build_deps + apt_install_build_deps - name: Checkout MicroPython & Submodules run: | source $BUILD_TOOLS - clone_micropython + micropython_clone + + - name: Build MPY Cross + run: | + source $BUILD_TOOLS + micropython_build_mpy_cross - name: "HACK: CMakeLists.txt Disable C++ Exceptions Patch" shell: bash diff --git a/ci/micropython.sh b/ci/micropython.sh index 39cd3e70..a109a1df 100644 --- a/ci/micropython.sh +++ b/ci/micropython.sh @@ -12,7 +12,7 @@ function log_warning { echo -e "$(tput setaf 1)$1$(tput sgr0)" } -function clone_micropython { +function micropython_clone { log_inform "Using MicroPython $MICROPYTHON_VERSION" git clone https://github.com/micropython/micropython --depth=1 --branch=$MICROPYTHON_VERSION cd micropython @@ -23,12 +23,18 @@ function clone_micropython { git submodule update --init lib/micropython-lib git submodule update --init lib/tinyusb git submodule update --init lib/btstack - cd mpy-cross - make + cd ../ +} + +function micropython_build_mpy_cross { + cd micropython/mpy-cross + ccache --zero-stats || true + CROSS_COMPILE="ccache " make + ccache --show-stats || true cd ../../ } -function build_deps { +function apt_install_build_deps { sudo apt update && sudo apt install ccache }