From 791ec329261bc544694f116f947cd1e0b21aef48 Mon Sep 17 00:00:00 2001 From: liukangcc Date: Sat, 9 Oct 2021 13:58:56 +0800 Subject: [PATCH] [update] add riscv toolchain for ci. --- .github/workflows/action.yml | 19 +++++++++++++++++- bsp/bluetrum/ab32vg1-ab-prougen/rtconfig.py | 8 ++++++-- .../hal_libraries/ab32vg1_hal/SConscript | 4 ++-- .../hal_libraries/ab32vg1_hal/libhal.a | Bin 0 -> 37598 bytes 4 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/libhal.a diff --git a/.github/workflows/action.yml b/.github/workflows/action.yml index 40e6bd6052..121c597bce 100644 --- a/.github/workflows/action.yml +++ b/.github/workflows/action.yml @@ -37,6 +37,7 @@ jobs: - {RTT_BSP: "allwinner_tina", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "efm32", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "gd32e230k-start", RTT_TOOL_CHAIN: "sourcery-arm"} + - {RTT_BSP: "gd32vf103v-eval", RTT_TOOL_CHAIN: "sourcery-riscv-none-embed"} - {RTT_BSP: "gd32303e-eval", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "gd32450z-eval", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "imx6sx/cortex-a9", RTT_TOOL_CHAIN: "sourcery-arm"} @@ -138,7 +139,7 @@ jobs: - {RTT_BSP: "raspberry-pi/raspi4-32", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "hc32l196", RTT_TOOL_CHAIN: "sourcery-arm"} - {RTT_BSP: "tae32f5300", RTT_TOOL_CHAIN: "sourcery-arm"} - - {RTT_BSP: "bluetrum/ab32vg1-ab-prougen", RTT_TOOL_CHAIN: "sourcery-riscv"} + - {RTT_BSP: "bluetrum/ab32vg1-ab-prougen", RTT_TOOL_CHAIN: "sourcery-riscv64-unknown-elf"} steps: - uses: actions/checkout@v2 - name: Set up Python @@ -172,6 +173,22 @@ jobs: /opt/mips-2016.05/bin/mips-sde-elf-gcc --version echo "RTT_EXEC_PATH=/opt/mips-2016.05/bin" >> $GITHUB_ENV + - name: Install Riscv64-unknown-elf ToolChains + if: ${{ matrix.legs.RTT_TOOL_CHAIN == 'sourcery-riscv64-unknown-elf' && success() }} + run: | + wget -q https://static.dev.sifive.com/dev-tools/freedom-tools/v2020.12/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz + sudo tar zxvf riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz -C /opt + /opt/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin/riscv64-unknown-elf-gcc --version + echo "RTT_EXEC_PATH=/opt/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin" >> $GITHUB_ENV + + - name: Install Riscv-none-embed ToolChains + if: ${{ matrix.legs.RTT_TOOL_CHAIN == 'sourcery-riscv-none-embed' && success() }} + run: | + wget -q https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases/download/v8.3.0-2.3/xpack-riscv-none-embed-gcc-8.3.0-2.3-linux-x64.tar.gz + sudo tar zxvf xpack-riscv-none-embed-gcc-8.3.0-2.3-linux-x64.tar.gz -C /opt + /opt/xpack-riscv-none-embed-gcc-8.3.0-2.3/bin/riscv-none-embed-gcc --version + echo "RTT_EXEC_PATH=/opt/xpack-riscv-none-embed-gcc-8.3.0-2.3/bin" >> $GITHUB_ENV + - name: Bsp Scons Compile if: ${{ success() }} shell: bash diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/rtconfig.py b/bsp/bluetrum/ab32vg1-ab-prougen/rtconfig.py index 5afb84e1ba..aa7976335e 100644 --- a/bsp/bluetrum/ab32vg1-ab-prougen/rtconfig.py +++ b/bsp/bluetrum/ab32vg1-ab-prougen/rtconfig.py @@ -1,4 +1,6 @@ import os +import platform + # toolchains options ARCH ='risc-v' @@ -57,8 +59,10 @@ if PLATFORM == 'gcc': DUMP_ACTION = OBJDUMP + ' -D -S $TARGET > rtt.asm\n' POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' -POST_ACTION += './riscv32-elf-xmaker -b rtthread.xm\n' -POST_ACTION += './riscv32-elf-xmaker -b download.xm\n' + +if "Windows" in platform.platform(): + POST_ACTION += './riscv32-elf-xmaker -b rtthread.xm\n' + POST_ACTION += './riscv32-elf-xmaker -b download.xm\n' def dist_handle(BSP_ROOT, dist_dir): import sys diff --git a/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/SConscript b/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/SConscript index 3321a76d91..e30f216093 100644 --- a/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/SConscript +++ b/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/SConscript @@ -48,8 +48,8 @@ ASFLAGS = "" CPPDEFINES = [] LOCAL_CPPDEFINES = [] -LIBS = [] -LIBPATH = [] +LIBS = ['hal'] +LIBPATH = [CWD] LINKFLAGS = "" diff --git a/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/libhal.a b/bsp/bluetrum/libraries/hal_libraries/ab32vg1_hal/libhal.a new file mode 100644 index 0000000000000000000000000000000000000000..fbd9652b214c039b751c5547e14e92bfbfbebf39 GIT binary patch literal 37598 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 J#S>u#{(nIw@x%ZC literal 0 HcmV?d00001