| # Copyright lowRISC contributors. |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| # Docker container containing various hardware and software development tools |
| # for OpenTitan. |
| |
| # Global configuration options. |
| ARG VERILATOR_VERSION=4.028 |
| |
| # The RISCV toolchain version should match the release tag used in GitHub. |
| ARG RISCV_TOOLCHAIN_TAR_VERSION=20200618-1 |
| |
| # Build OpenOCD |
| # OpenOCD is a tool to connect with the target chip over JTAG and similar |
| # transports. |
| FROM ubuntu:16.04 AS openocd |
| RUN apt-get update && apt-get install -y \ |
| autoconf \ |
| git \ |
| libftdi1-dev \ |
| libtool \ |
| libusb-1.0.0-dev \ |
| pkg-config \ |
| texinfo |
| RUN git clone --depth=1 https://github.com/riscv/riscv-openocd.git /usr/local/src/openocd |
| RUN cd /usr/local/src/openocd && ./bootstrap && mkdir build && cd build && \ |
| ../configure --enable-ftdi --enable-verbose-jtag-io --disable-vsllink \ |
| --enable-remote-bitbang --prefix=/tools/openocd && \ |
| make -j$(nproc) && make install |
| |
| # Build Verilator. |
| FROM ubuntu:16.04 as verilator |
| ARG VERILATOR_VERSION |
| RUN apt-get update && apt-get install -y \ |
| autoconf \ |
| automake \ |
| autotools-dev \ |
| bison \ |
| build-essential \ |
| flex \ |
| git |
| RUN git clone --depth=1 -b v${VERILATOR_VERSION} \ |
| http://git.veripool.org/git/verilator /usr/local/src/verilator |
| RUN cd /usr/local/src/verilator && \ |
| autoconf && ./configure --prefix=/tools/verilator/${VERILATOR_VERSION} && \ |
| make -j$(nproc) && make install |
| |
| |
| # Main container image. |
| FROM ubuntu:16.04 AS opentitan |
| ARG VERILATOR_VERSION |
| ARG RISCV_TOOLCHAIN_TAR_VERSION |
| |
| LABEL version="1.0" |
| LABEL description="OpenTitan container for hardware development." |
| LABEL maintainer="miguelosorio@google.com" |
| |
| # Copy tools from previous build stages |
| WORKDIR /tools |
| COPY --from=openocd /tools/openocd openocd |
| COPY --from=verilator /tools/verilator/${VERILATOR_VERSION} verilator/${VERILATOR_VERSION} |
| |
| # Install (and cleanup) required packages (from apt-requirements.txt) |
| # The list of extra packages is leftover from before this Dockerfile used |
| # apt-requirements.txt |
| COPY apt-requirements.txt /tmp/apt-requirements.txt |
| RUN apt-get update && \ |
| sed 's/#.*//' /tmp/apt-requirements.txt \ |
| | xargs apt-get install -y && \ |
| apt-get install -y \ |
| gnupg2 \ |
| libc6-i386 \ |
| libtool \ |
| minicom \ |
| screen && \ |
| apt-get clean ; \ |
| rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* |
| |
| # Copy repository into tmp directory to execute additional install steps. |
| COPY python-requirements.txt /tmp/python-requirements.txt |
| RUN pip3 install -r /tmp/python-requirements.txt |
| |
| COPY util/get-toolchain.py /tmp/get-toolchain.py |
| RUN /tmp/get-toolchain.py -r ${RISCV_TOOLCHAIN_TAR_VERSION} |
| RUN rm /tmp/python-requirements.txt /tmp/get-toolchain.py |
| |
| # Use bash as default shell |
| RUN ln -sf /bin/bash /bin/sh |
| |
| # Include tools in PATH. |
| ENV PATH "/tools/verilator/${VERILATOR_VERSION}/bin:${PATH}" |
| |
| # Configures default container user. |
| ENV USER ot |
| |
| ENTRYPOINT /bin/bash |