| # 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.010 |
| |
| # The RISCV toolchain version should match the release tag used in GitHub. |
| ARG RISCV_TOOLCHAIN_TAR_VERSION=20190807-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} |
| |
| # Required packages |
| RUN apt-get update && apt-get install -y \ |
| build-essential \ |
| curl \ |
| git \ |
| gnupg2 \ |
| libc6-i386 \ |
| libelf-dev \ |
| libftdi-dev \ |
| libftdi1-dev \ |
| libftdi1 \ |
| libssl-dev \ |
| libtool \ |
| libusb-1.0-0-dev \ |
| libxml2-dev \ |
| minicom \ |
| ninja-build \ |
| pkgconf \ |
| screen \ |
| srecord \ |
| zlib1g-dev |
| |
| # Install Python3 and support libraries. Cleanup install in place to reduce |
| # binary size. |
| RUN apt-get install -y \ |
| python3 \ |
| python3-pip \ |
| python3-setuptools && \ |
| apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* |
| |
| # Copy repo 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 |