From 23f2f033d75c2ae821b635bc23f86e03b8afbe36 Mon Sep 17 00:00:00 2001 From: katebern-grovety <132359118+katebern-grovety@users.noreply.github.com> Date: Tue, 25 Jul 2023 14:38:50 +0400 Subject: [PATCH 1/3] [CI][Docker] Add riscv-gnu-toolchain to ci_riscv Currently the ci_riscv docker image uses GNU toolchain for Xuantie RISC-V CPU, which does not contain V-extension instructions. This PR adds GNU toolchain for RISC-V from RISC-V Collaboration. --- docker/Dockerfile.ci_riscv | 4 + .../ubuntu_install_riscv_gcc_toolchain.sh | 81 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 docker/install/ubuntu_install_riscv_gcc_toolchain.sh diff --git a/docker/Dockerfile.ci_riscv b/docker/Dockerfile.ci_riscv index 1256562a328c..a3c609534298 100644 --- a/docker/Dockerfile.ci_riscv +++ b/docker/Dockerfile.ci_riscv @@ -91,6 +91,10 @@ COPY install/ubuntu_install_zephyr_sdk.sh /install/ubuntu_install_zephyr_sdk.sh RUN bash /install/ubuntu_install_zephyr_sdk.sh /opt/zephyr-sdk ENV PATH /opt/zephyr-sdk/sysroots/x86_64-pokysdk-linux/usr/bin:$PATH +# Install RISC-V gcc toolchain with spike and proxy kernel (pk) +COPY install/ubuntu_install_riscv_gcc_toolchain.sh /install/ubuntu_install_riscv_gcc_toolchain.sh +RUN bash /install/ubuntu_install_riscv_gcc_toolchain.sh /opt/riscv_gcc_toolchain + # Download RISC-V gcc toolchain (linux) COPY install/ubuntu_download_xuantie_gcc_linux.sh /install/ubuntu_download_xuantie_gcc_linux.sh RUN bash /install/ubuntu_download_xuantie_gcc_linux.sh /opt/riscv/riscv64-unknown-linux-gnu diff --git a/docker/install/ubuntu_install_riscv_gcc_toolchain.sh b/docker/install/ubuntu_install_riscv_gcc_toolchain.sh new file mode 100644 index 000000000000..4d2dffdfeab0 --- /dev/null +++ b/docker/install/ubuntu_install_riscv_gcc_toolchain.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +set -e +set -u +set -o pipefail + +function show_usage() { + cat < +INSTALLATION_PATH is the installation path for the toolchain. +EOF +} + +if [ "$#" -lt 1 -o "$1" == "--help" -o "$1" == "-h" ]; then + show_usage + exit 1 +fi + +INSTALLATION_PATH=$1 +shift + +# Create installation path directory +mkdir -p "${INSTALLATION_PATH}" + +# Download and extract RISC-V gcc +TMPDIR=$(mktemp -d) +RISCV_GCC_EXT="tar.gz" +RLS_TAG="2023.07.07" +RISCV_GCC_URL="https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/${RLS_TAG}/riscv64-glibc-ubuntu-22.04-gcc-nightly-${RLS_TAG}-nightly.${RISCV_GCC_EXT}" + +DOWNLOAD_PATH="$TMPDIR/${RLS_TAG}.${RISCV_GCC_EXT}" + +wget ${RISCV_GCC_URL} -O "${DOWNLOAD_PATH}" +tar -xf "${DOWNLOAD_PATH}" -C "${INSTALLATION_PATH}" --strip-components=1 + +export PATH=$INSTALLATION_PATH/bin:$PATH + +sudo apt-install-and-clear -y --no-install-recommends device-tree-compiler + +# Install spike +mkdir $TMPDIR/spike +cd $TMPDIR/spike +git clone https://github.com/riscv/riscv-isa-sim.git +pushd riscv-isa-sim +mkdir build +cd build +../configure --prefix=$INSTALLATION_PATH +make -j`nproc` +make install +popd + +# Install pk +git clone https://github.com/riscv/riscv-pk.git +pushd riscv-pk +mkdir build +pushd build +../configure --prefix=`pwd`/install --host=riscv64-unknown-linux-gnu +make -j`nproc` +make install +cp ./pk $INSTALLATION_PATH/bin/pk + +# cleanup +rm -rf $TMPDIR + +echo "SUCCESS" From dc1a109b3ecf2e2c1819569365146b681d5ebc3c Mon Sep 17 00:00:00 2001 From: katebern-grovety <132359118+katebern-grovety@users.noreply.github.com> Date: Fri, 4 Aug 2023 12:29:27 +0400 Subject: [PATCH 2/3] Update ubuntu_install_riscv_gcc_toolchain.sh Build from source multilib RISC-V GNU toolchain Add builds rv32gc and rv64gc for RISC-V Proxy Kernel Fix Spike version --- .../ubuntu_install_riscv_gcc_toolchain.sh | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/docker/install/ubuntu_install_riscv_gcc_toolchain.sh b/docker/install/ubuntu_install_riscv_gcc_toolchain.sh index 4d2dffdfeab0..2108adf7563a 100644 --- a/docker/install/ubuntu_install_riscv_gcc_toolchain.sh +++ b/docker/install/ubuntu_install_riscv_gcc_toolchain.sh @@ -32,31 +32,29 @@ if [ "$#" -lt 1 -o "$1" == "--help" -o "$1" == "-h" ]; then exit 1 fi +RISCV_TOOLCHAIN_VERSION="2023.07.07" +SPIKE_VERSION="v1.1.0" +TMPDIR=$(mktemp -d) INSTALLATION_PATH=$1 +export PATH=$INSTALLATION_PATH/bin:$PATH shift +# Install the packages required to build the toolchain +sudo apt-install-and-clear -y --no-install-recommends device-tree-compiler autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git libglib2.0-dev + # Create installation path directory mkdir -p "${INSTALLATION_PATH}" -# Download and extract RISC-V gcc -TMPDIR=$(mktemp -d) -RISCV_GCC_EXT="tar.gz" -RLS_TAG="2023.07.07" -RISCV_GCC_URL="https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/${RLS_TAG}/riscv64-glibc-ubuntu-22.04-gcc-nightly-${RLS_TAG}-nightly.${RISCV_GCC_EXT}" - -DOWNLOAD_PATH="$TMPDIR/${RLS_TAG}.${RISCV_GCC_EXT}" - -wget ${RISCV_GCC_URL} -O "${DOWNLOAD_PATH}" -tar -xf "${DOWNLOAD_PATH}" -C "${INSTALLATION_PATH}" --strip-components=1 - -export PATH=$INSTALLATION_PATH/bin:$PATH - -sudo apt-install-and-clear -y --no-install-recommends device-tree-compiler +# Install RISC-V GNU toolchain +cd $TMPDIR +git clone https://github.com/riscv/riscv-gnu-toolchain -b $RISCV_TOOLCHAIN_VERSION +pushd riscv-gnu-toolchain +./configure --prefix=$INSTALLATION_PATH --enable-multilib +make linux +popd # Install spike -mkdir $TMPDIR/spike -cd $TMPDIR/spike -git clone https://github.com/riscv/riscv-isa-sim.git +git clone https://github.com/riscv/riscv-isa-sim.git -b $SPIKE_VERSION pushd riscv-isa-sim mkdir build cd build @@ -68,12 +66,23 @@ popd # Install pk git clone https://github.com/riscv/riscv-pk.git pushd riscv-pk + +# rv32gc mkdir build pushd build -../configure --prefix=`pwd`/install --host=riscv64-unknown-linux-gnu +../configure --prefix=`pwd`/install --host=riscv64-unknown-linux-gnu --with-arch=rv32gc +make -j`nproc` +make install +cp ./pk $INSTALLATION_PATH/riscv64-unknown-linux-gnu/bin/pk +popd + +# rv64gc +mkdir build64 +pushd build64 +../configure --prefix=`pwd`/install --host=riscv64-unknown-linux-gnu --with-arch=rv64gc make -j`nproc` make install -cp ./pk $INSTALLATION_PATH/bin/pk +cp ./pk $INSTALLATION_PATH/riscv64-unknown-linux-gnu/bin/pk64 # cleanup rm -rf $TMPDIR From 77b54dc631ea40af4d4e4b8fe59fe8c3e261aae2 Mon Sep 17 00:00:00 2001 From: katebern-grovety <132359118+katebern-grovety@users.noreply.github.com> Date: Fri, 18 Aug 2023 11:48:25 +0400 Subject: [PATCH 3/3] use prebuilt toolchain --- .../ubuntu_install_riscv_gcc_toolchain.sh | 52 ++++++++++++------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/docker/install/ubuntu_install_riscv_gcc_toolchain.sh b/docker/install/ubuntu_install_riscv_gcc_toolchain.sh index 2108adf7563a..c7c0a8146a46 100644 --- a/docker/install/ubuntu_install_riscv_gcc_toolchain.sh +++ b/docker/install/ubuntu_install_riscv_gcc_toolchain.sh @@ -32,33 +32,46 @@ if [ "$#" -lt 1 -o "$1" == "--help" -o "$1" == "-h" ]; then exit 1 fi -RISCV_TOOLCHAIN_VERSION="2023.07.07" +RISCV_TOOLCHAIN_VERSION="2023.01.04" SPIKE_VERSION="v1.1.0" TMPDIR=$(mktemp -d) INSTALLATION_PATH=$1 -export PATH=$INSTALLATION_PATH/bin:$PATH +INSTALLATION_PATH_32=${INSTALLATION_PATH}/32 +INSTALLATION_PATH_64=${INSTALLATION_PATH}/64 shift # Install the packages required to build the toolchain -sudo apt-install-and-clear -y --no-install-recommends device-tree-compiler autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git libglib2.0-dev +sudo apt-install-and-clear -y --no-install-recommends device-tree-compiler -# Create installation path directory -mkdir -p "${INSTALLATION_PATH}" +# Create installation path directories +mkdir -p "${INSTALLATION_PATH_32}" +mkdir -p "${INSTALLATION_PATH_64}" +cd $TMPDIR # Install RISC-V GNU toolchain -cd $TMPDIR -git clone https://github.com/riscv/riscv-gnu-toolchain -b $RISCV_TOOLCHAIN_VERSION -pushd riscv-gnu-toolchain -./configure --prefix=$INSTALLATION_PATH --enable-multilib -make linux -popd +# 32 +DOWNLOAD_PATH="$TMPDIR/${RISCV_TOOLCHAIN_VERSION}_32.tar.gz" +wget https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2023.01.04/riscv32-glibc-ubuntu-22.04-nightly-2023.01.04-nightly.tar.gz -O "${DOWNLOAD_PATH}" +tar -xf "${DOWNLOAD_PATH}" -C "${INSTALLATION_PATH_32}" --strip-components=1 +# 64 +DOWNLOAD_PATH="$TMPDIR/${RISCV_TOOLCHAIN_VERSION}_64.tar.gz" +wget https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2023.01.04/riscv64-glibc-ubuntu-22.04-nightly-2023.01.04-nightly.tar.gz -O "${DOWNLOAD_PATH}" +tar -xf "${DOWNLOAD_PATH}" -C "${INSTALLATION_PATH_64}" --strip-components=1 # Install spike git clone https://github.com/riscv/riscv-isa-sim.git -b $SPIKE_VERSION pushd riscv-isa-sim +# 32 mkdir build -cd build -../configure --prefix=$INSTALLATION_PATH +pushd build +../configure --prefix=$INSTALLATION_PATH_32 +make -j`nproc` +make install +popd +# 64 +mkdir build64 +cd build64 +../configure --prefix=$INSTALLATION_PATH_64 make -j`nproc` make install popd @@ -66,23 +79,24 @@ popd # Install pk git clone https://github.com/riscv/riscv-pk.git pushd riscv-pk - +SRC_PATH=$PATH # rv32gc +export PATH=$INSTALLATION_PATH_32/bin:$SRC_PATH mkdir build pushd build -../configure --prefix=`pwd`/install --host=riscv64-unknown-linux-gnu --with-arch=rv32gc +../configure --prefix=`pwd`/install --host=riscv32-unknown-linux-gnu --with-arch=rv32gc --with-abi=ilp32d make -j`nproc` make install -cp ./pk $INSTALLATION_PATH/riscv64-unknown-linux-gnu/bin/pk +cp ./pk $INSTALLATION_PATH_32/riscv32-unknown-linux-gnu/bin/pk popd - # rv64gc +export PATH=$INSTALLATION_PATH_64/bin:$SRC_PATH mkdir build64 pushd build64 -../configure --prefix=`pwd`/install --host=riscv64-unknown-linux-gnu --with-arch=rv64gc +../configure --prefix=`pwd`/install --host=riscv64-unknown-linux-gnu --with-arch=rv64gc --with-abi=lp64d make -j`nproc` make install -cp ./pk $INSTALLATION_PATH/riscv64-unknown-linux-gnu/bin/pk64 +cp ./pk $INSTALLATION_PATH_64/riscv64-unknown-linux-gnu/bin/pk # cleanup rm -rf $TMPDIR