93 lines
3.4 KiB
Docker
93 lines
3.4 KiB
Docker
FROM --platform=$BUILDPLATFORM ubuntu:22.04
|
|
|
|
ARG TARGETARCH
|
|
|
|
# Initialize System
|
|
RUN \
|
|
DEBIAN_FRONTEND=noninteractive \
|
|
apt-get update -y && \
|
|
apt-get install -y \
|
|
locales
|
|
RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen
|
|
|
|
# Install Verilator
|
|
# Get Dependencies
|
|
RUN \
|
|
DEBIAN_FRONTEND=noninteractive \
|
|
apt-get update -y && \
|
|
apt-get install -y \
|
|
git perl python3 make autoconf clang flex bison ccache \
|
|
libgoogle-perftools-dev numactl perl-doc \
|
|
libfl2 \
|
|
libfl-dev
|
|
# Build from Source
|
|
RUN \
|
|
git clone -b v4.226 https://github.com/verilator/verilator /verilator-source && \
|
|
cd /verilator-source && \
|
|
autoconf && \
|
|
./configure && \
|
|
make -j `nproc` &&\
|
|
make install
|
|
|
|
# Install GraalVM
|
|
# This downloads all relevant GraalVM architectures at once, mostly because $TARGETARCH values don't map exactly to the release URLs. Since we're optimizing for developer experience here and not image size, this is OK
|
|
# GraalVM release links can be found here: https://github.com/graalvm/graalvm-ce-builds/releases
|
|
ENV JAVA_VERSION=java11
|
|
ADD https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.3.1/graalvm-ce-$JAVA_VERSION-linux-aarch64-22.3.1.tar.gz /graalvm/tarballs/arm64.tar.gz
|
|
ADD https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.3.1/graalvm-ce-$JAVA_VERSION-linux-amd64-22.3.1.tar.gz /graalvm/tarballs/amd64.tar.gz
|
|
RUN tar -xzf /graalvm/tarballs/$TARGETARCH.tar.gz -C /graalvm --strip-components=1
|
|
ENV JAVA_HOME=/graalvm
|
|
ENV PATH=$JAVA_HOME/bin/:$PATH
|
|
|
|
# Install SBT via CS
|
|
# As above, grab the scripts for both platforms and choose the correct one using $TARGETARCH
|
|
# Release links can be found here: https://www.scala-lang.org/download/
|
|
ADD https://github.com/coursier/coursier/releases/latest/download/cs-x86_64-pc-linux.gz /scala/cs-amd64.gz
|
|
ADD https://github.com/VirtusLab/coursier-m1/releases/latest/download/cs-aarch64-pc-linux.gz /scala/cs-arm64.gz
|
|
RUN gzip -d /scala/cs-$TARGETARCH.gz && \
|
|
ln -s /scala/cs-$TARGETARCH /scala/cs && \
|
|
chmod +x /scala/cs && \
|
|
/scala/cs setup -y --dir /scala/bin
|
|
ENV PATH=/scala/bin:$PATH
|
|
# Preheat SBT
|
|
RUN sbt --version
|
|
|
|
# Install firtool
|
|
RUN \
|
|
DEBIAN_FRONTEND=noninteractive \
|
|
apt-get install -y \
|
|
cmake \
|
|
ninja-build \
|
|
curl
|
|
|
|
# Install recent git (required for `ls-tree --object-only`)
|
|
RUN \
|
|
DEBIAN_FRONTEND=noninteractive \
|
|
apt-get install -y software-properties-common && \
|
|
apt-add-repository ppa:git-core/ppa && \
|
|
apt-get update -y && \
|
|
apt-get install -y git
|
|
RUN git clone https://github.com/llvm/circt /circt/source
|
|
# Grab the llvm source from GitHub directly to avoid having to clone the entire llvm-project repo
|
|
RUN cd /circt/source && \
|
|
curl -L https://github.com/llvm/llvm-project/tarball/$(git ls-tree --object-only HEAD -- llvm) | tar xz --strip-components=1 -C llvm
|
|
# Install firtool
|
|
RUN cd /circt/source && \
|
|
cmake \
|
|
-S llvm/llvm \
|
|
-B ../build \
|
|
-G Ninja \
|
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
|
-DLLVM_ENABLE_PROJECTS=mlir \
|
|
-DLLVM_EXTERNAL_PROJECTS=circt \
|
|
-DLLVM_EXTERNAL_CIRCT_SOURCE_DIR=. && \
|
|
cmake \
|
|
--build ../build \
|
|
--target install-firtool
|
|
|
|
# Disable Chisel argument extensions, which cause issues when running tests from the VSCode UI
|
|
ENV CHISEL_ARGUMENT_EXTENSIONS=DISABLE
|
|
|
|
# Use VSCode for writing commit messages
|
|
ENV GIT_EDITOR="code --wait"
|