Last active
March 26, 2024 14:37
-
-
Save proegssilb/786e51766cce3c38fe2ac27e6caa37cb to your computer and use it in GitHub Desktop.
Rust Embedded dev container setup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Show hidden characters
{ | |
"name": "hello_world_blink", | |
// Select between image and build propieties to pull or build the image. | |
// "image": "docker.io/espressif/idf-rust:esp32s3_latest", | |
"build": { | |
"dockerfile": "Dockerfile", | |
"args": { | |
"CONTAINER_USER": "esp", | |
"CONTAINER_GROUP": "esp", | |
"ESP_BOARD": "esp32s3" | |
} | |
}, | |
"customizations": { | |
"vscode": { | |
"settings": { | |
"editor.formatOnPaste": true, | |
"editor.formatOnSave": true, | |
"editor.formatOnSaveMode": "file", | |
"editor.formatOnType": true, | |
"lldb.executable": "/usr/bin/lldb", | |
"files.watcherExclude": { | |
"**/target/**": true | |
}, | |
"rust-analyzer.checkOnSave.command": "clippy", | |
"rust-analyzer.checkOnSave.allTargets": false, | |
"[rust]": { | |
"editor.defaultFormatter": "rust-lang.rust-analyzer" | |
} | |
}, | |
"extensions": [ | |
"rust-lang.rust-analyzer", | |
"tamasfe.even-better-toml", | |
"serayuzgur.crates", | |
"mutantdino.resourcemonitor", | |
"yzhang.markdown-all-in-one", | |
"ms-vscode.cpptools", | |
"actboy168.tasks", | |
"Wokwi.wokwi-vscode" | |
] | |
} | |
}, | |
"runArgs": [ | |
"--userns=keep-id" | |
], | |
"remoteUser": "esp" | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ARG VARIANT=bullseye | |
FROM debian:${VARIANT} | |
ENV DEBIAN_FRONTEND=noninteractive | |
ENV LC_ALL=C.UTF-8 | |
ENV LANG=C.UTF-8 | |
# Arguments | |
ARG CONTAINER_USER=esp | |
ARG CONTAINER_GROUP=esp | |
ARG ESP_BOARD=all | |
ARG GITHUB_TOKEN | |
# Install dependencies | |
RUN apt-get update \ | |
&& apt-get install -y git curl gcc clang ninja-build libudev-dev unzip xz-utils\ | |
python3 python3-pip python3-venv libusb-1.0-0 libssl-dev pkg-config libpython2.7 \ | |
&& apt-get clean -y && rm -rf /var/lib/apt/lists/* /tmp/library-scripts | |
# Set users | |
RUN adduser --disabled-password --gecos "" ${CONTAINER_USER} | |
USER ${CONTAINER_USER} | |
WORKDIR /home/${CONTAINER_USER} | |
# Install rustup | |
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- \ | |
--default-toolchain none -y --profile minimal | |
# Update envs | |
ENV PATH=${PATH}:/home/${CONTAINER_USER}/.cargo/bin | |
# Install extra crates | |
RUN ARCH=$($HOME/.cargo/bin/rustup show | grep "Default host" | sed -e 's/.* //') && \ | |
curl -L "https://github.com/esp-rs/espup/releases/latest/download/espup-${ARCH}" -o "${HOME}/.cargo/bin/espup" && \ | |
chmod u+x "${HOME}/.cargo/bin/espup" && \ | |
curl -L "https://github.com/esp-rs/espflash/releases/latest/download/cargo-espflash-${ARCH}.zip" -o "${HOME}/.cargo/bin/cargo-espflash.zip" && \ | |
unzip "${HOME}/.cargo/bin/cargo-espflash.zip" -d "${HOME}/.cargo/bin/" && \ | |
rm "${HOME}/.cargo/bin/cargo-espflash.zip" && \ | |
chmod u+x "${HOME}/.cargo/bin/cargo-espflash" && \ | |
curl -L "https://github.com/esp-rs/embuild/releases/latest/download/ldproxy-${ARCH}.zip" -o "${HOME}/.cargo/bin/ldproxy.zip" && \ | |
unzip "${HOME}/.cargo/bin/ldproxy.zip" -d "${HOME}/.cargo/bin/" && \ | |
rm "${HOME}/.cargo/bin/ldproxy.zip" && \ | |
chmod u+x "${HOME}/.cargo/bin/ldproxy" && \ | |
curl -L "https://github.com/bjoernQ/esp-web-flash-server/releases/latest/download/web-flash-${ARCH}.zip" -o "${HOME}/.cargo/bin/web-flash.zip" && \ | |
unzip "${HOME}/.cargo/bin/web-flash.zip" -d "${HOME}/.cargo/bin/" && \ | |
rm "${HOME}/.cargo/bin/web-flash.zip" && \ | |
chmod u+x "${HOME}/.cargo/bin/web-flash" | |
# Install Xtensa Rust | |
RUN if [ -n "${GITHUB_TOKEN}" ]; then export GITHUB_TOKEN=${GITHUB_TOKEN}; fi \ | |
&& ${HOME}/.cargo/bin/espup install\ | |
--targets "${ESP_BOARD}" \ | |
--log-level debug \ | |
--export-file /home/${CONTAINER_USER}/export-esp.sh | |
# Set default toolchain | |
RUN rustup default esp | |
# Activate ESP environment | |
RUN echo "source /home/${CONTAINER_USER}/export-esp.sh" >> ~/.bashrc | |
CMD [ "/bin/bash" ] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment