Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -724,7 +724,7 @@ jobs:
- name: "miniMobileNet"
L1: [2000] # LMACAN: 1000 leads to non-2d transfers in L3!
- name: "Attention"
L1: [2500]
L1: [3500]
# - name: "Transformer"
# L1: [30000]
- name: "microLlama/microLlama1"
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -311,3 +311,9 @@ Change main.c to use OUTPUTTYPE instead of float

## Small changes
- HOTFIX: Deeploy subdirectories installed when installing Deeploy with pip install


## Add RV32IMF Picolibc support for Siracusa platform

### Added
- Adds RV32IMF Picolib to the toolchain
50 changes: 48 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,13 @@ LLVM_CLANG_RT_RISCV_RV32IMAFD ?= ${LLVM_INSTALL_DIR}/lib/clang/15.0.0/lib/b
LLVM_CLANG_RT_RISCV_RV32IMC ?= ${LLVM_INSTALL_DIR}/lib/clang/15.0.0/lib/baremetal/rv32imc/libclang_rt.builtins-riscv32.a
LLVM_CLANG_RT_RISCV_RV32IMA ?= ${LLVM_INSTALL_DIR}/lib/clang/15.0.0/lib/baremetal/rv32ima/libclang_rt.builtins-riscv32.a
LLVM_CLANG_RT_RISCV_RV32IM ?= ${LLVM_INSTALL_DIR}/lib/clang/15.0.0/lib/baremetal/rv32im/libclang_rt.builtins-riscv32.a
LLVM_CLANG_RT_RISCV_RV32IMF ?= ${LLVM_INSTALL_DIR}/lib/clang/15.0.0/lib/baremetal/rv32imf/libclang_rt.builtins-riscv32.a
PICOLIBC_ARM_INSTALL_DIR ?= ${LLVM_INSTALL_DIR}/picolibc/arm
PICOLIBC_RV32IM_INSTALL_DIR ?= ${LLVM_INSTALL_DIR}/picolibc/riscv/rv32im
PICOLIBC_RV32IMC_INSTALL_DIR ?= ${LLVM_INSTALL_DIR}/picolibc/riscv/rv32imc
PICOLIBC_RV32IMA_INSTALL_DIR ?= ${LLVM_INSTALL_DIR}/picolibc/riscv/rv32ima
PICOLIBC_RV32IMAFD_INSTALL_DIR ?= ${LLVM_INSTALL_DIR}/picolibc/riscv/rv32imafd
PICOLIBC_RV32IMF_INSTALL_DIR ?= ${LLVM_INSTALL_DIR}/picolibc/riscv/rv32imf

PULP_SDK_INSTALL_DIR ?= ${DEEPLOY_INSTALL_DIR}/pulp-sdk
QEMU_INSTALL_DIR ?= ${DEEPLOY_INSTALL_DIR}/qemu
Expand Down Expand Up @@ -253,7 +255,40 @@ ${LLVM_CLANG_RT_RISCV_RV32IMAFD}: ${TOOLCHAIN_DIR}/llvm-project
${CMAKE} --build . -j && \
${CMAKE} --install .

llvm-compiler-rt-riscv: ${LLVM_CLANG_RT_RISCV_RV32IM} ${LLVM_CLANG_RT_RISCV_RV32IMA} ${LLVM_CLANG_RT_RISCV_RV32IMC} ${LLVM_CLANG_RT_RISCV_RV32IMAFD}
${LLVM_CLANG_RT_RISCV_RV32IMF}: ${TOOLCHAIN_DIR}/llvm-project
cd ${TOOLCHAIN_DIR}/llvm-project && mkdir -p build-compiler-rt-riscv-rv32imf \
&& cd build-compiler-rt-riscv-rv32imf; \
${CMAKE} ../compiler-rt \
-DCMAKE_C_COMPILER_WORKS=1 \
-DCMAKE_CXX_COMPILER_WORKS=1 \
-DCMAKE_AR=${LLVM_INSTALL_DIR}/bin/llvm-ar \
-DCMAKE_INSTALL_PREFIX=${LLVM_INSTALL_DIR}/lib/clang/15.0.0 \
-DCMAKE_ASM_COMPILER_TARGET="riscv32-unknown-elf" \
-DCMAKE_C_COMPILER=${LLVM_INSTALL_DIR}/bin/clang \
-DCMAKE_ASM_COMPILER=${LLVM_INSTALL_DIR}/bin/clang \
-DCMAKE_C_FLAGS="-mno-relax -march=rv32imf -mabi=ilp32f" \
-DCMAKE_ASM_FLAGS="-march=rv32imf -mabi=ilp32f" \
-DCMAKE_SYSTEM_NAME=baremetal \
-DCMAKE_HOST_SYSTEM_NAME=baremetal \
-DCMAKE_C_COMPILER_TARGET="riscv32-unknown-elf" \
-DCMAKE_CXX_COMPILER_TARGET="riscv32-unknown-elf" \
-DCMAKE_SIZEOF_VOID_P=4 \
-DCMAKE_NM=${LLVM_INSTALL_DIR}/bin/llvm-nm \
-DCMAKE_RANLIB=${LLVM_INSTALL_DIR}/bin/llvm-ranlib \
-DCOMPILER_RT_BUILD_BUILTINS=ON \
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
-DCOMPILER_RT_BUILD_MEMPROF=OFF \
-DCOMPILER_RT_BUILD_PROFILE=OFF \
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
-DCOMPILER_RT_BUILD_XRAY=OFF \
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
-DCOMPILER_RT_BAREMETAL_BUILD=ON \
-DCOMPILER_RT_OS_DIR="baremetal/rv32imf" \
-DLLVM_CONFIG_PATH=${LLVM_INSTALL_DIR}/bin/llvm-config && \
${CMAKE} --build . -j && \
${CMAKE} --install .

llvm-compiler-rt-riscv: ${LLVM_CLANG_RT_RISCV_RV32IM} ${LLVM_CLANG_RT_RISCV_RV32IMA} ${LLVM_CLANG_RT_RISCV_RV32IMC} ${LLVM_CLANG_RT_RISCV_RV32IMAFD} ${LLVM_CLANG_RT_RISCV_RV32IMF}

${LLVM_CLANG_RT_ARM}: ${TOOLCHAIN_DIR}/llvm-project
cd ${TOOLCHAIN_DIR}/llvm-project && mkdir -p build-compiler-rt-arm \
Expand Down Expand Up @@ -352,7 +387,18 @@ ${PICOLIBC_RV32IMAFD_INSTALL_DIR}: ${TOOLCHAIN_DIR}/picolibc
--cross-file ../scripts/meson-build-script-rv32imafd.txt && \
PATH=${LLVM_INSTALL_DIR}/bin:${PATH} meson install

picolibc-riscv: ${PICOLIBC_RV32IM_INSTALL_DIR} ${PICOLIBC_RV32IMA_INSTALL_DIR} ${PICOLIBC_RV32IMC_INSTALL_DIR} ${PICOLIBC_RV32IMAFD_INSTALL_DIR}
${PICOLIBC_RV32IMF_INSTALL_DIR}: ${TOOLCHAIN_DIR}/picolibc
cd ${TOOLCHAIN_DIR}/picolibc && mkdir -p build-rv32imf && cd build-rv32imf && \
cp ${TOOLCHAIN_DIR}/meson-build-script-rv32imf.txt ../scripts && \
PATH=${LLVM_INSTALL_DIR}/bin:${PATH} meson setup --reconfigure -Dincludedir=include \
-Dlibdir=lib \
-Dspecsdir=none \
-Dmultilib=false \
--prefix ${PICOLIBC_RV32IMF_INSTALL_DIR} \
--cross-file ../scripts/meson-build-script-rv32imf.txt && \
PATH=${LLVM_INSTALL_DIR}/bin:${PATH} meson install

picolibc-riscv: ${PICOLIBC_RV32IM_INSTALL_DIR} ${PICOLIBC_RV32IMA_INSTALL_DIR} ${PICOLIBC_RV32IMC_INSTALL_DIR} ${PICOLIBC_RV32IMAFD_INSTALL_DIR} ${PICOLIBC_RV32IMF_INSTALL_DIR}

${TOOLCHAIN_DIR}/pulp-sdk:
cd ${TOOLCHAIN_DIR} && \
Expand Down
8 changes: 5 additions & 3 deletions cmake/pulp/toolchain_llvm.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ set(CMAKE_EXECUTABLE_SUFFIX ".elf")
add_compile_options(
-target riscv32-unknown-elf
-march=${ISA}
-mabi=ilp32f
-ffunction-sections
-fdata-sections
-fomit-frame-pointer
Expand All @@ -27,7 +28,7 @@ add_compile_options(
-DNUM_CORES=${NUM_CORES}
-MMD
-MP
--sysroot=${TOOLCHAIN_INSTALL_DIR}/picolibc/riscv/rv32imc
--sysroot=${TOOLCHAIN_INSTALL_DIR}/picolibc/riscv/rv32imf
-fno-builtin-memcpy
-fno-builtin-memset
)
Expand All @@ -38,8 +39,9 @@ add_link_options(
-MP
-nostartfiles
-march=${ISA}
-L${TOOLCHAIN_INSTALL_DIR}/picolibc/riscv/rv32imc/lib
-L${TOOLCHAIN_INSTALL_DIR}/lib/clang/15.0.0/lib/baremetal/rv32imc/
-mabi=ilp32f
-L${TOOLCHAIN_INSTALL_DIR}/picolibc/riscv/rv32imf/lib
-L${TOOLCHAIN_INSTALL_DIR}/lib/clang/15.0.0/lib/baremetal/rv32imf/
-z norelro
-fno-builtin-memcpy
-fno-builtin-memset
Expand Down
19 changes: 19 additions & 0 deletions toolchain/meson-build-script-rv32imf.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[binaries]
c = ['clang', '-target', 'riscv32-unknown-elf', '-march=rv32imf', '-mabi=ilp32f', '-nostdlib']
ar = 'llvm-ar'
strip = 'llvm-strip'

[host_machine]
system = 'none'
cpu_family = 'riscv32'
cpu = 'riscv32'
endian = 'little'

[properties]
c_args = ['-Werror=double-promotion', '-Wno-unsupported-floating-point-opt', '-fshort-enums', '-mno-relax']
c_link_args = ['-Wl,-z,noexecstack']
skip_sanity_check = true
default_flash_addr = '0x00000000'
default_flash_size = '0x00400000'
default_ram_addr = '0x20000000'
default_ram_size = '0x00200000'
Loading