diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..55565a0 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,50 @@ +FROM ubuntu:22.10 + +# TODO: install emscripten (https://emscripten.org/docs/getting_started/downloads.html) + +# TODO: Clean this up once buildkit is supported gracefully in devcontainers +# https://github.com/microsoft/vscode-remote-release/issues/1409 + +ARG X86_64_TOOLCHAIN_FILENAME="gcc-arm-none-eabi-10.3-2021.07-x86_64-linux.tar.bz2" +ARG X86_64_TOOLCHAIN="https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.07/gcc-arm-none-eabi-10.3-2021.07-x86_64-linux.tar.bz2" +ARG X86_64_TOOLCHAIN_CHECKSUM="b56ae639d9183c340f065ae114a30202" + +ARG AARCH64_TOOLCHAIN_FILENAME="gcc-arm-none-eabi-10.3-2021.07-aarch64-linux.tar.bz2" +ARG AARCH64_TOOLCHAIN="https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.07/gcc-arm-none-eabi-10.3-2021.07-aarch64-linux.tar.bz2" +ARG AARCH64_TOOLCHAIN_CHECKSUM="c20b0535d01f8d4418341d893c62a782" + +WORKDIR /setup + +# Install required packages +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + # make is used as the build system + make \ + # git is used for fetching submodules & interactive development + git \ + # bzip2 is required to extract the Arm toolchain + bzip2 \ + # ca certs need to be available for fetching git submodules + ca-certificates \ + # python is used to convert binaries to uf2 files + python3 python-is-python3 + +# Download and verify both x86-64 and aarch64 toolchains. This is unfortunate and +# slows down the build, but it's a clean-ish option until buildkit can be used. +ADD $X86_64_TOOLCHAIN $X86_64_TOOLCHAIN_FILENAME +ADD $AARCH64_TOOLCHAIN $AARCH64_TOOLCHAIN_FILENAME + +RUN echo "${X86_64_TOOLCHAIN_CHECKSUM} ${X86_64_TOOLCHAIN_FILENAME}" | md5sum --check +RUN echo "${AARCH64_TOOLCHAIN_CHECKSUM} ${AARCH64_TOOLCHAIN_FILENAME}" | md5sum --check + +# Extract toolchain directly into /usr +RUN /bin/sh -c 'set -ex && \ + ARCH=`uname -m` && \ + if [ "$ARCH" = "x86_64" ]; then \ + tar --strip-components=1 -C /usr -xjf $X86_64_TOOLCHAIN_FILENAME ; \ + else \ + tar --strip-components=1 -C /usr -xjf $AARCH64_TOOLCHAIN_FILENAME ; \ + fi' + +RUN rm $X86_64_TOOLCHAIN_FILENAME +RUN rm $AARCH64_TOOLCHAIN_FILENAME \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..a71a0f2 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,17 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.231.6/containers/docker-existing-dockerfile +{ + "name": "GNU Arm Embedded Environment", + // Sets the run context to one level up instead of the .devcontainer folder. + "context": "..", + // Set the location of the dockerfile to use + "dockerFile": "Dockerfile", + // Set *default* container specific settings.json values on container create. + "settings": {}, + // Add the IDs of extensions you want installed when the container is created. + "extensions": [ + "ms-vscode.cpptools" + ] + // Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root. + // "remoteUser": "vscode" +} \ No newline at end of file