Added multi-stage build process and documentation
This commit is contained in:
+132
-5
@@ -1,10 +1,34 @@
|
|||||||
FROM ubuntu:23.10
|
# The Dockerfile consists of four stages, each setting up components for a
|
||||||
|
# RISC-V development environment.
|
||||||
|
#
|
||||||
|
# - Stage 1: Utilises Ubuntu 23.10 to install build tools and dependencies,
|
||||||
|
# then clones, compiles, and installs the RISC-V GNU toolchain in
|
||||||
|
# `/opt/riscv`.
|
||||||
|
#
|
||||||
|
# - Stage 2: Sets up another Ubuntu 23.10 environment, copies the RISC-V
|
||||||
|
# toolchain from Stage 1, installs additional dependencies, and then
|
||||||
|
# clones, compiles, and installs the RISC-V Proxy Kernel.
|
||||||
|
#
|
||||||
|
# - Stage 3: Uses Ubuntu 23.10 again, brings forward tools from previous
|
||||||
|
# stages, installs further dependencies, and then clones, compiles,
|
||||||
|
# and installs the Spike RISC-V ISA simulator.
|
||||||
|
#
|
||||||
|
# - Stage 4: Prepares the final Ubuntu 23.10 environment, copies all tools,
|
||||||
|
# updates the PATH to include `/opt/riscv/bin`, and configures the
|
||||||
|
# container to start with a shell for immediate interaction.
|
||||||
|
|
||||||
|
############################## Stage 1
|
||||||
|
|
||||||
|
FROM ubuntu:23.10 AS stage1
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
WORKDIR /root
|
WORKDIR /root
|
||||||
|
|
||||||
# Install prerequisites
|
# RISC-V toolchain
|
||||||
|
# Source: https://github.com/riscv-collab/riscv-gnu-toolchain
|
||||||
|
|
||||||
|
## Install prerequisites
|
||||||
RUN apt update -qq && apt install -y --no-install-recommends \
|
RUN apt update -qq && apt install -y --no-install-recommends \
|
||||||
autoconf \
|
autoconf \
|
||||||
automake \
|
automake \
|
||||||
@@ -33,7 +57,7 @@ RUN apt update -qq && apt install -y --no-install-recommends \
|
|||||||
libslirp-dev \
|
libslirp-dev \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Compile and install toolchain
|
## Compile and install
|
||||||
RUN git clone https://github.com/riscv/riscv-gnu-toolchain
|
RUN git clone https://github.com/riscv/riscv-gnu-toolchain
|
||||||
|
|
||||||
WORKDIR /root/riscv-gnu-toolchain
|
WORKDIR /root/riscv-gnu-toolchain
|
||||||
@@ -45,12 +69,105 @@ WORKDIR /root
|
|||||||
|
|
||||||
RUN rm -rf /root/riscv-gnu-toolchain
|
RUN rm -rf /root/riscv-gnu-toolchain
|
||||||
|
|
||||||
# Install additional prerequisites
|
############################## Stage 2
|
||||||
|
|
||||||
|
FROM ubuntu:23.10 AS stage2
|
||||||
|
|
||||||
|
COPY --from=stage1 /opt/riscv /opt/riscv
|
||||||
|
|
||||||
|
WORKDIR /root
|
||||||
|
|
||||||
|
## Install prerequisites
|
||||||
RUN apt update -qq && apt install -y --no-install-recommends \
|
RUN apt update -qq && apt install -y --no-install-recommends \
|
||||||
|
autoconf \
|
||||||
|
automake \
|
||||||
|
autotools-dev \
|
||||||
|
curl \
|
||||||
|
python3 \
|
||||||
|
python3-pip \
|
||||||
|
libmpc-dev \
|
||||||
|
libmpfr-dev \
|
||||||
|
libgmp-dev \
|
||||||
|
gawk \
|
||||||
|
build-essential \
|
||||||
|
bison \
|
||||||
|
flex \
|
||||||
|
texinfo \
|
||||||
|
gperf \
|
||||||
|
libtool \
|
||||||
|
patchutils \
|
||||||
|
bc \
|
||||||
|
zlib1g-dev \
|
||||||
|
libexpat-dev \
|
||||||
|
ninja-build \
|
||||||
|
git \
|
||||||
|
cmake \
|
||||||
|
libglib2.0-dev \
|
||||||
|
libslirp-dev \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# RISC-V proxy kernel and boot loader
|
||||||
|
# Source: https://github.com/riscv-software-src/riscv-pk
|
||||||
|
|
||||||
|
## Compile and install
|
||||||
|
RUN git clone https://github.com/riscv-software-src/riscv-pk
|
||||||
|
|
||||||
|
WORKDIR /root/riscv-pk
|
||||||
|
|
||||||
|
ENV PATH="${PATH}:/opt/riscv/bin/"
|
||||||
|
|
||||||
|
RUN mkdir build && \
|
||||||
|
cd build && \
|
||||||
|
../configure --prefix=/opt/riscv --host=riscv64-unknown-elf --with-arch=rv64gc_zifencei && \
|
||||||
|
make -j8 && \
|
||||||
|
make install
|
||||||
|
|
||||||
|
WORKDIR /root
|
||||||
|
|
||||||
|
RUN rm -rf /root/riscv-pk
|
||||||
|
|
||||||
|
############################## Stage 3
|
||||||
|
|
||||||
|
FROM ubuntu:23.10 AS stage3
|
||||||
|
|
||||||
|
COPY --from=stage2 /opt/riscv /opt/riscv
|
||||||
|
|
||||||
|
WORKDIR /root
|
||||||
|
|
||||||
|
## Install prerequisites
|
||||||
|
RUN apt update -qq && apt install -y --no-install-recommends \
|
||||||
|
autoconf \
|
||||||
|
automake \
|
||||||
|
autotools-dev \
|
||||||
|
curl \
|
||||||
|
python3 \
|
||||||
|
python3-pip \
|
||||||
|
libmpc-dev \
|
||||||
|
libmpfr-dev \
|
||||||
|
libgmp-dev \
|
||||||
|
gawk \
|
||||||
|
build-essential \
|
||||||
|
bison \
|
||||||
|
flex \
|
||||||
|
texinfo \
|
||||||
|
gperf \
|
||||||
|
libtool \
|
||||||
|
patchutils \
|
||||||
|
bc \
|
||||||
|
zlib1g-dev \
|
||||||
|
libexpat-dev \
|
||||||
|
ninja-build \
|
||||||
|
git \
|
||||||
|
cmake \
|
||||||
|
libglib2.0-dev \
|
||||||
|
libslirp-dev \
|
||||||
device-tree-compiler \
|
device-tree-compiler \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Compile and install Spike
|
# Spike, RISC-V ISA simulator
|
||||||
|
# Source: https://github.com/riscv-software-src/riscv-isa-sim
|
||||||
|
|
||||||
|
## Compile and install
|
||||||
RUN git clone https://github.com/riscv/riscv-isa-sim.git
|
RUN git clone https://github.com/riscv/riscv-isa-sim.git
|
||||||
|
|
||||||
WORKDIR /root/riscv-isa-sim
|
WORKDIR /root/riscv-isa-sim
|
||||||
@@ -65,5 +182,15 @@ WORKDIR /root
|
|||||||
|
|
||||||
RUN rm -rf /root/riscv-isa-sim
|
RUN rm -rf /root/riscv-isa-sim
|
||||||
|
|
||||||
|
############################## Stage 4
|
||||||
|
|
||||||
|
FROM ubuntu:23.10 AS stage4
|
||||||
|
|
||||||
|
COPY --from=stage3 /opt/riscv /opt/riscv
|
||||||
|
|
||||||
|
WORKDIR /root
|
||||||
|
|
||||||
|
RUN echo "export PATH=$PATH:/opt/riscv/bin" >> /root/.bashrc
|
||||||
|
|
||||||
# Pass commands into container
|
# Pass commands into container
|
||||||
ENTRYPOINT ["bash", "-lc"]
|
ENTRYPOINT ["bash", "-lc"]
|
||||||
Reference in New Issue
Block a user