* Add SPI flash configs, IOBinders, CI tests, and docs * Add writable SPI flash support * bump * Fix CI * Fix CI * Update docs/Generators/TestChipIP.rst Co-authored-by: Chick Markley <chick@qrhino.com> * Maybe actually fix CI * Fix broken merge * Fix the tutorial patch * bump tcip to master * fix GPIO naming bug Co-authored-by: Chick Markley <chick@qrhino.com>
217 lines
7.6 KiB
Docker
217 lines
7.6 KiB
Docker
### Note: This DockerFile is adapted from https://github.com/CircleCI-Public/example-images/openjdk
|
|
|
|
FROM openjdk:11.0.1-jdk-sid
|
|
|
|
# man directory is missing in some base images
|
|
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=863199
|
|
RUN apt-get update \
|
|
&& mkdir -p /usr/share/man/man1 \
|
|
&& apt-get install -y \
|
|
bzip2 \
|
|
ca-certificates \
|
|
curl \
|
|
git \
|
|
gnupg \
|
|
gzip \
|
|
libfl2 \
|
|
libfl-dev \
|
|
locales \
|
|
mercurial \
|
|
netcat \
|
|
net-tools \
|
|
openssh-client \
|
|
parallel \
|
|
sudo \
|
|
tar \
|
|
unzip \
|
|
wget \
|
|
xvfb \
|
|
xxd \
|
|
zip \
|
|
ccache \
|
|
libgoogle-perftools-dev \
|
|
numactl \
|
|
zlib1g
|
|
|
|
# Set timezone to UTC by default
|
|
RUN ln -sf /usr/share/zoneinfo/Etc/UTC /etc/localtime
|
|
|
|
# Use unicode
|
|
RUN locale-gen C.UTF-8 || true
|
|
ENV LANG=C.UTF-8
|
|
|
|
# install jq
|
|
RUN JQ_URL="https://circle-downloads.s3.amazonaws.com/circleci-images/cache/linux-amd64/jq-latest" \
|
|
&& curl --silent --show-error --location --fail --retry 3 --output /usr/bin/jq $JQ_URL \
|
|
&& chmod +x /usr/bin/jq \
|
|
&& jq --version
|
|
|
|
# Install Docker
|
|
|
|
# Docker.com returns the URL of the latest binary when you hit a directory listing
|
|
# We curl this URL and `grep` the version out.
|
|
# The output looks like this:
|
|
|
|
#> # To install, run the following commands as root:
|
|
#> curl -fsSLO https://download.docker.com/linux/static/stable/x86_64/docker-17.05.0-ce.tgz && tar --strip-components=1 -xvzf docker-17.05.0-ce.tgz -C /usr/local/bin
|
|
#>
|
|
#> # Then start docker in daemon mode:
|
|
#> /usr/local/bin/dockerd
|
|
|
|
RUN set -ex \
|
|
&& export DOCKER_VERSION=$(curl --silent --fail --retry 3 https://download.docker.com/linux/static/stable/x86_64/ | grep -o -e 'docker-[.0-9]*-ce\.tgz' | sort -r | head -n 1) \
|
|
&& DOCKER_URL="https://download.docker.com/linux/static/stable/x86_64/${DOCKER_VERSION}" \
|
|
&& echo Docker URL: $DOCKER_URL \
|
|
&& curl --silent --show-error --location --fail --retry 3 --output /tmp/docker.tgz "${DOCKER_URL}" \
|
|
&& ls -lha /tmp/docker.tgz \
|
|
&& tar -xz -C /tmp -f /tmp/docker.tgz \
|
|
&& mv /tmp/docker/* /usr/bin \
|
|
&& rm -rf /tmp/docker /tmp/docker.tgz \
|
|
&& which docker \
|
|
&& (docker version || true)
|
|
|
|
# docker compose
|
|
RUN COMPOSE_URL="https://circle-downloads.s3.amazonaws.com/circleci-images/cache/linux-amd64/docker-compose-latest" \
|
|
&& curl --silent --show-error --location --fail --retry 3 --output /usr/bin/docker-compose $COMPOSE_URL \
|
|
&& chmod +x /usr/bin/docker-compose \
|
|
&& docker-compose version
|
|
|
|
# install dockerize
|
|
RUN DOCKERIZE_URL="https://circle-downloads.s3.amazonaws.com/circleci-images/cache/linux-amd64/dockerize-latest.tar.gz" \
|
|
&& curl --silent --show-error --location --fail --retry 3 --output /tmp/dockerize-linux-amd64.tar.gz $DOCKERIZE_URL \
|
|
&& tar -C /usr/local/bin -xzvf /tmp/dockerize-linux-amd64.tar.gz \
|
|
&& rm -rf /tmp/dockerize-linux-amd64.tar.gz \
|
|
&& dockerize --version
|
|
|
|
RUN groupadd --gid 3434 riscvuser \
|
|
&& useradd --uid 3434 --gid riscvuser --shell /bin/bash --create-home riscvuser \
|
|
&& echo 'riscvuser ALL=NOPASSWD: ALL' >> /etc/sudoers.d/50-riscvuser \
|
|
&& echo 'Defaults env_keep += "DEBIAN_FRONTEND"' >> /etc/sudoers.d/env_keep
|
|
|
|
# BEGIN IMAGE CUSTOMIZATIONS
|
|
|
|
# cacerts from OpenJDK 9-slim to workaround http://bugs.java.com/view_bug.do?bug_id=8189357
|
|
# AND https://github.com/docker-library/openjdk/issues/145
|
|
#
|
|
# Created by running:
|
|
# docker run --rm openjdk:9-slim cat /etc/ssl/certs/java/cacerts | # aws s3 cp - s3://circle-downloads/circleci-images/cache/linux-amd64/openjdk-9-slim-cacerts --acl public-read
|
|
RUN if java -fullversion 2>&1 | grep -q '"9.'; then curl --silent --show-error --location --fail --retry 3 --output /etc/ssl/certs/java/cacerts https://circle-downloads.s3.amazonaws.com/circleci-images/cache/linux-amd64/openjdk-9-slim-cacerts; fi
|
|
|
|
# Install Maven Version: 3.6.3
|
|
RUN curl --silent --show-error --location --fail --retry 3 --output /tmp/apache-maven.tar.gz https://www.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz \
|
|
&& tar xf /tmp/apache-maven.tar.gz -C /opt/ \
|
|
&& rm /tmp/apache-maven.tar.gz \
|
|
&& ln -s /opt/apache-maven-* /opt/apache-maven \
|
|
&& /opt/apache-maven/bin/mvn -version
|
|
|
|
# Install Ant Version: 1.10.5
|
|
RUN curl --silent --show-error --location --fail --retry 3 --output /tmp/apache-ant.tar.gz https://archive.apache.org/dist/ant/binaries/apache-ant-1.10.5-bin.tar.gz \
|
|
&& tar xf /tmp/apache-ant.tar.gz -C /opt/ \
|
|
&& ln -s /opt/apache-ant-* /opt/apache-ant \
|
|
&& rm -rf /tmp/apache-ant.tar.gz \
|
|
&& /opt/apache-ant/bin/ant -version
|
|
|
|
ENV ANT_HOME=/opt/apache-ant
|
|
|
|
# Install Gradle Version: 5.0
|
|
RUN curl --silent --show-error --location --fail --retry 3 --output /tmp/gradle.zip https://services.gradle.org/distributions/gradle-5.0-bin.zip \
|
|
&& unzip -d /opt /tmp/gradle.zip \
|
|
&& rm /tmp/gradle.zip \
|
|
&& ln -s /opt/gradle-* /opt/gradle \
|
|
&& /opt/gradle/bin/gradle -version
|
|
|
|
# Install sbt from https://circle-downloads.s3.amazonaws.com/circleci-images/cache/linux-amd64/sbt-latest.tgz
|
|
RUN curl --silent --show-error --location --fail --retry 3 --output /tmp/sbt.tgz https://circle-downloads.s3.amazonaws.com/circleci-images/cache/linux-amd64/sbt-latest.tgz \
|
|
&& tar -xzf /tmp/sbt.tgz -C /opt/ \
|
|
&& rm /tmp/sbt.tgz \
|
|
&& /opt/sbt/bin/sbt sbtVersion
|
|
|
|
# Install openjfx
|
|
RUN apt-get update
|
|
RUN apt-get install -y --no-install-recommends openjfx
|
|
|
|
# Add build-essential
|
|
RUN apt-get install -y build-essential
|
|
|
|
# Add RISCV toolchain necessary dependencies
|
|
RUN apt-get update
|
|
RUN apt-get install -y \
|
|
autoconf \
|
|
automake \
|
|
autotools-dev \
|
|
babeltrace \
|
|
bc \
|
|
curl \
|
|
device-tree-compiler \
|
|
expat \
|
|
flex \
|
|
gawk \
|
|
gperf \
|
|
g++ \
|
|
libexpat-dev \
|
|
libgmp-dev \
|
|
libmpc-dev \
|
|
libmpfr-dev \
|
|
libtool \
|
|
libusb-1.0-0-dev \
|
|
make \
|
|
patchutils \
|
|
pkg-config \
|
|
python \
|
|
python-pexpect-doc \
|
|
python3 \
|
|
texinfo \
|
|
zlib1g-dev \
|
|
rsync
|
|
|
|
# Use specific bison version to bypass Verilator 4.034 issues
|
|
# TODO: When Verilator is bumped, use apt to get newest bison
|
|
RUN wget https://ftp.gnu.org/gnu/bison/bison-3.5.4.tar.gz \
|
|
&& tar -xvf bison-3.5.4.tar.gz \
|
|
&& cd bison-3.5.4 \
|
|
&& ./configure && make && make install
|
|
|
|
# Check bison version is 3.5.4
|
|
RUN bison --version
|
|
|
|
# Add minimal QEMU dependencies
|
|
RUN apt-get install -y \
|
|
libfdt-dev \
|
|
libglib2.0-dev \
|
|
libpixman-1-dev
|
|
|
|
# Install verilator
|
|
RUN git clone http://git.veripool.org/git/verilator \
|
|
&& cd verilator \
|
|
&& git pull \
|
|
&& git checkout v4.034 \
|
|
&& autoconf && ./configure && make && make install
|
|
|
|
# Update PATH for Java tools
|
|
ENV PATH="/opt/sbt/bin:/opt/apache-maven/bin:/opt/apache-ant/bin:/opt/gradle/bin:$PATH"
|
|
|
|
# Add HOME environment variable
|
|
ENV HOME="/home/riscvuser"
|
|
|
|
# Update PATH for RISCV toolchain (note: hardcoded for CircleCI)
|
|
ENV RISCV="$HOME/riscv-tools-install"
|
|
ENV LD_LIBRARY_PATH="$RISCV/lib"
|
|
ENV PATH="$RISCV/bin:$PATH"
|
|
|
|
WORKDIR $HOME
|
|
USER riscvuser
|
|
|
|
# smoke test with path
|
|
RUN mvn -version \
|
|
&& ant -version \
|
|
&& gradle -version \
|
|
&& sbt sbtVersion \
|
|
&& verilator --version
|
|
|
|
# remove extra folders
|
|
RUN rm -rf project/
|
|
|
|
# END IMAGE CUSTOMIZATIONS
|
|
|
|
CMD ["/bin/sh"]
|