| # This docker container can be used to run all the TFLM CI checks. | |
| # | |
| # It is only used as part of the GitHub workflows to test for code-style. But | |
| # the container is available and ready for use to run all the checks locally, | |
| # in case that is useful for debugging. See all the versions at | |
| # https://github.com/users/TFLM-bot/packages/container/tflm-ci/versions | |
| # | |
| # docker pull ghcr.io/tflm-bot/tflm-ci:<version> | |
| # | |
| # Build you own container with: | |
| # docker build -f ci/Dockerfile.micro -t tflm-ci . | |
| # | |
| # Use a prebuilt Python image instead of base Ubuntu to speed up the build process, | |
| # since it has all the build dependencies we need for Micro and downloads much faster | |
| # than the install process. | |
| # Using a multistage build so that the build tools required for stage 1 don't make the | |
| # CI container unnecessarily large. | |
| FROM python:3.10-bullseye AS qemu_builder | |
| RUN apt-get update | |
| RUN apt-get install -y ninja-build wget xz-utils | |
| RUN apt-get install -y libglib2.0-dev | |
| RUN apt-get install -y build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev | |
| COPY ci/install_qemu.sh ./ | |
| # Installs all built files into /qemu_install rather than /usr/local default. | |
| RUN ./install_qemu.sh /tmp/qemu_install | |
| # This stage is the final CI container. | |
| FROM python:3.10-bullseye as tflm-ci | |
| RUN apt-get update | |
| RUN apt-get install -y zip xxd sudo | |
| RUN apt install -y lsb-release wget software-properties-common gnupg | |
| RUN wget https://apt.llvm.org/llvm.sh | |
| RUN chmod +x llvm.sh | |
| RUN ./llvm.sh 16 | |
| RUN ln -s /usr/bin/clang-16 /usr/bin/clang | |
| RUN ln -s /usr/bin/clang++-16 /usr/bin/clang++ | |
| RUN apt-get install clang-format-16 | |
| RUN ln -s /usr/bin/clang-format-16 /usr/bin/clang-format | |
| # Needed when using the Dockerfile locally. | |
| RUN git config --global --add safe.directory /opt/tflm | |
| # Needed when the docker container is used with GitHub actions. | |
| RUN git config --global --add safe.directory /github/workspace | |
| # Install yapf to check for Python formatting as part of the TFLM continuous | |
| # integration. | |
| RUN pip install yapf==0.32.0 | |
| # Pillow was added first for the C array generation as a result of the following | |
| # PRs: | |
| # https://github.com/tensorflow/tflite-micro/pull/337 | |
| # https://github.com/tensorflow/tflite-micro/pull/410 | |
| RUN pip install Pillow | |
| RUN pip install Wave | |
| # necessary bits for create_size_log scripts | |
| RUN pip install pandas | |
| RUN pip install matplotlib | |
| RUN pip install six | |
| # Install Renode test dependencies | |
| RUN pip install pyyaml requests psutil robotframework==4.0.1 | |
| # Install QEMU from build container qemu_builder into tflm-ci container. | |
| # We're using a two stage build to keep the CI container smaller. | |
| WORKDIR /usr/local | |
| # Merge built files into /usr/local so that the path is already setup. | |
| COPY --from=qemu_builder /tmp/qemu_install/. . | |
| WORKDIR / | |
| COPY ci/*.sh /install/ | |
| RUN /install/install_bazelisk.sh | |
| RUN /install/install_buildifier.sh |