mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +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 |