diff --git a/.circleci/config.yml b/.circleci/config.yml index b708165877..5bbaee63f3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -12,7 +12,7 @@ parameters: executors: main-env: docker: - - image: ucbbar/chipyard-image:1.0.1 + - image: schwarzem/chipyard-test:1.0.0 environment: JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit @@ -520,4 +520,3 @@ workflows: - prepare-chipyard-fpga: requires: - install-riscv-toolchain - diff --git a/.circleci/images/Dockerfile b/.circleci/images/Dockerfile deleted file mode 100644 index 7d03185026..0000000000 --- a/.circleci/images/Dockerfile +++ /dev/null @@ -1,216 +0,0 @@ -### 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"] diff --git a/Dockerfiles/CI-Dockerfile b/Dockerfiles/CI-Dockerfile new file mode 100644 index 0000000000..96df4ade7e --- /dev/null +++ b/Dockerfiles/CI-Dockerfile @@ -0,0 +1,38 @@ +### Note: This DockerFile is adapted from https://github.com/ucb-bar/chipyard/blob/master/.circleci/images/Dockerfile which was adapted from: https://github.com/CircleCI-Public/example-images/openjdk +# This is a chipyard setup for CI, no toolchains are initialized + +FROM ubuntu:18.04 +ARG CHIPYARD_HASH + +MAINTAINER https://groups.google.com/forum/#!forum/chipyard + +# Install dependencies for ubuntu-req.sh +RUN apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y \ + curl \ + git \ + sudo + +# Stopping docker keyboard-config from disrupting ubuntu-req.sh +RUN sudo DEBIAN_FRONTEND=noninteractive apt-get install -y keyboard-configuration && \ + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y console-setup + +# Adds a new user called riscvuser +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 + +WORKDIR /home/riscvuser +USER riscvuser + +# Install Chipyard +RUN git clone https://github.com/ucb-bar/chipyard.git && \ + cd chipyard && \ + git checkout $CHIPYARD_HASH && \ + ./scripts/ubuntu-req.sh 1>/dev/null + +# END IMAGE CUSTOMIZATIONS + +CMD ["/bin/sh"] diff --git a/Dockerfiles/Dockerfile b/Dockerfiles/Dockerfile new file mode 100644 index 0000000000..ffc8a81ae9 --- /dev/null +++ b/Dockerfiles/Dockerfile @@ -0,0 +1,55 @@ +### Note: This DockerFile is adapted from https://github.com/ucb-bar/chipyard/blob/master/.circleci/images/Dockerfile which was adapted from: https://github.com/CircleCI-Public/example-images/openjdk +# This is a full chipyard setup + +FROM ubuntu:18.04 +ARG CHIPYARD_HASH + +MAINTAINER https://groups.google.com/forum/#!forum/chipyard + +# Install dependencies for ubuntu-req.sh +RUN apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y \ + curl \ + git \ + sudo + +# Stopping docker keyboard-config from disrupting ubuntu-req.sh +RUN sudo DEBIAN_FRONTEND=noninteractive apt-get install -y keyboard-configuration && \ + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y console-setup + +# Adds a new user called riscvuser +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 + +WORKDIR /home/riscvuser +USER riscvuser + +# Install Chipyard +RUN git clone https://github.com/ucb-bar/chipyard.git && \ + cd chipyard && \ + git checkout $CHIPYARD_HASH && \ + ./scripts/ubuntu-req.sh 1>/dev/null + +# Run ubuntu-req.sh to install necessary dependencies +RUN cd chipyard && \ + export MAKEFLAGS=-"j $(nproc)" && \ + ./scripts/init-submodules-no-riscv-tools.sh 1>/dev/null + +# Install riscv-tools +RUN cd chipyard && \ + export MAKEFLAGS=-"j $(nproc)" && \ + ./scripts/build-toolchains.sh riscv-tools 1>/dev/null + +# Install esp-tools +RUN cd chipyard && \ + export MAKEFLAGS=-"j $(nproc)" && \ + ./scripts/build-toolchains.sh esp-tools 1>/dev/null + +ENTRYPOINT ["chipyard/scripts/entrypoint.sh"] + +# END IMAGE CUSTOMIZATIONS + +CMD ["/bin/sh"] diff --git a/scripts/entrypoint.sh b/scripts/entrypoint.sh new file mode 100755 index 0000000000..41e5bda580 --- /dev/null +++ b/scripts/entrypoint.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# used with the dockerfile to set up enviroment variables by running env.sh +# adapted from https://stackoverflow.com/questions/55921914/how-to-source-a-script-with-environment-variables-in-a-docker-build-process + +. /home/riscvuser/chipyard/env.sh + +exec "$@"