From 34dc8e70e290de25e3a6edcc34b68d776dd7a832 Mon Sep 17 00:00:00 2001 From: kaidegit <2857693944@qq.com> Date: Sat, 22 Feb 2025 17:37:34 +0800 Subject: [PATCH 1/3] [ci] modify some bsp to use cmake+ninja to build faster, check the cmake generator btw --- .github/workflows/bsp_buildings.yml | 32 +++++++++++-- tools/ci/bsp_buildings.py | 72 ++++++++++++++++++++++++++++- 2 files changed, 99 insertions(+), 5 deletions(-) diff --git a/.github/workflows/bsp_buildings.yml b/.github/workflows/bsp_buildings.yml index 4134a2b0bd2..058290ee9b7 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" @@ -253,6 +261,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" @@ -268,6 +277,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" @@ -311,6 +321,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" @@ -338,12 +349,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" @@ -352,18 +365,21 @@ 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" - "wch/risc-v/yd-ch32v307vct6" - 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" @@ -376,22 +392,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" @@ -406,7 +427,6 @@ jobs: python-version: 3.8 - name: Install Tools - shell: bash run: | wget https://raw.githubusercontent.com/RT-Thread/env/master/install_ubuntu.sh chmod 777 install_ubuntu.sh @@ -417,9 +437,13 @@ jobs: echo "RTT_CC=gcc" >> $GITHUB_ENV echo "export PATH=~/.env/tools/scripts:$PATH" > ~/.env/env.sh + - name: Install Cmake build Tools + if: ${{ matrix.legs.RTT_BUILD_TOOL == 'cmake' && success() }} + run: | + sudo apt install cmake ninja-build + - name: Install Arm ToolChains if: ${{ matrix.legs.RTT_TOOL_CHAIN == 'sourcery-arm' && success() }} - shell: bash run: | wget -q https://github.com/RT-Thread/toolchains-ci/releases/download/v1.3/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 sudo tar xjf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 -C /opt @@ -503,10 +527,10 @@ jobs: - name: Bsp Scons Compile if: ${{ success() }} - shell: bash 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..6eff3a9e3f6 100644 --- a/tools/ci/bsp_buildings.py +++ b/tools/ci/bsp_buildings.py @@ -36,7 +36,18 @@ def run_cmd(cmd, output_info=True): return output_str_list, res -def build_bsp(bsp, scons_args=''): +def build_bsp(bsp, scons_args='', build_tool=None): + if build_tool is None: + build_tool = os.getenv('RTT_BUILD_TOOL') + if build_tool == 'scons': + return build_bsp_scons(bsp, scons_args) + elif build_tool =='cmake': + return build_bsp_cmake(bsp, scons_args) + else: + print(f"::error::build tool {build_tool} is not supported") + return False + +def build_bsp_scons(bsp, scons_args=''): """ build bsp. @@ -81,6 +92,65 @@ 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 + + """ + ext_flags = '' + scons_args = scons_args.strip() + if scons_args == "--strict": + print("scons using strict mode, build it with `-Werror` flag") + ext_flags += '-DCMAKE_COMPILE_WARNING_AS_ERROR=1' + elif scons_args != '': + print(f"this project would be built regularly because `scons_args` is `{scons_args}`") + return build_bsp_scons(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}/cmake-build') + os.chdir(f'{rtt_root}/bsp/{bsp}/cmake-build') + run_cmd(f'cmake {ext_flags} .. -G Ninja') + _, res = run_cmd(f'ninja -j{nproc}') + + if res != 0: + success = False + + os.chdir(f'{rtt_root}/bsp/{bsp}') + + build_dir = os.path.join(rtt_root, 'bsp', bsp, 'cmake-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): """ From 1fcfc919d095859a0b9522911d837ae3a31b4c24 Mon Sep 17 00:00:00 2001 From: kaidegit <2857693944@qq.com> Date: Mon, 24 Feb 2025 20:44:31 +0800 Subject: [PATCH 2/3] [tools][cmake] remove some code that is unnecessary but takes time, get them from env --- tools/cmake.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/cmake.py b/tools/cmake.py index 3419451bee7..9a9affad482 100644 --- a/tools/cmake.py +++ b/tools/cmake.py @@ -16,7 +16,8 @@ * 2024-07-04 kaidegit Let cmake generator get more param from `rtconfig.py` * 2024-08-07 imi415 Updated CMake generator handles private macros, using OBJECT and INTERFACE libraries. * 2024-11-18 kaidegit fix processing groups with similar name - * 2024-11-18 kaidegit fix missing some flags added in Sconscript + * 2025-02-22 kaidegit fix missing some flags added in Sconscript + * 2025-02-24 kaidegit remove some code that is unnecessary but takes time, get them from env """ import os @@ -32,7 +33,6 @@ def GenerateCFiles(env, project, project_name): """ Generate CMakeLists.txt files """ - info = utils.ProjectInfo(env) PROJECT_NAME = project_name if project_name != "project" else "rtthread" @@ -177,14 +177,14 @@ def GenerateCFiles(env, project, project_name): cm_file.write('\n') cm_file.write("INCLUDE_DIRECTORIES(\n") - for i in info['CPPPATH']: + for i in env['CPPPATH']: # use relative path path = _make_path_relative(os.getcwd(), i) cm_file.write( "\t" + path.replace("\\", "/") + "\n") cm_file.write(")\n\n") cm_file.write("ADD_DEFINITIONS(\n") - for i in info['CPPDEFINES']: + for i in env['CPPDEFINES']: cm_file.write("\t-D" + i + "\n") cm_file.write(")\n\n") From eb97c39958346a64ee352c6f440d3f2b191dad00 Mon Sep 17 00:00:00 2001 From: Kai <60053077+kaidegit@users.noreply.github.com> Date: Tue, 25 Feb 2025 08:50:09 +0800 Subject: [PATCH 3/3] [ci][bsp_build] add change log and license --- tools/ci/bsp_buildings.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tools/ci/bsp_buildings.py b/tools/ci/bsp_buildings.py index 6eff3a9e3f6..e5b09a04def 100644 --- a/tools/ci/bsp_buildings.py +++ b/tools/ci/bsp_buildings.py @@ -1,3 +1,25 @@ +""" + * Copyright (c) 2006-2025 RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2023-12-24 vacabun first version + * 2023-12-25 kurisaW remove pkgs upgrade everytime + * 2023-12-25 vacabun del debug time remove some output + * 2023-12-25 mysterywolf silent pkgs --update when building bsp + * 2023-12-26 mysterywolf add attach config CI check + * 2023-12-28 vacabun support subfolders + * 2024-01-09 vacabun attachconfig add scons args parsing + * 2024-08-25 supperthomas add manual trigger build all bsp + * 2024-11-05 supperthomas add the yml file support + * 2024-11-05 hydevcode Recursive folder lookup attachconfig.yml + * 2024-11-07 hydevcode yml file adds the depends parameter + * 2024-11-07 hydevcode attachconfig adapts yml syntax features + * 2025-02-25 kaidegit support using cmake and ninja to build +""" + import os import shutil import re