diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2f1ba548d..c0175bf9d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,11 +2,6 @@ # Licensed under the Apache License, Version 2.0, see LICENSE for details. # SPDX-License-Identifier: Apache-2.0 -# Required by Github checkout action on Ubuntu 18.04-based container, -# see https://github.com/actions/checkout/issues/1590 -env: - ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true - # Run functional regression checks name: ci on: [push, pull_request] diff --git a/util/container/Dockerfile b/util/container/Dockerfile index ed1a869e4..f6330cabc 100644 --- a/util/container/Dockerfile +++ b/util/container/Dockerfile @@ -5,11 +5,12 @@ # Docker container for Snitch development. # 1. Stage -FROM ubuntu:18.04 AS builder +FROM ubuntu:22.04 AS builder ARG CMAKE_VERSION=3.19.4 ARG PYTHON_VERSION=3.9.12 ARG BENDER_VERSION=0.27.1 ARG SPIKE_DASM_VERSION=0.1.0 +ARG VERILATOR_VERSION=4.110 # Run dpkg without interactive dialogue ARG DEBIAN_FRONTEND=noninteractive @@ -26,11 +27,15 @@ RUN apt-get update && \ lsb-release \ software-properties-common \ unzip \ - wget -# Required to install Python -RUN apt-get update && apt-get install -y \ + wget \ zlib1g-dev \ - libreadline-gplv2-dev \ + autoconf \ + help2man \ + flex \ + bison \ + llvm-12-dev \ + libclang-common-12-dev \ + libreadline-dev \ libncursesw5-dev \ libssl-dev \ libsqlite3-dev \ @@ -53,10 +58,14 @@ ENV PATH "/root/.cargo/bin:${PATH}" RUN rustup install 1.70.0 RUN rustup override set 1.70.0 -# Get LLVM 12 -RUN wget https://apt.llvm.org/llvm.sh -RUN chmod +x llvm.sh -RUN ./llvm.sh 12 +# Build Verilator +RUN git clone https://github.com/verilator/verilator && \ + cd verilator && \ + git checkout "v${VERILATOR_VERSION}" && \ + autoconf && \ + ./configure --prefix /tools/verilator && \ + make && \ + make install # Change working directory WORKDIR /tools @@ -82,10 +91,9 @@ RUN wget https://github.com/pulp-platform/riscv-isa-sim/releases/download/snitch RUN tar xzf snitch-spike-dasm-${SPIKE_DASM_VERSION}-x86_64-linux-gnu-ubuntu18.04.tar.gz # 2. Stage -FROM ubuntu:18.04 AS snitch_cluster +FROM ubuntu:22.04 AS snitch_cluster ARG SNITCH_LLVM_VERSION=latest -ARG VERIBLE_VERSION=0.0-776-g09e0b87 -ARG VERILATOR_VERSION=4.110 +ARG VERIBLE_VERSION=0.0-3318-g8d254167 LABEL version="0.1" LABEL description="Snitch container for hardware and software development." @@ -112,19 +120,11 @@ RUN apt-get update && \ apt-get clean ; \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* -# Install Verilator -RUN echo 'deb http://download.opensuse.org/repositories/home:/phiwag:/edatools/xUbuntu_18.04/ /' | tee /etc/apt/sources.list.d/home:phiwag:edatools.list && \ - curl -fsSL https://download.opensuse.org/repositories/home:phiwag:edatools/xUbuntu_18.04/Release.key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/home_phiwag_edatools.gpg > /dev/null && \ - apt-get update && apt-get install -y verilator-${VERILATOR_VERSION} && \ - apt-get clean ; \ - rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* -ENV VLT_ROOT "/usr/share/verilator" - # Get the precompiled LLVM toolchain RUN latest_tag=`curl -s -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/pulp-platform/llvm-project/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/'` && \ echo "SNITCH_LLVM_VERSION=${SNITCH_LLVM_VERSION} LLVM_TAR=${LLVM_TAR} latest_tag=${latest_tag}" && \ test "${SNITCH_LLVM_VERSION}" = "latest" && SNITCH_LLVM_VERSION=${latest_tag} || : ; \ - LLVM_TAR=riscv32-pulp-llvm-ubuntu1804-$(echo $SNITCH_LLVM_VERSION | cut -d '-' -f3-).tar.gz && \ + LLVM_TAR=riscv32-pulp-llvm-ubuntu2004-$(echo $SNITCH_LLVM_VERSION | cut -d '-' -f3-).tar.gz && \ mkdir -p riscv-llvm && \ echo "SNITCH_LLVM_VERSION=${SNITCH_LLVM_VERSION} LLVM_TAR=${LLVM_TAR} latest_tag=${latest_tag}" && \ wget -qO- https://github.com/pulp-platform/llvm-project/releases/download/${SNITCH_LLVM_VERSION}/${LLVM_TAR} | \ @@ -132,9 +132,9 @@ RUN latest_tag=`curl -s -H "Accept: application/vnd.github.v3+json" https://api. ENV LLVM_BINROOT "/tools/riscv-llvm/bin" # Install Verible -RUN wget https://github.com/google/verible/releases/download/v${VERIBLE_VERSION}/verible-v${VERIBLE_VERSION}-Ubuntu-18.04-bionic-x86_64.tar.gz && \ - tar -x -f verible-v${VERIBLE_VERSION}-Ubuntu-18.04-bionic-x86_64.tar.gz --strip-components=1 -C . && \ - rm -rf verible-v${VERIBLE_VERSION}-Ubuntu-18.04-bionic-x86_64.tar.gz +RUN wget https://github.com/chipsalliance/verible/releases/download/v${VERIBLE_VERSION}/verible-v${VERIBLE_VERSION}-linux-static-x86_64.tar.gz && \ + tar -x -f verible-v${VERIBLE_VERSION}-linux-static-x86_64.tar.gz --strip-components=1 -C . && \ + rm -rf verible-v${VERIBLE_VERSION}-linux-static-x86_64.tar.gz ENV PATH "/tools/bin:${PATH}" # Install git>=2.18, required by Github checkout action to recurse submodules @@ -148,6 +148,7 @@ COPY --from=builder /tools/bender bin/ COPY --from=builder /tools/spike-dasm bin/ COPY --from=builder /root/.cargo/bin/banshee bin/ COPY --from=builder /opt/python /opt/python +COPY --from=builder /tools/verilator /tools/verilator/ # Create and activate virtual environment ENV VIRTUAL_ENV "/root/.venvs/snitch_cluster" @@ -159,6 +160,10 @@ COPY docs/requirements.txt /tmp/docs/requirements.txt COPY sw/dnn/requirements.txt /tmp/sw/dnn/requirements.txt RUN pip install -r /tmp/python-requirements.txt +# Add Verilator to PATH +ENV PATH "/tools/verilator/bin:${PATH}" +ENV VLT_ROOT "/tools/verilator/share/verilator/" + # Set locale to UTF-8, required because Python 3.6 defaults on ASCII encoding. # See https://click.palletsprojects.com/en/8.1.x/unicode-support/ ENV LC_ALL "C.UTF-8"