summaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
authorCédric Berger <[email protected]>2026-02-22 21:39:14 +0100
committerGitHub <[email protected]>2026-02-22 21:39:14 +0100
commit942479407e3bfb4e0800aeb428dc2a3d03d77ded (patch)
treef6f65d88bfe1789f06c1d788994bb73f4871cc5f /.github
parent90d0514630d9b0f6d50881aabd82dcd613141f6b (diff)
parentdc072da5cc6a6b326a832f104c0a395d119ce35c (diff)
Merge branch 'hathach:master' into non-blocking-host-v2
Diffstat (limited to '.github')
-rw-r--r--.github/actions/get_deps/action.yml1
-rw-r--r--.github/membrowse-targets.json494
-rw-r--r--.github/workflows/build.yml75
-rw-r--r--.github/workflows/build_util.yml58
-rwxr-xr-x.github/workflows/ci_set_matrix.py74
-rw-r--r--.github/workflows/membrowse-report.yml101
6 files changed, 108 insertions, 695 deletions
diff --git a/.github/actions/get_deps/action.yml b/.github/actions/get_deps/action.yml
index a84db893b..bbe94f0fa 100644
--- a/.github/actions/get_deps/action.yml
+++ b/.github/actions/get_deps/action.yml
@@ -22,6 +22,7 @@ runs:
NINJA_URL=https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-linux.zip
wget $NINJA_URL -O ninja-linux.zip
unzip ninja-linux.zip -d ninja-bin
+ pip install membrowse
echo >> $GITHUB_PATH "${{ github.workspace }}/ninja-bin"
shell: bash
diff --git a/.github/membrowse-targets.json b/.github/membrowse-targets.json
deleted file mode 100644
index 05c90c74e..000000000
--- a/.github/membrowse-targets.json
+++ /dev/null
@@ -1,494 +0,0 @@
-{
- "templates": {
- "build_cmd": "python3 tools/build.py -s cmake -b ${board}",
- "elf": "cmake-build/cmake-build-${board}/device/${example}/${example}.elf",
- "setup_cmd": "${toolchain.setup_cmd} && python3 tools/get_deps.py ${get_deps}",
- "get_deps": "${port}"
- },
- "toolchains": {
- "arm-none-eabi-gcc-14": {
- "setup_cmd": "NINJA_URL=https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-linux.zip && wget -q $NINJA_URL -O ninja-linux.zip && unzip -q ninja-linux.zip -d $HOME/bin && echo \"$HOME/bin\" >> $GITHUB_PATH && TOOLCHAIN_URL=https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v14.2.1-1.1/xpack-arm-none-eabi-gcc-14.2.1-1.1-linux-x64.tar.gz && mkdir -p $HOME/toolchain && wget -q $TOOLCHAIN_URL -O toolchain.tar.gz && tar -C $HOME/toolchain -xf toolchain.tar.gz && echo \"$HOME/toolchain/xpack-arm-none-eabi-gcc-14.2.1-1.1/bin\" >> $GITHUB_PATH"
- },
- "aarch64-none-elf-gcc-10": {
- "setup_cmd": "NINJA_URL=https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-linux.zip && wget -q $NINJA_URL -O ninja-linux.zip && unzip -q ninja-linux.zip -d $HOME/bin && echo \"$HOME/bin\" >> $GITHUB_PATH && TOOLCHAIN_URL=https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz && mkdir -p $HOME/toolchain && wget -q $TOOLCHAIN_URL -O toolchain.tar.xz && tar -C $HOME/toolchain -xf toolchain.tar.xz && echo \"$HOME/toolchain/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin\" >> $GITHUB_PATH"
- },
- "riscv-none-elf-gcc-13": {
- "setup_cmd": "NINJA_URL=https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-linux.zip && wget -q $NINJA_URL -O ninja-linux.zip && unzip -q ninja-linux.zip -d $HOME/bin && echo \"$HOME/bin\" >> $GITHUB_PATH && TOOLCHAIN_URL=https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v13.2.0-2/xpack-riscv-none-elf-gcc-13.2.0-2-linux-x64.tar.gz && mkdir -p $HOME/toolchain && wget -q $TOOLCHAIN_URL -O toolchain.tar.gz && tar -C $HOME/toolchain -xf toolchain.tar.gz && echo \"$HOME/toolchain/xpack-riscv-none-elf-gcc-13.2.0-2/bin\" >> $GITHUB_PATH"
- },
- "msp430-gcc-9": {
- "setup_cmd": "NINJA_URL=https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-linux.zip && wget -q $NINJA_URL -O ninja-linux.zip && unzip -q ninja-linux.zip -d $HOME/bin && echo \"$HOME/bin\" >> $GITHUB_PATH && TOOLCHAIN_URL=http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/9_2_0_0/export/msp430-gcc-9.2.0.50_linux64.tar.bz2 && mkdir -p $HOME/toolchain && wget -q $TOOLCHAIN_URL -O toolchain.tar.bz2 && tar -C $HOME/toolchain -xf toolchain.tar.bz2 && echo \"$HOME/toolchain/msp430-gcc-9.2.0.50_linux64/bin\" >> $GITHUB_PATH"
- }
- },
- "targets": [
- {
- "port": "at32f402_405",
- "board": "at_start_f402",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/artery/at32f402_405/libraries/cmsis/cm4/device_support/startup/gcc/linker/AT32F402xC_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "at32f403a_407",
- "board": "at32f403a_weact_blackpill",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/artery/at32f403a_407/libraries/cmsis/cm4/device_support/startup/gcc/linker/AT32F403AxC_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "at32f413",
- "board": "at_start_f413",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/artery/at32f413/libraries/cmsis/cm4/device_support/startup/gcc/linker/AT32F413xC_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "at32f415",
- "board": "at_start_f415",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/artery/at32f415/libraries/cmsis/cm4/device_support/startup/gcc/linker/AT32F415xC_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "at32f423",
- "board": "at_start_f423",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/artery/at32f423/libraries/cmsis/cm4/device_support/startup/gcc/linker/AT32F423xC_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "at32f425",
- "board": "at_start_f425",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/artery/at32f425/libraries/cmsis/cm4/device_support/startup/gcc/linker/AT32F425x8_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "at32f435_437",
- "board": "at_start_f435",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/artery/at32f435_437/libraries/cmsis/cm4/device_support/startup/gcc/linker/AT32F435xM_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "broadcom_32bit",
- "board": "raspberrypi_zero",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/broadcom/broadcom/link.ld",
- "example": "cdc_msc"
- },
- {
- "port": "broadcom_64bit",
- "board": "raspberrypi_cm4",
- "toolchain": "aarch64-none-elf-gcc-10",
- "ld": "hw/mcu/broadcom/broadcom/link8.ld",
- "example": "cdc_msc"
- },
- {
- "port": "ch32v10x",
- "board": "ch32v103r_r1_1v0",
- "toolchain": "riscv-none-elf-gcc-13",
- "ld": "hw/bsp/ch32v10x/linker/ch32v10x.ld",
- "linker_vars": "__FLASH_SIZE=64K __RAM_SIZE=20K",
- "example": "cdc_msc"
- },
- {
- "port": "ch32v20x",
- "board": "ch32v203c_r0_1v0",
- "toolchain": "riscv-none-elf-gcc-13",
- "ld": "hw/bsp/ch32v20x/linker/ch32v20x.ld",
- "linker_vars": "__flash_size=64K __ram_size=20K",
- "example": "cdc_msc"
- },
- {
- "port": "ch32v30x",
- "board": "ch32v307v_r1_1v0",
- "toolchain": "riscv-none-elf-gcc-13",
- "ld": "hw/bsp/ch32v30x/linker/ch32v30x.ld",
- "linker_vars": "__flash_size=128K __ram_size=32K",
- "example": "cdc_msc"
- },
- {
- "port": "da1469x",
- "board": "da14695_dk_usb",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/da1469x/linker/da1469x.ld",
- "example": "cdc_msc"
- },
- {
- "port": "fomu",
- "board": "fomu",
- "toolchain": "riscv-none-elf-gcc-13",
- "ld": "hw/bsp/fomu/fomu.ld",
- "example": "cdc_msc"
- },
- {
- "port": "gd32vf103",
- "board": "sipeed_longan_nano",
- "toolchain": "riscv-none-elf-gcc-13",
- "ld": "hw/mcu/gd/nuclei-sdk/SoC/gd32vf103/Board/gd32vf103c_longan_nano/Source/GCC/gcc_gd32vf103xb_flashxip.ld",
- "linker_vars": "__ROM_BASE=0x08000000 __ROM_SIZE=0x00020000 __RAM_BASE=0x20000000 __RAM_SIZE=0x00008000",
- "example": "cdc_msc"
- },
- {
- "port": "hpmicro",
- "board": "hpm6750evk2",
- "toolchain": "riscv-none-elf-gcc-13",
- "ld": "hw/mcu/hpmicro/hpm_sdk/soc/HPM6700/HPM6750/toolchains/gcc/flash_xip.ld",
- "linker_vars": "_flash_size=16M _stack_size=16K _heap_size=16K",
- "example": "cdc_msc"
- },
- {
- "port": "imxrt",
- "board": "metro_m7_1011",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/nxp/mcux-sdk/devices/MIMXRT1011/gcc/MIMXRT1011xxxxx_flexspi_nor.ld",
- "example": "cdc_msc"
- },
- {
- "port": "kinetis_k",
- "board": "frdm_k64f",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/nxp/mcux-sdk/devices/MK64F12/gcc/MK64FN1M0xxx12_flash.ld",
- "get_deps": "kinetis_k kinetis_kl",
- "example": "cdc_msc"
- },
- {
- "port": "kinetis_k32l2",
- "board": "frdm_k32l2a4s",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/nxp/mcux-sdk/devices/K32L2A41A/gcc/K32L2A41xxxxA_flash.ld",
- "example": "cdc_msc"
- },
- {
- "port": "kinetis_kl",
- "board": "frdm_kl25z",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/kinetis_kl/gcc/MKL25Z128xxx4_flash.ld",
- "example": "cdc_msc"
- },
- {
- "port": "lpc11",
- "board": "lpcxpresso11u37",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/lpc11/boards/lpcxpresso11u37/lpc11u37.ld",
- "example": "cdc_msc"
- },
- {
- "port": "lpc13",
- "board": "lpcxpresso1347",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/lpc13/boards/lpcxpresso1347/lpc1347.ld",
- "example": "cdc_msc"
- },
- {
- "port": "lpc15",
- "board": "lpcxpresso1549",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/lpc15/boards/lpcxpresso1549/lpc1549.ld",
- "example": "cdc_msc"
- },
- {
- "port": "lpc17",
- "board": "lpcxpresso1769",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/lpc17/boards/lpcxpresso1769/lpc1769.ld",
- "example": "cdc_msc"
- },
- {
- "port": "lpc18",
- "board": "lpcxpresso18s37",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/lpc18/boards/lpcxpresso18s37/lpc1837.ld",
- "example": "cdc_msc"
- },
- {
- "port": "lpc40",
- "board": "ea4088_quickstart",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/lpc40/boards/ea4088_quickstart/lpc4088.ld",
- "example": "cdc_msc"
- },
- {
- "port": "lpc43",
- "board": "ea4357",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/lpc43/boards/ea4357/lpc4357.ld",
- "example": "cdc_msc"
- },
- {
- "port": "lpc51",
- "board": "lpcxpresso51u68",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/nxp/mcux-sdk/devices/LPC51U68/gcc/LPC51U68_flash.ld",
- "example": "cdc_msc"
- },
- {
- "port": "lpc54",
- "board": "lpcxpresso54114",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/nxp/mcux-sdk/devices/LPC54114/gcc/LPC54114J256_cm4_flash.ld",
- "example": "cdc_msc"
- },
- {
- "port": "lpc55",
- "board": "double_m33_express",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/lpc55/boards/double_m33_express/LPC55S69_cm33_core0_uf2.ld",
- "example": "cdc_msc"
- },
- {
- "port": "maxim",
- "board": "apard32690",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/maxim/linker/max32690.ld",
- "example": "cdc_msc"
- },
- {
- "port": "mcx",
- "board": "frdm_mcxa153",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/nxp/mcux-sdk/devices/MCXA153/gcc/MCXA153_flash.ld",
- "example": "cdc_msc"
- },
- {
- "port": "mm32",
- "board": "mm32f327x_mb39",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/mm32/boards/mm32f327x_mb39/flash.ld",
- "example": "cdc_msc"
- },
- {
- "port": "msp430",
- "board": "msp_exp430f5529lp",
- "toolchain": "msp430-gcc-9",
- "ld": "hw/mcu/ti/msp430/msp430-gcc-support-files/include/msp430f5529.ld",
- "example": "cdc_msc"
- },
- {
- "port": "msp432e4",
- "board": "msp_exp432e401y",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/ti/msp432e4/Source/msp432e411y.ld",
- "example": "cdc_msc"
- },
- {
- "port": "nrf",
- "board": "adafruit_clue",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/nrf/linker/nrf52840_xxaa.ld",
- "example": "cdc_msc"
- },
- {
- "port": "nuc100_120",
- "board": "nutiny_sdk_nuc120",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/nuc100_120/boards/nutiny_sdk_nuc120/nuc120_flash.ld",
- "example": "cdc_msc"
- },
- {
- "port": "nuc121_125",
- "board": "nutiny_sdk_nuc121",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/nuc121_125/boards/nutiny_sdk_nuc121/nuc121_flash.ld",
- "example": "cdc_msc"
- },
- {
- "port": "nuc126",
- "board": "nutiny_nuc126v",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/nuc126/boards/nutiny_nuc126v/nuc126_flash.ld",
- "example": "cdc_msc"
- },
- {
- "port": "nuc505",
- "board": "nutiny_sdk_nuc505",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/nuc505/boards/nutiny_sdk_nuc505/nuc505_flashtoram.ld",
- "example": "cdc_msc"
- },
- {
- "port": "ra",
- "board": "portenta_c33",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/ra/boards/portenta_c33/script/memory_regions.ld hw/bsp/ra/boards/portenta_c33/script/fsp.ld",
- "example": "cdc_msc"
- },
- {
- "port": "rw61x",
- "board": "frdm_rw612",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/nxp/mcux-sdk/devices/RW612/gcc/RW612_flash.ld",
- "example": "cdc_msc"
- },
- {
- "port": "samd11",
- "board": "cynthion_d11",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/samd11/boards/cynthion_d11/cynthion_d11.ld",
- "linker_vars": "BOOTLOADER_SIZE=0x800",
- "example": "cdc_dual_ports"
- },
- {
- "port": "samd5x_e5x",
- "board": "metro_m4_express",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/samd5x_e5x/boards/metro_m4_express/metro_m4_express.ld",
- "example": "cdc_msc"
- },
- {
- "port": "samg",
- "board": "samg55_xplained",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/samg/boards/samg55_xplained/samg55j19_flash.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32c0",
- "board": "stm32c071nucleo",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32c0/boards/stm32c071nucleo/STM32C071RBTx_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32f0",
- "board": "stm32f070rbnucleo",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32f0/boards/stm32f070rbnucleo/stm32F070rbtx_flash.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32f1",
- "board": "stm32f103_bluepill",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32f1/boards/stm32f103_bluepill/STM32F103X8_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32f2",
- "board": "stm32f207nucleo",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32f2/boards/stm32f207nucleo/STM32F207ZGTx_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32f3",
- "board": "stm32f303disco",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32f3/boards/stm32f303disco/STM32F303VCTx_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32f4",
- "board": "feather_stm32f405",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32f4/boards/feather_stm32f405/STM32F405RGTx_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32f7",
- "board": "stlinkv3mini",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32f7/boards/stlinkv3mini/STM32F723xE_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32g0",
- "board": "stm32g0b1nucleo",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32g0/boards/stm32g0b1nucleo/STM32G0B1RETx_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32g4",
- "board": "b_g474e_dpow1",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32g4/boards/b_g474e_dpow1/STM32G474RETx_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32h5",
- "board": "stm32h503nucleo",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32h5/linker/STM32H533xx_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32h7",
- "board": "stm32h743eval",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32h7/linker/stm32h743xx_flash.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32h7rs",
- "board": "stm32h7s3nucleo",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32h7rs/linker/stm32h7s3xx_flash.ld",
- "linker_vars": "__FLASH_BEGIN=0x08000000 __FLASH_SIZE=0x00010000 __RAM_BEGIN=0x24000000 __RAM_SIZE=0x4FC00 __RAM_NONCACHEABLEBUFFER_SIZE=0x400",
- "example": "cdc_msc"
- },
- {
- "port": "stm32l0",
- "board": "stm32l052dap52",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32l0/boards/stm32l052dap52/STM32L052K8Ux_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32l4",
- "board": "stm32l412nucleo",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32l4/boards/stm32l412nucleo/STM32L412KBUx_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32n6",
- "board": "stm32n6570dk",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32n6/boards/stm32n6570dk/STM32N657XX_AXISRAM2_fsbl.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32u0",
- "board": "stm32u083cdk",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32u0/boards/stm32u083cdk/STM32U083MCTx_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32u5",
- "board": "b_u585i_iot2a",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32u5/linker/STM32U5A9xx_FLASH.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32wb",
- "board": "stm32wb55nucleo",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32wb/boards/stm32wb55nucleo/stm32wb55xx_flash_cm4.ld",
- "example": "cdc_msc"
- },
- {
- "port": "stm32wba",
- "board": "stm32wba_nucleo",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/stm32wba/linker/STM32WBA65xx_FLASH_ns.ld",
- "example": "cdc_msc"
- },
- {
- "port": "tm4c",
- "board": "ek_tm4c123gxl",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/bsp/tm4c/boards/ek_tm4c123gxl/tm4c123.ld",
- "example": "cdc_msc"
- },
- {
- "port": "xmc4000",
- "board": "xmc4500_relax",
- "toolchain": "arm-none-eabi-gcc-14",
- "ld": "hw/mcu/infineon/mtb-xmclib-cat3/CMSIS/Infineon/COMPONENT_XMC4500/Source/TOOLCHAIN_GCC_ARM/XMC4500x1024.ld",
- "example": "cdc_msc"
- }
- ]
-}
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 352875a9d..9d8b90f5a 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -47,8 +47,6 @@ jobs:
- '.github/workflows/ci_set_matrix.py'
set-matrix:
- needs: [ check-paths ]
- if: needs.check-paths.outputs.code_changed == 'true'
runs-on: ubuntu-latest
outputs:
json: ${{ steps.set-matrix-json.outputs.matrix }}
@@ -75,7 +73,7 @@ jobs:
# For Make and IAR build: will be done on CircleCI only (one random per family as well)
# ------------------------------------------------------------------------------
cmake:
- needs: set-matrix
+ needs: [ check-paths, set-matrix ]
uses: ./.github/workflows/build_util.yml
strategy:
fail-fast: false
@@ -93,10 +91,14 @@ jobs:
build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.json)[matrix.toolchain]) }}
build-options: '--one-first'
upload-metrics: true
- upload-artifacts: true
+ upload-artifacts: false
+ upload-membrowse: true
+ code-changed: ${{ needs.check-paths.outputs.code_changed == 'true' }}
+ secrets: inherit
code-metrics:
- needs: cmake
+ needs: [ check-paths, cmake ]
+ if: needs.check-paths.outputs.code_changed == 'true'
runs-on: ubuntu-latest
permissions:
pull-requests: write
@@ -200,11 +202,12 @@ jobs:
fail-fast: false
matrix:
os: [ windows-latest, macos-latest ]
+ build-system: [ 'make', 'cmake' ]
with:
os: ${{ matrix.os }}
- build-system: 'cmake-make'
+ build-system: ${{ matrix.build-system }}
toolchain: 'arm-gcc-${{ matrix.os }}'
- build-args: '["stm32h7"]'
+ build-args: '["stm32h7rs"]'
build-options: '--one-random'
# ---------------------------------------
@@ -213,7 +216,8 @@ jobs:
zephyr:
needs: [ check-paths ]
# skip zephyr build due to failed build, fix later
- if: false && needs.check-paths.outputs.code_changed == 'true'
+ if: false
+ #if: needs.check-paths.outputs.code_changed == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout TinyUSB
@@ -235,8 +239,8 @@ jobs:
# Run on PR only (hil-tinyusb), hil-hfp only run on non-forked PR
# ---------------------------------------
hil-build:
- needs: set-matrix
- if: github.repository_owner == 'hathach'
+ needs: [ check-paths, set-matrix ]
+ if: needs.check-paths.outputs.code_changed == 'true' && github.repository_owner == 'hathach'
uses: ./.github/workflows/build_util.yml
strategy:
fail-fast: false
@@ -297,6 +301,7 @@ jobs:
hil-hfp:
needs: [ check-paths ]
if: |
+ needs.check-paths.outputs.code_changed == 'true' &&
github.repository_owner == 'hathach' &&
!(github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == true)
runs-on: [ self-hosted, Linux, X64, hifiphile ]
@@ -331,53 +336,3 @@ jobs:
- name: Test on actual hardware (hardware in the loop)
run: python3 test/hil/hil_test.py hfp.json
-
- # ---------------------------------------
- # Membrowse Memory Analysis
- # Push: always runs (uses identical for doc-only to maintain commit chain)
- # PR: only runs if code changed (doc-only PRs skip entirely)
- # ---------------------------------------
- membrowse:
- needs: [check-paths, cmake]
- if: |
- always() && !cancelled() && (
- github.event_name == 'push' ||
- github.event_name == 'release' ||
- github.event_name == 'workflow_dispatch' ||
- (github.event_name == 'pull_request' && needs.check-paths.outputs.code_changed == 'true')
- )
- permissions:
- contents: read
- actions: read
- uses: ./.github/workflows/membrowse-report.yml
- with:
- code_changed: ${{ needs.check-paths.outputs.code_changed == 'true' || github.event_name == 'release' || github.event_name == 'workflow_dispatch' }}
- secrets: inherit
-
- membrowse-comment:
- needs: membrowse
- # skip membrowse comment since it is too verbal
- if: false && github.event_name == 'pull_request'
- runs-on: ubuntu-latest
- permissions:
- contents: read
- actions: read
- steps:
- - name: Checkout repository
- uses: actions/checkout@v6
-
- - name: Download report artifacts
- id: download
- uses: actions/download-artifact@v5
- with:
- pattern: membrowse-report-*
- path: reports
- merge-multiple: true
- continue-on-error: true
-
- - name: Upload Membrowse Comment Artifact
- if: steps.download.outcome == 'success'
- uses: actions/upload-artifact@v5
- with:
- name: membrowse-comment
- path: reports/
diff --git a/.github/workflows/build_util.yml b/.github/workflows/build_util.yml
index e62c10ca1..d03c9af81 100644
--- a/.github/workflows/build_util.yml
+++ b/.github/workflows/build_util.yml
@@ -3,6 +3,10 @@ name: Reusable build util
on:
workflow_call:
inputs:
+ os:
+ required: false
+ type: string
+ default: 'ubuntu-latest'
build-system:
required: true
type: string
@@ -24,10 +28,14 @@ on:
required: false
default: false
type: boolean
- os:
+ upload-membrowse:
required: false
- type: string
- default: 'ubuntu-latest'
+ default: false
+ type: boolean
+ code-changed:
+ required: false
+ default: true
+ type: boolean
jobs:
family:
@@ -39,6 +47,8 @@ jobs:
steps:
- name: Checkout TinyUSB
uses: actions/checkout@v6
+ with:
+ fetch-depth: ${{ !inputs.upload-membrowse && 1 || 0 }}
- name: Setup Toolchain
id: setup-toolchain
@@ -52,42 +62,40 @@ jobs:
arg: ${{ matrix.arg }}
- name: Build
+ if: ${{ inputs.code-changed }}
env:
IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }}
- TOOLCHAIN: ${{ inputs.toolchain }}
run: |
- if [ "$TOOLCHAIN" == "esp-idf" ]; then
- docker run --rm -v $PWD:/project -w /project espressif/idf:tinyusb python tools/build.py ${{ matrix.arg }}
- elif [ "${{ inputs.build-system }}" == "cmake-make" ] || [ "${{ inputs.build-system }}" == "make-cmake" ]; then
- python tools/build.py -s make ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} ${{ matrix.arg }}
- python tools/build.py -s cmake ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} ${{ matrix.arg }}
+ if [ "${{ inputs.toolchain }}" == "esp-idf" ]; then
+ docker run --rm -e MEMBROWSE_API_KEY="$MEMBROWSE_API_KEY" -v $PWD:/project -w /project espressif/idf:tinyusb python tools/build.py --target all ${{ matrix.arg }}
else
- python tools/build.py -s ${{ inputs.build-system }} ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} ${{ matrix.arg }}
+ BUILD_PY_ARGS="-s ${{ inputs.build-system }} ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} --target all"
+ if [ "${{ inputs.upload-metrics }}" = "true" ]; then
+ BUILD_PY_ARGS="$BUILD_PY_ARGS --target tinyusb_metrics"
+ fi
+ python tools/build.py $BUILD_PY_ARGS ${{ matrix.arg }}
fi
shell: bash
+ - name: Membrowse Upload
+ if: inputs.toolchain != 'esp-idf' && inputs.upload-membrowse == true
+ env:
+ MEMBROWSE_API_KEY: ${{ secrets.MEMBROWSE_API_KEY }}
+ run: |
+ # if code-changed is false --> there is no elf -> membrowse target upload with --identical flag
+ BUILD_PY_ARGS="-s ${{ inputs.build-system }} ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }}"
+ python tools/build.py $BUILD_PY_ARGS --target examples-membrowse-upload -j 1 ${{ matrix.arg }}
+ shell: bash
+
- name: Upload Artifacts for Metrics
- if: ${{ inputs.upload-metrics }}
+ if: inputs.upload-metrics == true && inputs.code-changed == true
uses: actions/upload-artifact@v5
with:
name: metrics-${{ matrix.arg }}
path: cmake-build/cmake-build-*/metrics.json
- - name: Copy linker scripts for artifacts
- if: ${{ inputs.upload-artifacts }}
- run: |
- for dir in cmake-build/cmake-build-*; do
- board=$(basename "$dir" | sed 's/cmake-build-//')
- ld_path=$(jq -r --arg b "$board" '.targets[] | select(.board == $b) | .ld // empty' .github/membrowse-targets.json)
- if [ -n "$ld_path" ] && [ -f "$ld_path" ]; then
- mkdir -p "cmake-build/$(dirname "$ld_path")"
- cp "$ld_path" "cmake-build/$ld_path"
- fi
- done
- shell: bash
-
- name: Upload Artifacts for Hardware Testing
- if: ${{ inputs.upload-artifacts }}
+ if: inputs.upload-artifacts == true && inputs.code-changed == true
uses: actions/upload-artifact@v5
with:
name: binaries-${{ matrix.arg }}
diff --git a/.github/workflows/ci_set_matrix.py b/.github/workflows/ci_set_matrix.py
index 05a48b6c9..cd7dfa76b 100755
--- a/.github/workflows/ci_set_matrix.py
+++ b/.github/workflows/ci_set_matrix.py
@@ -15,32 +15,76 @@ toolchain_list = [
# family: [supported toolchain]
family_list = {
- "at32f45x at32f402_405 at32f403a_407 at32f413 at32f415 at32f423 at32f425 at32f435_437": ["arm-gcc"],
- "broadcom_32bit da1469x": ["arm-gcc"],
+ "at32f402_405": ["arm-gcc"],
+ "at32f403a_407": ["arm-gcc"],
+ "at32f413": ["arm-gcc"],
+ "at32f415": ["arm-gcc"],
+ "at32f423": ["arm-gcc"],
+ "at32f425": ["arm-gcc"],
+ "at32f435_437": ["arm-gcc"],
+ "at32f45x": ["arm-gcc"],
+ "broadcom_32bit": ["arm-gcc"],
"broadcom_64bit": ["aarch64-gcc"],
- "ch32v10x ch32v20x ch32v30x fomu gd32vf103 hpmicro": ["riscv-gcc"],
+ "ch32v10x": ["riscv-gcc"],
+ "ch32v20x": ["riscv-gcc"],
+ "ch32v30x": ["riscv-gcc"],
+ "da1469x": ["arm-gcc"],
+ "fomu": ["riscv-gcc"],
+ "gd32vf103": ["riscv-gcc"],
+ "hpmicro": ["riscv-gcc"],
"imxrt": ["arm-gcc", "arm-clang"],
- "kinetis_k kinetis_kl kinetis_k32l2": ["arm-gcc", "arm-clang"],
- "lpc11 lpc13 lpc15 lpc17 lpc18 lpc40 lpc43": ["arm-gcc", "arm-clang"],
- "lpc51 lpc54 lpc55": ["arm-gcc", "arm-clang"],
- "maxim mcx mm32 msp432e4 rw61x tm4c": ["arm-gcc"],
+ "kinetis_k": ["arm-gcc", "arm-clang"],
+ "kinetis_k32l2": ["arm-gcc", "arm-clang"],
+ "kinetis_kl": ["arm-gcc", "arm-clang"],
+ "lpc11": ["arm-gcc", "arm-clang"],
+ "lpc13": ["arm-gcc", "arm-clang"],
+ "lpc15": ["arm-gcc", "arm-clang"],
+ "lpc17": ["arm-gcc", "arm-clang"],
+ "lpc18": ["arm-gcc", "arm-clang"],
+ "lpc40": ["arm-gcc", "arm-clang"],
+ "lpc43": ["arm-gcc", "arm-clang"],
+ "lpc51": ["arm-gcc", "arm-clang"],
+ "lpc54": ["arm-gcc", "arm-clang"],
+ "lpc55": ["arm-gcc", "arm-clang"],
+ "maxim": ["arm-gcc"],
+ "mcx": ["arm-gcc"],
+ "mm32": ["arm-gcc"],
"msp430": ["msp430-gcc"],
+ "msp432e4": ["arm-gcc"],
"nrf": ["arm-gcc", "arm-clang"],
- "nuc100_120 nuc121_125 nuc126 nuc505 xmc4000": ["arm-gcc"],
+ "nuc100_120": ["arm-gcc"],
+ "nuc121_125": ["arm-gcc"],
+ "nuc126": ["arm-gcc"],
+ "nuc505": ["arm-gcc"],
"ra": ["arm-gcc"],
"rp2040": ["arm-gcc"],
+ "rw61x": ["arm-gcc"],
"rx": ["rx-gcc"],
- "samd11 samd2x_l2x samd5x_e5x samg": ["arm-gcc", "arm-clang"],
- "stm32c0 stm32f0 stm32f1 stm32f2 stm32f3": ["arm-gcc", "arm-clang", "arm-iar"],
+ "samd11": ["arm-gcc", "arm-clang"],
+ "samd2x_l2x": ["arm-gcc", "arm-clang"],
+ "samd5x_e5x": ["arm-gcc", "arm-clang"],
+ "samg": ["arm-gcc", "arm-clang"],
+ "stm32c0": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32f0": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32f1": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32f2": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32f3": ["arm-gcc", "arm-clang", "arm-iar"],
"stm32f4": ["arm-gcc", "arm-clang", "arm-iar"],
"stm32f7": ["arm-gcc", "arm-clang", "arm-iar"],
- "stm32g0 stm32g4 stm32h5": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32g0": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32g4": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32h5": ["arm-gcc", "arm-clang", "arm-iar"],
"stm32h7": ["arm-gcc", "arm-clang", "arm-iar"],
- "stm32h7rs stm32l0 stm32l4": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32h7rs": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32l0": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32l4": ["arm-gcc", "arm-clang", "arm-iar"],
"stm32n6": ["arm-gcc"],
- "stm32u0 stm32u5": ["arm-gcc", "arm-clang", "arm-iar"],
- "stm32wb stm32wba": ["arm-gcc", "arm-clang", "arm-iar"],
- # "-bespressif_s2_devkitc": ["esp-idf"],
+ "stm32u0": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32u5": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32wb": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32wba": ["arm-gcc", "arm-clang", "arm-iar"],
+ "tm4c": ["arm-gcc"],
+ "xmc4000": ["arm-gcc"],
# S3, P4 will be built by hil test
# "-bespressif_s3_devkitm": ["esp-idf"],
# "-bespressif_p4_function_ev": ["esp-idf"],
diff --git a/.github/workflows/membrowse-report.yml b/.github/workflows/membrowse-report.yml
deleted file mode 100644
index 0667418e6..000000000
--- a/.github/workflows/membrowse-report.yml
+++ /dev/null
@@ -1,101 +0,0 @@
-name: Membrowse Memory Report
-
-on:
- workflow_call:
- inputs:
- code_changed:
- description: 'Whether code paths changed (true) or doc-only (false)'
- type: boolean
- required: true
-
-permissions:
- contents: read
- actions: read
-
-jobs:
- load-targets:
- runs-on: ubuntu-latest
- outputs:
- targets: ${{ steps.load.outputs.targets }}
- steps:
- - name: Checkout repository
- uses: actions/checkout@v6
-
- - name: Load target matrix
- id: load
- run: echo "targets=$(jq -c '.targets' .github/membrowse-targets.json)" >> $GITHUB_OUTPUT
-
- analyze:
- needs: [load-targets]
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- matrix:
- include: ${{ fromJson(needs.load-targets.outputs.targets) }}
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v6
- with:
- fetch-depth: 0
- submodules: recursive
-
- # Download artifacts when code changed (build artifacts available)
- - name: Download build artifacts
- if: inputs.code_changed
- id: download
- uses: actions/download-artifact@v5
- with:
- pattern: binaries-*
- path: cmake-build
- merge-multiple: true
- continue-on-error: true
-
- - name: Restore linker scripts
- if: inputs.code_changed
- run: cp -r cmake-build/hw . 2>/dev/null || true
-
- - name: Check if ELF exists
- id: check-elf
- run: |
- if [ -f "cmake-build/cmake-build-${{ matrix.board }}/device/${{ matrix.example }}/${{ matrix.example }}.elf" ]; then
- echo "exists=true" >> $GITHUB_OUTPUT
- else
- echo "exists=false" >> $GITHUB_OUTPUT
- fi
-
- # Run with actual ELF analysis when build artifacts available
- - name: Run Membrowse Analysis
- if: steps.check-elf.outputs.exists == 'true'
- id: membrowse
- continue-on-error: true
- uses: membrowse/membrowse-action@v1
- with:
- target_name: ${{ matrix.port }}-${{ matrix.board }}-${{ matrix.example }}
- elf: cmake-build/cmake-build-${{ matrix.board }}/device/${{ matrix.example }}/${{ matrix.example }}.elf
- ld: ${{ matrix.ld }}
- linker_vars: ${{ matrix.linker_vars || '' }}
- api_key: ${{ secrets.MEMBROWSE_API_KEY }}
- api_url: ${{ vars.MEMBROWSE_API_URL }}
- verbose: INFO
-
- # Run with identical=true when no ELF (doc-only push)
- # Preserves the chain of commits in membrowse tracking
- - name: Run Membrowse Identical Report
- if: steps.check-elf.outputs.exists == 'false'
- id: membrowse-identical
- continue-on-error: true
- uses: membrowse/membrowse-action@v1
- with:
- target_name: ${{ matrix.port }}-${{ matrix.board }}-${{ matrix.example }}
- identical: true
- api_key: ${{ secrets.MEMBROWSE_API_KEY }}
- api_url: ${{ vars.MEMBROWSE_API_URL }}
- verbose: INFO
-
- - name: Upload report artifact
- if: steps.membrowse.outcome == 'success' || steps.membrowse-identical.outcome == 'success'
- uses: actions/upload-artifact@v5
- with:
- name: membrowse-report-${{ matrix.port }}-${{ matrix.board }}-${{ matrix.example }}
- path: ${{ steps.membrowse.outputs.report_path || steps.membrowse-identical.outputs.report_path }}