diff --git a/.github/workflows/bsp_buildings.yml b/.github/workflows/bsp_buildings.yml index 7726bbebca9..57bf75823cd 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_BSP: "ESP32C3(cmake)" RTT_TOOL_CHAIN: "sourcery-riscv32-esp32" + RTT_BUILD_TOOL: "cmake" 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" @@ -404,7 +425,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 @@ -414,10 +434,10 @@ jobs: echo "RTT_ROOT=${{ github.workspace }}" >> $GITHUB_ENV echo "RTT_CC=gcc" >> $GITHUB_ENV echo "export PATH=~/.env/tools/scripts:$PATH" > ~/.env/env.sh + 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 @@ -500,11 +520,11 @@ jobs: echo "RTT_EXEC_PATH=/opt/i386-unknown-elf_for_x86_64-pc-linux-gnu/bin" >> $GITHUB_ENV - name: Bsp Scons Compile - if: ${{ success() }} - shell: bash + if: ${{ success() && matrix.legs.RTT_BUILD_TOOL == 'cmake' }} 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..e1add903c38 100644 --- a/tools/ci/bsp_buildings.py +++ b/tools/ci/bsp_buildings.py @@ -2,6 +2,7 @@ import shutil import re import multiprocessing +import subprocess import yaml def add_summary(text): @@ -36,7 +37,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 +93,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): """ diff --git a/tools/cmake.py b/tools/cmake.py index fb894d1ed34..ee97cd42e9b 100644 --- a/tools/cmake.py +++ b/tools/cmake.py @@ -45,13 +45,13 @@ def GenerateCFiles(env, project, project_name): OBJDUMP = tool_path_conv["CMAKE_OBJDUMP"]["path"] OBJCOPY = tool_path_conv["CMAKE_OBJCOPY"]["path"] FROMELF = tool_path_conv["CMAKE_FROMELF"]["path"] - - CFLAGS = rtconfig.CFLAGS.replace('\\', "/").replace('\"', "\\\"") + + CFLAGS = env['CFLAGS'].replace('\\', "/").replace('\"', "\\\"") if 'CXXFLAGS' in dir(rtconfig): - CXXFLAGS = rtconfig.CXXFLAGS.replace('\\', "/").replace('\"', "\\\"") + CXXFLAGS = env['CXXFLAGS'].replace('\\', "/").replace('\"', "\\\"") else: CXXFLAGS = CFLAGS - AFLAGS = rtconfig.AFLAGS.replace('\\', "/").replace('\"', "\\\"") + AFLAGS = env['ASFLAGS'].replace('\\', "/").replace('\"', "\\\"") LFLAGS = env['LINKFLAGS'].replace('\\', "/").replace('\"', "\\\"") POST_ACTION = rtconfig.POST_ACTION