MCPcopy Index your code
hub / github.com/esp-rs/espup

github.com/esp-rs/espup @v0.17.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.17.1 ↗ · + Follow
89 symbols 154 edges 13 files 42 documented · 47%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

espup

Crates.io MSRV Continuous Integration Security audit Matrix

rustup for esp-rs

espup is a tool for installing and maintaining the required toolchains for developing applications in Rust for Espressif SoC's.

To better understand what espup installs, see the installation chapter of The Rust on ESP Book

Requirements

Before running or installing espup, make sure that rustup is installed.

Linux systems also require the following packages: - Ubuntu/Debian sh sudo apt-get install -y gcc build-essential curl pkg-config - Fedora sh sudo dnf -y install perl gcc - perl is required to build openssl-sys - openSUSE Thumbleweed/Leap sudo zypper install -y gcc ninja make

Installation

cargo install espup --locked

It's also possible to use cargo-binstall or to directly download the pre-compiled release binaries.

Commands to install pre-compiled release binaries

  • Linux aarch64 sh curl -L https://github.com/esp-rs/espup/releases/latest/download/espup-aarch64-unknown-linux-gnu -o espup chmod a+x espup
  • Linux x86_64 sh curl -L https://github.com/esp-rs/espup/releases/latest/download/espup-x86_64-unknown-linux-gnu -o espup chmod a+x espup
  • macOS aarch64 sh curl -L https://github.com/esp-rs/espup/releases/latest/download/espup-aarch64-apple-darwin -o espup chmod a+x espup
  • macOS x86_64 sh curl -L https://github.com/esp-rs/espup/releases/latest/download/espup-x86_64-apple-darwin -o espup chmod a+x espup
  • Windows MSVC powershell Invoke-WebRequest 'https://github.com/esp-rs/espup/releases/latest/download/espup-x86_64-pc-windows-msvc.exe' -OutFile .\espup.exe

Quickstart

See Usage section for more details.

espup install

Environment Variables Setup

After installing the toolchain, on Unix systems, you need to source a file that will export the environment variables. This file is generated by espup and is located in your home directory by default. There are different ways to source the file: - Source this file in every terminal: 1. Source the export file: . $HOME/export-esp.sh

This approach requires running the command in every new shell. - Create an alias for executing the export-esp.sh: 1. Copy and paste the following command to your shell’s profile (.profile, .bashrc, .zprofile, etc.): alias get_esprs='. $HOME/export-esp.sh' 2. Refresh the configuration by restarting the terminal session or by running source [path to profile], for example, source ~/.bashrc.

This approach requires running the alias in every new shell. - Add the environment variables to your shell profile directly: 1. Add the content of $HOME/export-esp.sh to your shell’s profile: cat $HOME/export-esp.sh >> [path to profile], for example, cat $HOME/export-esp.sh >> ~/.bashrc. 2. Refresh the configuration by restarting the terminal session or by running source [path to profile], for example, source ~/.bashrc.

[!IMPORTANT] On Windows, environment variables are automatically injected into your system and don't need to be sourced.

Usage

Usage: espup <COMMAND>

Commands:
  completions  Generate completions for the given shell
  install      Installs Espressif Rust ecosystem
  uninstall    Uninstalls Espressif Rust ecosystem
  update       Updates Xtensa Rust toolchain
  help         Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

Completions Subcommand

For detailed instructions on how to enable tab completion, see Enable tab completion for Bash, Fish, Zsh, PowerShell or NuShell section.

Usage: espup completions [OPTIONS] <SHELL>

Arguments:
  <SHELL>  Shell to generate completions for [possible values: bash, zsh, fish, powershell, elvish, nushell]

Options:
  -l, --log-level <LOG_LEVEL>  Verbosity level of the logs [default: info] [possible values: debug, info, warn, error]
  -h, --help                   Print help

Install Subcommand

[!NOTE]

Xtensa Rust destination path

Installation paths can be modified by setting the environment variables CARGO_HOME and RUSTUP_HOME before running the install command. By default, toolchains will be installed under <rustup_home>/toolchains/esp, although this can be changed using the -a/--name option.

[!NOTE]

GitHub API

During the installation process, several GitHub queries are made, which are subject to certain limits. Our number of queries should not hit the limit unless you are running espup install command numerous times in a short span of time. We recommend setting the GITHUB_TOKEN environment variable when using espup in CI, if you want to use espup on CI, recommend using it via the xtensa-toolchain action, and making sure GITHUB_TOKEN is not set when using it on a host machine. See https://github.com/esp-rs/xtensa-toolchain/issues/15 for more details on this.

Usage: espup install [OPTIONS]

Options:
  -d, --default-host <DEFAULT_HOST>
          Target triple of the host

          [possible values: x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu, x86_64-pc-windows-msvc, x86_64-pc-windows-gnu, x86_64-apple-darwin, aarch64-apple-darwin]

-r, --esp-riscv-gcc
          Install Espressif RISC-V toolchain built with croostool-ng

          Only install this if you don't want to use the systems RISC-V toolchain

  -f, --export-file <EXPORT_FILE>
          Relative or full path for the export file that will be generated. If no path is provided, the file will be generated under home directory (https://docs.rs/dirs/latest/dirs/fn.home_dir.html)

          [env: ESPUP_EXPORT_FILE=]

      --disable-timeouts
          Disables HTTP timeouts for installation downloads and GitHub queries

          [env: ESPUP_DISABLE_TIMEOUTS=]

  -e, --extended-llvm
          Extends the LLVM installation.

          This will install the whole LLVM instead of only installing the libs.

  -l, --log-level <LOG_LEVEL>
          Verbosity level of the logs

          [default: info]
          [possible values: debug, info, warn, error]

  -a, --name <NAME>
          Xtensa Rust toolchain name

          [default: esp]

  -b, --stable-version <STABLE_VERSION>
          Stable Rust toolchain version.

          Note that only RISC-V targets use stable Rust channel.

          [default: stable]

  -k, --skip-version-parse
          Skips parsing Xtensa Rust version

  -s, --std
          Only install toolchains required for STD applications.

          With this option, espup will skip GCC installation (it will be handled by esp-idf-sys), hence you won't be able to build no_std applications.

  -t, --targets <TARGETS>
          Comma or space separated list of targets [esp32,esp32c2,esp32c3,esp32c5,esp32c6,esp32c61,esp32h2,esp32s2,esp32s3,esp32p4,all]

          [default: all]

  -v, --toolchain-version <TOOLCHAIN_VERSION>
          Xtensa Rust toolchain version

  -h, --help
          Print help (see a summary with '-h')

Uninstall Subcommand

Usage: espup uninstall [OPTIONS]

Options:
  -l, --log-level <LOG_LEVEL>  Verbosity level of the logs [default: info] [possible values: debug, info, warn, error]
  -a, --name <NAME>            Xtensa Rust toolchain name [default: esp]
  -h, --help                   Print help

Update Subcommand

Usage: espup update [OPTIONS]

Options:
  -d, --default-host <DEFAULT_HOST>
          Target triple of the host

          [possible values: x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu, x86_64-pc-windows-msvc, x86_64-pc-windows-gnu, x86_64-apple-darwin, aarch64-apple-darwin]

  -f, --export-file <EXPORT_FILE>
          Relative or full path for the export file that will be generated. If no path is provided, the file will be generated under home directory (https://docs.rs/dirs/latest/dirs/fn.home_dir.html)

          [env: ESPUP_EXPORT_FILE=]

      --disable-timeouts
          Disables HTTP timeouts for installation downloads and GitHub queries

          [env: ESPUP_DISABLE_TIMEOUTS=]

  -e, --extended-llvm
          Extends the LLVM installation.

          This will install the whole LLVM instead of only installing the libs.

  -l, --log-level <LOG_LEVEL>
          Verbosity level of the logs

          [default: info]
          [possible values: debug, info, warn, error]

  -a, --name <NAME>
          Xtensa Rust toolchain name

          [default: esp]

  -b, --stable-version <STABLE_VERSION>
          Stable Rust toolchain version.

          Note that only RISC-V targets use stable Rust channel.

          [default: stable]

  -k, --skip-version-parse
          Skips parsing Xtensa Rust version

  -s, --std
          Only install toolchains required for STD applications.

          With this option, espup will skip GCC installation (it will be handled by esp-idf-sys), hence you won't be able to build no_std applications.

  -t, --targets <TARGETS>
          Comma or space separated list of targets [esp32,esp32c2,esp32c3,esp32c5,esp32c6,esp32c61,esp32h2,esp32s2,esp32s3,all]

          [default: all]

  -v, --toolchain-version <TOOLCHAIN_VERSION>
          Xtensa Rust toolchain version

  -h, --help
          Print help (see a summary with '-h')

Enable Tab Completion for Bash, Fish, Zsh, or PowerShell

espup supports generating completion scripts for Bash, Fish, Zsh, and PowerShell. See espup help completions for full details, but the gist is as simple as using one of the following:

# Bash
$ espup completions bash > ~/.local/share/bash-completion/completions/espup

# Bash (macOS/Homebrew)
$ espup completions bash > $(brew --prefix)/etc/bash_completion.d/espup.bash-completion

# Fish
$ mkdir -p ~/.config/fish/completions
$ espup completions fish > ~/.config/fish/completions/espup.fish

# Zsh
$ espup completions zsh > ~/.zfunc/_espup

# PowerShell v5.0+
$ espup completions powershell >> $PROFILE.CurrentUserCurrentHost
# or
$ espup completions powershell | Out-String | Invoke-Expression

# NuShell
$ mkdir -p ~/.config/nushell/completions
$ espup completions nushell > ~/.config/nushell/completions/espup.nu

Note: you may need to restart your shell in order for the changes to take effect.

For zsh, you must then add the following line in your ~/.zshrc before compinit:

fpath+=~/.zfunc

License

Licensed under either of:

  • Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
  • MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Extension points exported contracts — how you extend this code

Installable (Interface)
(no doc) [4 implementers]
src/toolchain/mod.rs

Core symbols most depended-on inside this repo

download_file
called by 6
src/toolchain/mod.rs
finish_download_progress_bar
called by 5
src/toolchain/mod.rs
uninstall
called by 4
src/main.rs
initialize_logger
called by 4
src/lib.rs
set_env_variable
called by 4
src/env.rs
name
called by 4
src/toolchain/rust.rs
get_rustup_home
called by 4
src/toolchain/rust.rs
check_for_update
called by 3
src/lib.rs

Shape

Function 49
Method 25
Class 8
Enum 6
Interface 1

Languages

Rust100%

Modules by API surface

src/toolchain/rust.rs16 symbols
src/toolchain/mod.rs15 symbols
src/env.rs9 symbols
src/toolchain/llvm.rs8 symbols
src/toolchain/gcc.rs8 symbols
src/main.rs6 symbols
src/completion_shell.rs6 symbols
tests/integration.rs5 symbols
src/targets.rs5 symbols
src/cli.rs5 symbols
src/host_triple.rs3 symbols
src/lib.rs2 symbols

For agents

$ claude mcp add espup \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact