|  | # 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 |