blob: 5cb2bdca458938f0cfced68054877efefdf87e85 [file] [log] [blame]
#!/bin/sh
set -x
set -e
mkdir -p rv32_out
TOOLCHAIN_OUT_DIR="$(pwd)"/rv32_out
# Build gcc
git clone --branch 2025.08.29 https://github.com/riscv-collab/riscv-gnu-toolchain.git
cd riscv-gnu-toolchain/ || exit
git submodule update --init --recursive
# Update gcc
cd gcc || exit
contrib/download_prerequisites
cd .. || exit
./configure \
--srcdir="$(pwd)" \
--prefix="${TOOLCHAIN_OUT_DIR}" \
--with-arch=rv32im_zve32x_zicsr \
--with-abi=ilp32 \
--with-gcc-src="$(pwd)"/gcc \
--with-cmodel=medany
make -C "$(pwd)" -j 32 newlib
cd .. || exit
# Build LLVM + compiler-rt
git clone --depth=1 https://github.com/llvm/llvm-project -b llvmorg-20.1.0
cd llvm-project/ || exit
# Build LLVM
mkdir build
cmake -B build \
-DCMAKE_INSTALL_PREFIX="${TOOLCHAIN_OUT_DIR}" \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_TARGETS_TO_BUILD="RISCV" \
-DLLVM_ENABLE_PROJECTS="clang" \
-DLLVM_DEFAULT_TARGET_TRIPLE="riscv32-unknown-elf" \
-DLLVM_INSTALL_TOOLCHAIN_ONLY=On \
-DDEFAULT_SYSROOT="${TOOLCHAIN_OUT_DIR}"/riscv32-unknown-elf \
-G Ninja \
"$(pwd)"/llvm
cmake --build build --target install
cmake -B "$(pwd)"/build/compiler-rt \
-DCMAKE_INSTALL_PREFIX="${TOOLCHAIN_OUT_DIR}" \
-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY \
-DCMAKE_AR="${TOOLCHAIN_OUT_DIR}"/bin/llvm-ar \
-DCMAKE_NM="${TOOLCHAIN_OUT_DIR}"/bin/llvm-nm \
-DCMAKE_RANLIB="${TOOLCHAIN_OUT_DIR}"/bin/llvm-ranlib \
-DCMAKE_C_FLAGS="-march=rv32im_zve32x_zicsr" \
-DCMAKE_ASM_FLAGS="-march=rv32im_zve32x_zicsr" \
-DCMAKE_C_COMPILER="${TOOLCHAIN_OUT_DIR}"/bin/clang \
-DCMAKE_C_COMPILER_TARGET=riscv32-unknown-elf \
-DCMAKE_ASM_COMPILER_TARGET=riscv32-unknown-elf \
-DCOMPILER_RT_OS_DIR="clang/14.0.0/lib" \
-DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \
-DCOMPILER_RT_BUILD_BUILTINS=ON \
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
-DCOMPILER_RT_BUILD_XRAY=OFF \
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
-DCOMPILER_RT_BUILD_MEMPROF=OFF \
-DCOMPILER_RT_BUILD_PROFILE=OFF \
-DCOMPILER_RT_BAREMETAL_BUILD=ON \
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
-DLLVM_CONFIG_PATH="$(pwd)"/build/bin/llvm-config \
-DCMAKE_C_FLAGS="-march=rv32im_zve32x_zicsr -mno-relax" \
-DCMAKE_ASM_FLAGS="-march=rv32im_zve32x_zicsr -mno-relax" \
-G "Ninja" "$(pwd)"/compiler-rt
cmake --build "$(pwd)"/build/compiler-rt --target install
cd .. || exit
# New lib build fails if riscv32-unknown-elf-gcc is not available in PATH
export PATH="${TOOLCHAIN_OUT_DIR}"/bin:"$PATH"
if [ ! -f "${TOOLCHAIN_OUT_DIR}"/bin/riscv32-unknown-elf-gcc ]; then
echo "ERROR: ${TOOLCHAIN_OUT_DIR}/bin/riscv32-unknown-elf-gcc does not exits"
exit 1
fi
git clone --depth=1 https://github.com/ucb-bar/libgloss-htif
cd libgloss-htif || exit
git checkout 39234a16247ab1fa234821b251f1f1870c3de343
CC=${TOOLCHAIN_OUT_DIR}/bin/riscv32-unknown-elf-gcc \
AR=${TOOLCHAIN_OUT_DIR}/bin/riscv32-unknown-elf-ar \
SIZE=${TOOLCHAIN_OUT_DIR}/bin/riscv32-unknown-elf-size \
./configure --prefix=${TOOLCHAIN_OUT_DIR}/riscv32-unknown-elf --host=riscv32-unknown-elf
make && make install
cd .. || exit