Skip to content

Commit

Permalink
docker: add dockerfile and github actions to build image (#116)
Browse files Browse the repository at this point in the history
Signed-off-by: Qinghao Shi <[email protected]>
  • Loading branch information
jamesbeyond authored Jun 3, 2024
1 parent 559f99b commit d38859f
Show file tree
Hide file tree
Showing 2 changed files with 225 additions and 0 deletions.
194 changes: 194 additions & 0 deletions .github/act-docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
# Pull base image
FROM ubuntu:22.04

# ALL DEPENDENCIES
# This step installs all of the dependencies needed to build the tooling necessary to build
# compliance environment
# Install tools by apt
ENV DEBIAN_FRONTEND=noninteractive
RUN set -x \
&& apt-get -y update \
&& apt-get -y install \
# essential tools
apt-utils \
git \
wget \
vim \
gawk \
flex \
bison \
gperf \
telnet \
bc \
curl \
zip \
unzip \
z3 \
texinfo \
sudo \
# python3
python3.10 \
python3-pip \
python3-dev \
# network tools
iputils-ping \
net-tools \
netcat-openbsd \
# building tools
build-essential \
make \
autoconf \
automake \
autotools-dev \
gcc \
g++ \
pkg-config \
libtool \
device-tree-compiler \
patchutils \
# qemu
opensbi \
qemu-system-misc \
u-boot-qemu \
# gdb dependencies
libncurses* \
libncurses5-dev \
# qemu dependencies
libnuma-dev \
libcurl4-gnutls-dev \
libiscsi-dev \
libaio-dev \
libnfs-dev \
librbd-dev \
libxkbcommon-dev \
libfdt-dev \
libpixman-1-dev \
libepoxy-dev \
libpng-dev \
libjpeg-turbo8-dev \
libsnappy-dev \
liblzo2-dev \
libsdl2-dev \
libvdeplug-dev \
libgtk-3-dev \
libcacard-dev \
libbrlapi-dev \
libcapstone-dev \
libspice-server-dev \
libpmem-dev \
libdaxctl-dev \
libslirp-dev \
libsdl2-image-dev \
libvirglrenderer-dev \
libusbredirhost-dev \
libfuse3-dev \
# opam dependencies
opam \
libmpc-dev \
libmpfr-dev \
libgmp-dev \
zlib1g-dev \
libexpat-dev \
libusb-1.0 \
&& apt clean && rm -rf /var/lib/apt/lists \
&& update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1 \
&& update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 \
&& : # last line

# install packages via pip3
RUN set -x \
&& python3 -m pip install -U pip setuptools \
&& pip3 install -U \
pexpect \
PyYAML \
numpy \
pytest \
prettytable \
colorlog \
GitPython \
click \
Jinja2 \
pytz \
riscof \
riscv-config \
riscv-isac \
riscv-ctg \
&& : # last line


# add new user
ENV DOCKER_USER act
RUN useradd -U -m -u 1000 -s /bin/bash -p "$(openssl passwd -1 123)" $DOCKER_USER \
&& usermod -aG sudo $DOCKER_USER \
&& echo '%sudo ALL=(ALL) NOPASSWD: ALL' | EDITOR='tee -a' visudo \
&& : # last line


# Initial Docker User
USER $DOCKER_USER
WORKDIR /home/act

# Install Opam and sail
RUN set -x \
&& opam init --yes --disable-sandboxing \
&& opam install --yes \
sail \
herdtools7 \
&& : # last line

# build RISC-v Sail golden model from source code
RUN set -x \
&& eval $(opam env) \
&& git clone https://github.com/rems-project/sail-riscv.git \
&& cd sail-riscv \
&& make ocaml_emulator/riscv_ocaml_sim_RV64 \
&& make c_emulator/riscv_sim_RV64 \
&& ARCH=RV32 make ocaml_emulator/riscv_ocaml_sim_RV32 \
&& ARCH=RV32 make c_emulator/riscv_sim_RV32 \
&& mkdir -p /home/act/sail/bin \
&& mv ./c_emulator/riscv_sim_* /home/act/sail/bin \
&& mv ./ocaml_emulator/riscv_ocaml_sim_* /home/act/sail/bin \
&& cd $HOME \
&& rm -rf sail-riscv \
&& : # last line


# build SPIKE model from source
RUN set -x \
&& git clone https://github.com/riscv/riscv-isa-sim.git -b master \
&& cd riscv-isa-sim \
&& mkdir build \
&& cd build \
&& ../configure --prefix=$RISCV \
&& make -j $(nproc) 1>/dev/null \
&& sudo make install \
&& cd $HOME \
&& rm -rf riscv-isa-sim \
&& : # last line

# Download and install riscv-gnu-toochain 32bit & 64bit
RUN set -x \
&& wget -q https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2023.10.06/riscv64-elf-ubuntu-22.04-gcc-nightly-2023.10.06-nightly.tar.gz -O riscv64-elf-gcc.tar.gz \
&& wget -q https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2023.10.06/riscv32-elf-ubuntu-22.04-gcc-nightly-2023.10.06-nightly.tar.gz -O riscv32-elf-gcc.tar.gz \
&& tar -xf riscv64-elf-gcc.tar.gz \
&& tar -xf riscv32-elf-gcc.tar.gz \
&& rm -rf riscv64-elf-gcc.gz \
&& rm -rf riscv32-elf-gcc.tar.gz \
&& : # last line


USER root
# Set environment variables
ENV PATH=/home/act/.opam/default/bin:/home/act/riscv/bin:/home/act/sail/bin:$PATH

RUN litmus7 -version
RUN sail -version
RUN riscv32-unknown-elf-gcc --version
RUN riscv64-unknown-elf-gcc --version
RUN qemu-system-riscv64 -cpu help
RUN riscof --version
RUN riscv_sim_RV64 -h
RUN spike --help


CMD ["/bin/bash"]
31 changes: 31 additions & 0 deletions .github/workflows/BuildDocker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Build and Push ACT Docker

on:
# This workflow only runs when manually triggered
workflow_dispatch:

jobs:
docker-qemu-push:
runs-on: ubuntu-latest

steps:

- name: Checkout
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push act docker
uses: docker/build-push-action@v5
with:
file: .github/act-docker/Dockerfile
tags: ghcr.io/riscv-software-src/riscof/act:latest
push: true

0 comments on commit d38859f

Please sign in to comment.