mirror of
https://github.com/openhwgroup/cvw
synced 2025-01-23 21:14:37 +00:00
104 lines
3.8 KiB
XML
104 lines
3.8 KiB
XML
FROM wallysoc/ubuntu_wally
|
|
|
|
# SET ENVIRONMENT VARIABLES
|
|
# assume 4 threads are available to speed up
|
|
ARG NUM_THREADS=4
|
|
ENV RISCV=/opt/riscv
|
|
ENV PATH="$PATH:${RISCV}/bin"
|
|
ENV MANPATH="$MANPATH:${RISCV}/share/man"
|
|
|
|
# this is required by podman
|
|
USER root
|
|
WORKDIR /opt/riscv
|
|
|
|
# TOOLCHAIN
|
|
RUN git clone https://github.com/riscv/riscv-gnu-toolchain && \
|
|
cd riscv-gnu-toolchain && \
|
|
sed -i 's/https/git/' .gitmodules && git submodule sync && \
|
|
./configure --prefix=${RISCV} --enable-multilib \
|
|
--with-multilib-generator="rv32e-ilp32e--;rv32i-ilp32--;rv32im-ilp32--;rv32iac-ilp32--;rv32imac-ilp32--;rv32imafc-ilp32f--;rv32imafdc-ilp32d--;rv64i-lp64--;rv64ic-lp64--;rv64iac-lp64--;rv64imac-lp64--;rv64imafdc-lp64d--;rv64im-lp64--;" && \
|
|
make --jobs ${NUM_THREADS} && \
|
|
make install && cd ${RISCV} && \
|
|
rm -rf ${RISCV}/riscv-gnu-toolchain
|
|
|
|
# elf2hex
|
|
RUN git clone https://github.com/sifive/elf2hex.git && \
|
|
cd elf2hex && \
|
|
autoreconf -i && \
|
|
./configure --target=riscv64-unknown-elf --prefix=${RISCV} && \
|
|
make && \
|
|
make install && cd ${RISCV} && \
|
|
rm -rf ${RISCV}/elf2hex
|
|
|
|
# QEMU
|
|
RUN git clone --recursive https://github.com/qemu/qemu && \
|
|
cd qemu && \
|
|
./configure --target-list=riscv64-softmmu --prefix=${RISCV} && \
|
|
make --jobs ${NUM_THREADS} && \
|
|
make install && cd ${RISCV} && \
|
|
rm -rf ${RISCV}/qemu
|
|
|
|
# Spike
|
|
RUN git clone https://github.com/riscv-software-src/riscv-isa-sim && \
|
|
mkdir riscv-isa-sim/build && \
|
|
cd riscv-isa-sim/build && \
|
|
../configure --prefix=$RISCV --enable-commitlog && \
|
|
make --jobs ${NUM_THREADS} && \
|
|
make install && cd ${RISCV} && \
|
|
rm -rf ${RISCV}/riscv-isa-sim
|
|
|
|
# SAIL
|
|
RUN opam init -y --disable-sandboxing && \
|
|
opam switch create 5.1.0 && \
|
|
opam install sail -y && \
|
|
eval $(opam config env) && \
|
|
git clone https://github.com/riscv/sail-riscv.git && \
|
|
cd sail-riscv && \
|
|
ARCH=RV32 make c_emulator/riscv_sim_RV32 && \
|
|
ARCH=RV64 make c_emulator/riscv_sim_RV64 && \
|
|
cp ${RISCV}/sail-riscv/c_emulator/riscv_sim_RV64 ${RISCV}/bin/riscv_sim_RV64 && \
|
|
cp ${RISCV}/sail-riscv/c_emulator/riscv_sim_RV32 ${RISCV}/bin/riscv_sim_RV32 && \
|
|
rm -rf ${RISCV}/sail-riscv
|
|
|
|
COPY ./buildroot-config-src /opt/riscv/buildroot-config-src
|
|
COPY ./testvector-generation /opt/riscv/testvector-generation
|
|
|
|
# # Buildroot
|
|
RUN git clone https://github.com/buildroot/buildroot.git && \
|
|
cd buildroot && \
|
|
git checkout 2021.05 && \
|
|
cp -r /opt/riscv/buildroot-config-src ./board/wally && \
|
|
cp ./board/wally/main.config .config && \
|
|
make --jobs ${NUM_THREADS} && \
|
|
# generate files for buildroot regression
|
|
mkdir -p ${RISCV}/linux-testvectors && \
|
|
cd /opt/riscv/testvector-generation && \
|
|
curl https://raw.githubusercontent.com/openhwgroup/cvw/main/linux/devicetree/wally-virt.dts --output ${RISCV}/buildroot/output/images/wally-virt.dts && \
|
|
dtc -I dts -O dtb ${RISCV}/buildroot/output/images/wally-virt.dts > ${RISCV}/buildroot/output/images/wally-virt.dtb && \
|
|
make && ./genInitMem.sh && \
|
|
chmod -R a+rw ${RISCV}/linux-testvectors && \
|
|
rm -rf ${RISCV}/buildroot
|
|
|
|
RUN pip3 install --no-cache-dir \
|
|
testresources riscv_config \
|
|
git+https://github.com/riscv/riscof.git
|
|
|
|
# Wally needs Verilator 5.021 or later.
|
|
# Verilator needs to be built from scratch to get the latest version
|
|
# apt-get install verilator installs version 4.028 as of 6/8/23
|
|
RUN apt-get install -y \
|
|
perl g++ ccache help2man libgoogle-perftools-dev numactl perl-doc zlib1g \
|
|
libfl2 libfl-dev && \
|
|
apt-get clean
|
|
RUN git clone https://github.com/verilator/verilator && \
|
|
cd verilator && \
|
|
git pull && \
|
|
git checkout v5.022 && \
|
|
autoconf && \
|
|
./configure --prefix=${RISCV} && \
|
|
make -j ${NUM_THREADS} && \
|
|
make install && \
|
|
cd ${RISCV} && rm -rf ${RISCV}/verilator
|
|
|
|
USER ${USERNAME}
|
|
WORKDIR /home/${USERNAME}/cvw |