From df29d9321d9111d68d866454bc9f43187b2bbf27 Mon Sep 17 00:00:00 2001 From: kaidegit <2857693944@qq.com> Date: Mon, 17 Feb 2025 19:20:56 +0800 Subject: [PATCH] ci: add cmake&ninja to speed up github action build --- .github/workflows/bsp_buildings.yml | 30 +++++++++++++- tools/ci/bsp_buildings.py | 61 ++++++++++++++++++++++++++++- 2 files changed, 89 insertions(+), 2 deletions(-) diff --git a/.github/workflows/bsp_buildings.yml b/.github/workflows/bsp_buildings.yml index 7726bbebca9..a255f56bdae 100644 --- a/.github/workflows/bsp_buildings.yml +++ b/.github/workflows/bsp_buildings.yml @@ -39,18 +39,22 @@ jobs: legs: - RTT_BSP: "RT-Thread Online Packages (STM32F407 RT-Spark)" RTT_TOOL_CHAIN: "sourcery-arm" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "stm32/stm32f407-rt-spark" - RTT_BSP: "RTduino/Arduino Libraries (STM32F412 Nucleo)" RTT_TOOL_CHAIN: "sourcery-arm" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "stm32/stm32f412-st-nucleo" - RTT_BSP: "RTduino/Arduino Libraries (Raspberry Pico)" RTT_TOOL_CHAIN: "sourcery-arm" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "raspberry-pico" - RTT_BSP: "others_at32_hc32_ht32" RTT_TOOL_CHAIN: "sourcery-arm" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "qemu-vexpress-a9" - "airm2m/air32f103" @@ -109,8 +113,9 @@ jobs: - "hc32l136" - "yichip/yc3121-pos" - "fm33lc026" - - RTT_BSP: "stm32l4_f0_f1" + - RTT_BSP: "stm32l4_f0_f1(cmake)" RTT_TOOL_CHAIN: "sourcery-arm" + RTT_BUILD_TOOL: "cmake" SUB_RTT_BSP: - "stm32/stm32l4r5-st-nucleo" - "stm32/stm32l4r9-st-eval" @@ -148,6 +153,7 @@ jobs: - "stm32/stm32f107-uc-eval" - RTT_BSP: "stm32_f2_f4" RTT_TOOL_CHAIN: "sourcery-arm" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "stm32/stm32f207-st-nucleo" - "stm32/stm32f302-st-nucleo" @@ -175,6 +181,7 @@ jobs: - "stm32/stm32f469-st-disco" - RTT_BSP: "stm32_f7_g0_h7_mp15_u5_h5_wb5" RTT_TOOL_CHAIN: "sourcery-arm" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "stm32/stm32f746-st-disco" - "stm32/stm32f746-st-nucleo" @@ -208,6 +215,7 @@ jobs: - "stm32/stm32wb55-st-nucleo" - RTT_BSP: "nxp_renesas" RTT_TOOL_CHAIN: "sourcery-arm" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "nxp/lpc/lpc55sxx/lpc55s69_nxp_evk" - "nxp/lpc/lpc55sxx/lpc55s28_nxp_evk" @@ -252,6 +260,7 @@ jobs: - "xplorer4330/M4" - RTT_BSP: "nuvoton" RTT_TOOL_CHAIN: "sourcery-arm" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "nuvoton/numaker-pfm-m487" - "nuvoton/numaker-hmi-ma35d1" @@ -267,6 +276,7 @@ jobs: - "nuvoton/numaker-m2354" - RTT_BSP: "gd32_n32_apm32" RTT_TOOL_CHAIN: "sourcery-arm" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "gd32/arm/gd32103c-eval" - "gd32/arm/gd32105c-eval" @@ -310,6 +320,7 @@ jobs: - "apm32/apm32s103vb-miniboard" - RTT_BSP: "Infineon_TI_microchip" RTT_TOOL_CHAIN: "sourcery-arm" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "Infineon/psoc6-cy8ckit-062S2-43012" - "Infineon/psoc6-cy8ckit-062-BLE" @@ -337,12 +348,14 @@ jobs: - "maxim/max32660-evsys" - RTT_BSP: "mips" RTT_TOOL_CHAIN: "sourcery-mips" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "loongson/ls1bdev" - "loongson/ls2kdev" - "loongson/ls1cdev" - RTT_BSP: "aarch64" RTT_TOOL_CHAIN: "sourcery-aarch64" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "qemu-virt64-aarch64" - "raspberry-pi/raspi3-64" @@ -351,17 +364,20 @@ jobs: - "phytium/aarch64" - RTT_BSP: "riscv-none" RTT_TOOL_CHAIN: "sourcery-riscv-none-embed" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "k210" - "wch/risc-v/ch32v307v-r1" - RTT_BSP: "riscv64-unknown" RTT_TOOL_CHAIN: "sourcery-riscv64-unknown-elf" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "bluetrum/ab32vg1-ab-prougen" - "bouffalo_lab/bl60x" - "bouffalo_lab/bl70x" - RTT_BSP: "hpmicro" RTT_TOOL_CHAIN: "RISC-V-GCC-RV32" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "hpmicro/hpm6750evkmini" - "hpmicro/hpm6750evk" @@ -374,22 +390,27 @@ jobs: - "hpmicro/hpm6e00evk" - RTT_BSP: "llvm-arm" RTT_TOOL_CHAIN: "llvm-arm" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "stm32/stm32l475-atk-pandora" - RTT_BSP: "simulator" RTT_TOOL_CHAIN: "gcc" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "simulator" - RTT_BSP: "ESP32C3" RTT_TOOL_CHAIN: "sourcery-riscv32-esp32" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "ESP32_C3" - RTT_BSP: "i386-unknown" RTT_TOOL_CHAIN: "sourcery-i386-unknown-elf" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "x86" - RTT_BSP: "nordic(yml)" RTT_TOOL_CHAIN: "sourcery-arm" + RTT_BUILD_TOOL: "scons" SUB_RTT_BSP: - "nrf5x/nrf51822" - "nrf5x/nrf52832" @@ -414,6 +435,12 @@ jobs: echo "RTT_ROOT=${{ github.workspace }}" >> $GITHUB_ENV echo "RTT_CC=gcc" >> $GITHUB_ENV echo "export PATH=~/.env/tools/scripts:$PATH" > ~/.env/env.sh + + - name: Install Cmake & Ninja + uses: lukka/get-cmake@latest + with: + cmakeVersion: latestrc + ninjaVersion: latest - name: Install Arm ToolChains if: ${{ matrix.legs.RTT_TOOL_CHAIN == 'sourcery-arm' && success() }} @@ -505,6 +532,7 @@ jobs: env: RTT_BSP: ${{ matrix.legs.RTT_BSP }} RTT_TOOL_CHAIN: ${{ matrix.legs.RTT_TOOL_CHAIN }} + RTT_BUILD_TOOL: ${{ matrix.legs.RTT_BUILD_TOOL }} SRTT_BSP: ${{ join(matrix.legs.SUB_RTT_BSP, ',') }} run: | source ~/.env/env.sh diff --git a/tools/ci/bsp_buildings.py b/tools/ci/bsp_buildings.py index f170dbe8fad..e5289c58f85 100644 --- a/tools/ci/bsp_buildings.py +++ b/tools/ci/bsp_buildings.py @@ -81,6 +81,58 @@ def build_bsp(bsp, scons_args=''): return success +def build_bsp_cmake(bsp, scons_args=''): + """ + build bsp using cmake generater. + + cd {rtt_root} + scons -C bsp/{bsp} --pyconfig-silent > /dev/null + + cd {rtt_root}/bsp/{bsp} + pkgs --update > /dev/null + pkgs --list + + scons --target=cmake + mkdir build + cd build + cmake .. -G Ninja + ninja -j{nproc} + + cd .. + rm -rf build + rm -rf packages + + """ + if scons_args != '': + print("this project would be built regularly because `scons_args` is not empty") + return build_bsp(bsp, scons_args) + success = True + os.chdir(rtt_root) + if os.path.exists(f"{rtt_root}/bsp/{bsp}/Kconfig"): + os.chdir(rtt_root) + run_cmd(f'scons -C bsp/{bsp} --pyconfig-silent', output_info=False) + + os.chdir(f'{rtt_root}/bsp/{bsp}') + run_cmd('pkgs --update', output_info=False) + run_cmd('pkgs --list') + + nproc = multiprocessing.cpu_count() + + run_cmd('scons --target=cmake') + os.mkdir(f'{rtt_root}/bsp/{bsp}/build') + os.chdir(f'{rtt_root}/bsp/{bsp}/build') + run_cmd('cmake .. -G Ninja') + _, res = run_cmd(f'ninja -j{nproc}') + + if res != 0: + success = False + + build_dir = os.path.join(rtt_root, 'bsp', bsp, 'build') + shutil.rmtree(build_dir, ignore_errors=True) + pkg_dir = os.path.join(rtt_root, 'bsp', bsp, 'packages') + shutil.rmtree(pkg_dir, ignore_errors=True) + + return success def append_file(source_file, destination_file): """ @@ -166,11 +218,18 @@ def build_bsp_attachconfig(bsp, attach_file): rtt_root = os.getcwd() srtt_bsp = os.getenv('SRTT_BSP').split(',') + build_tool = os.getenv('RTT_BUILD_TOOL') for bsp in srtt_bsp: count += 1 print(f"::group::Compiling BSP: =={count}=== {bsp} ====") - res = build_bsp(bsp) + res = False + if build_tool == 'scons': + res = build_bsp(bsp) + elif build_tool =='cmake': + res = build_bsp_cmake(bsp) + else: + print(f"::error::build tool {build_tool} is not supported") if not res: print(f"::error::build {bsp} failed") add_summary(f"- ❌ build {bsp} failed.")