{"id":18968862,"url":"https://github.com/tttapa/docker-arm-cross-toolchain","last_synced_at":"2025-04-06T11:07:55.118Z","repository":{"id":52680125,"uuid":"455676774","full_name":"tttapa/docker-arm-cross-toolchain","owner":"tttapa","description":"Modern GCC cross-compilation toolchains for Raspberry Pi","archived":false,"fork":false,"pushed_at":"2025-01-11T23:06:40.000Z","size":102,"stargazers_count":102,"open_issues_count":4,"forks_count":17,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-30T10:06:45.069Z","etag":null,"topics":["cross-compilation","gcc","linux","raspberry-pi","raspberry-pi-pico","rp2040"],"latest_commit_sha":null,"homepage":"https://tttapa.github.io/Pages/Raspberry-Pi","language":"CMake","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tttapa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-04T19:48:12.000Z","updated_at":"2025-03-11T18:37:49.000Z","dependencies_parsed_at":"2024-09-08T12:50:39.256Z","dependency_job_id":"dbc1bacf-4f88-4ac5-b6ac-e3e2e1ad814c","html_url":"https://github.com/tttapa/docker-arm-cross-toolchain","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tttapa%2Fdocker-arm-cross-toolchain","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tttapa%2Fdocker-arm-cross-toolchain/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tttapa%2Fdocker-arm-cross-toolchain/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tttapa%2Fdocker-arm-cross-toolchain/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tttapa","download_url":"https://codeload.github.com/tttapa/docker-arm-cross-toolchain/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247471518,"owners_count":20944158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cross-compilation","gcc","linux","raspberry-pi","raspberry-pi-pico","rp2040"],"created_at":"2024-11-08T14:48:41.384Z","updated_at":"2025-04-06T11:07:55.099Z","avatar_url":"https://github.com/tttapa.png","language":"CMake","funding_links":[],"categories":[],"sub_categories":[],"readme":"# docker-arm-cross-toolchain\n\nRepository with ARM cross-compilation toolchains (mainly for Raspberry Pi),\navailable as [stand-alone tarballs](https://github.com/tttapa/docker-arm-cross-toolchain/releases)\nor [Docker containers](https://github.com/tttapa/docker-arm-cross-toolchain/pkgs/container/docker-arm-cross-toolchain).\n\n- **GCC**: 14.2, 13.3, 12.4\n- **Languages**: C, C++, Fortran\n- **Glibc**: 2.31 and later\n- **Linux**: 5.4 and later\n- **Distributions**: Ubuntu 20.04 Focal, Raspberry Pi OS 11 Bullseye, Rocky 9 and later\n\nThe toolchains are built using [crosstool-NG](https://crosstool-ng.github.io/).  \nThe Linux compilers include the address and undefined behavior sanitizers (Asan\nand UBsan) and gdbserver (15.1). They are compatible with glibc 2.31\nand Linux 5.4 or later, and have been patched for [Debian Multiarch](https://wiki.debian.org/Multiarch).  \nThe bare-metal compilers ship with newlib 4.4 and newlib-nano 4.3.\n\nThe toolchains themselves can be used on any x86-64 system running Ubuntu 18.04 Bionic, Debian 10 Buster, Rocky 8 (or later),\nor on a Raspberry Pi running 64-bit Ubuntu 20.04 Bionic, 64-bit Raspberry Pi OS 11 Bullseye (or later).\n\nOptional integration with Conan is provided: the cross-compilation toolchains\ncan be added as a tool requirements in your Conan profile.\n\n## Download\n\nThe ready-to-use toolchain tarballs can be downloaded from the [Releases page](https://github.com/tttapa/docker-arm-cross-toolchain/releases) (no Docker required).  \nDirect links are available in the table below: \n\n\n| Target triplet | GCC 14.2 | GCC 13.3 | GCC 12.4 | Recommended hardware | Supported distributions |\n|---------------:|:--------:|:--------:|:--------:|:-------------------|:------------------------|\n| `aarch64-rpi3-linux-gnu` | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-gcc14.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-aarch64-rpi3-linux-gnu-gcc14.tar.xz) | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-gcc13.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-aarch64-rpi3-linux-gnu-gcc13.tar.xz) | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-gcc12.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-aarch64-rpi3-linux-gnu-gcc12.tar.xz) | 64-bit ARMv8:\u003cbr\u003eRPi 2B rev. 1.2, RPi 3B/3B+, CM 3,\u003cbr\u003eRPi 4B/400, CM 4, RPi Zero 2 W, RPi 5 | Ubuntu 20.04 Focal,\u003cbr\u003eDebian 11 Bullseye,\u003cbr\u003eRocky 9 and later |\n| `armv8-rpi3-linux-gnueabihf` | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-armv8-rpi3-linux-gnueabihf-gcc14.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-armv8-rpi3-linux-gnueabihf-gcc14.tar.xz) | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-armv8-rpi3-linux-gnueabihf-gcc13.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-armv8-rpi3-linux-gnueabihf-gcc13.tar.xz) | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-armv8-rpi3-linux-gnueabihf-gcc12.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-armv8-rpi3-linux-gnueabihf-gcc12.tar.xz) | 32-bit ARMv8:\u003cbr\u003eRPi 2B rev. 1.2, RPi 3B/3B+, CM 3,\u003cbr\u003eRPi 4B/400, CM 4, RPi Zero 2 W, RPi 5 | Ubuntu 20.04 Focal,\u003cbr\u003eDebian 11 Bullseye\u003cbr\u003eand later |\n| `armv6-rpi-linux-gnueabihf` | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-armv6-rpi-linux-gnueabihf-gcc14.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-armv6-rpi-linux-gnueabihf-gcc14.tar.xz) | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-armv6-rpi-linux-gnueabihf-gcc13.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-armv6-rpi-linux-gnueabihf-gcc13.tar.xz) | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-armv6-rpi-linux-gnueabihf-gcc12.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-armv6-rpi-linux-gnueabihf-gcc12.tar.xz) | 32-bit ARMv6:\u003cbr\u003eRPi A/B/A+/B+, CM 1, RPi Zero/Zero W | Raspberry Pi OS 11 Bullseye\u003cbr\u003eand later |\n| `arm-pico-eabi` | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-arm-pico-eabi-gcc14.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-arm-pico-eabi-gcc14.tar.xz) | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-arm-pico-eabi-gcc13.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-arm-pico-eabi-gcc13.tar.xz) | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-arm-pico-eabi-gcc12.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-arm-pico-eabi-gcc12.tar.xz) | 32-bit ARM Cortex-M0+:\u003cbr\u003eRP2040, RPi Pico, RPi Pico W | Raspberry Pi Pico SDK 2.0.0 |\n| `arm-pico2-eabi` | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-arm-pico2-eabi-gcc14.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-arm-pico2-eabi-gcc14.tar.xz) | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-arm-pico2-eabi-gcc13.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-arm-pico2-eabi-gcc13.tar.xz) | [⬇️\u0026nbsp;x86-64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-arm-pico2-eabi-gcc12.tar.xz)\u003cbr\u003e[⬇️\u0026nbsp;arm64](https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-arm-pico2-eabi-gcc12.tar.xz) | 32-bit ARM Cortex-M33:\u003cbr\u003eRP2350, RPi Pico 2 | Raspberry Pi Pico SDK 2.0.0 |\n\nFor modern Raspberry Pi boards running 64-bit Raspberry Pi OS or 64-bit Ubuntu,\nuse the `aarch64-rpi3-linux-gnu` toolchain.  \nFor modern Raspberry Pi boards running 32-bit Raspberry Pi OS, use the \n`armv8-rpi3-linux-gnueabihf` toolchain.  \nFor older Raspberry Pi boards, or if you need to support all boards, use the\n`armv6-rpi-linux-gnueabihf` toolchain.\n\nSee [www.raspberrypi.com/documentation/computers/processors.html](https://www.raspberrypi.com/documentation/computers/processors.html) for an overview of the processors used by different Raspberry Pi models.\n\nThere is no specific toolchain for the first version of the RPi 2B (which \nuses a quad-core ARMv7 Cortex-A7), but the `armv6-rpi-linux-gnueabihf` toolchain\nis compatible with this architecture as well.\n\nFor the RPi 5, RPi 4B/400 and the CM 4, use the `aarch64-rpi3-linux-gnu` or the \n`armv8-rpi3-linux-gnueabihf` toolchain, depending on whether you're using a\n64-bit or a 32-bit operating system. For optimal performance, you can include\nthe `-mcpu=cortex-a76+crypto` (RPi 5) or `-mcpu=cortex-a72` (RPi 4) flag ([GCC ARM options](https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html)).\n\nFor the Raspberry Pi Pico and other RP2040-based boards, use the bare-metal \n`arm-pico-eabi` toolchain.\n\n## Installation and use through Conan\n\nInstalling the toolchains through Conan is the easiest approach for most use\ncases. Cross-compiling an existing Conan+CMake project using the toolchains from\nthis repository can be done as follows:\n\n```sh\n# Download this repository and add its recipes to Conan\ngit clone https://github.com/tttapa/docker-arm-cross-toolchain.git\nconan remote add tttapa-docker-arm-cross-toolchain ./docker-arm-cross-toolchain\n```\n```sh\n# Open a Conan+CMake project\ncd ./docker-arm-cross-toolchain/test # just a simple example project\n# Install the toolchain using Conan (select the appropriate profile for your RPi)\nconan install . --build=missing -pr ../profiles/aarch64-rpi3-linux-gnu.conan\n# Configure the CMake project\ncmake --preset conan-release --fresh\n# Build the CMake project\ncmake --build --preset conan-release\n# Verify that the files were indeed cross-compiled for the RPi\nfile build/Release/hello_*\n```\n\nThe compiler version etc. can be modified in the Conan profiles in the\n[`profiles`](./profiles) directory.\n\nIf you wish not to use Conan, you can follow the manual instructions below.\n\n## Manual installation\n\nDownload the archive of the toolchain you need using the links above. \nThen extract it to a convenient location, e.g. `~/opt`.\n\nYou can download and extract the toolchain in one go using `wget` and `tar`,\nfor example:\n```sh\nmkdir -p ~/opt\nwget https://github.com/tttapa/docker-arm-cross-toolchain/releases/latest/download/x-tools-aarch64-rpi3-linux-gnu-gcc14.tar.xz -O- | tar xJ -C ~/opt\n```\n\nIf you want to use the toolchain directly, you can add the\n`~/opt/x-tools/aarch64-rpi3-linux-gnu/bin` folder to your path:\n\n```sh\nexport PATH=\"$HOME/opt/x-tools/aarch64-rpi3-linux-gnu/bin:$PATH\"\n```\n\nTo make it permanent, you can add it to your `~/.profile`:\n```sh\necho 'export PATH=\"$HOME/opt/x-tools/aarch64-rpi3-linux-gnu/bin:$PATH\"' \u003e\u003e ~/.profile\n```\nTo verify that the toolchain was successfully added to the path, try querying\nthe GCC version:\n```sh\naarch64-rpi3-linux-gnu-gcc --version\n```\n\n## Manual usage\n\n### CMake\n\nFor new software configured using CMake, simply specify the appropriate\ntoolchain file. Several toolchain files are included with the toolchain, and you\ncan wrap them in a custom toolchain file if you need finer control.\nSee the [`cmake`](./cmake/) directory for an overview of available toolchain\nfiles.\n\nFor example:\n```sh\ncd my-cmake-project # Open the directory of your CMake project\ntriple=aarch64-rpi3-linux-gnu # Select the main toolchain\nvariant_triple=aarch64-rpi4-linux-gnu # Select a specific variant\n# Configure\ncmake -S . -B build-$variant_triple --toolchain ~/opt/x-tools/$triple/$variant_triple.toolchain.cmake\n# Build\ncmake --build build-$variant_triple -j\n```\n\nOn older versions of CMake, you might have to use `-DCMAKE_TOOLCHAIN_FILE=\"$HOME/opt/x-tools/$triple/$variant_triple.toolchain.cmake\"` instead of `--toolchain ~/opt/x-tools/$triple/$variant_triple.toolchain.cmake`.\n\nI _highly_ recommend using CMake for your own projects as well, this makes it\nmuch easier for other people to depend on, package, and cross-compile your\nsoftware.  \nSee [Mastering CMake: Cross Compiling with CMake](https://cmake.org/cmake/help/book/mastering-cmake/chapter/Cross%20Compiling%20With%20CMake.html)\nand the [`cmake-toolchains(7)` manpage](https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html) for more details about CMake toolchain files.\n\nFor more detailed instructions on how to cross-compile software and how to \nhandle dependencies, see \u003chttps://tttapa.github.io/Pages/Raspberry-Pi/index.html\u003e.\n\n#### VSCode CMake Tools Extension\n\nTo pass the `--toolchain` option to CMake when using the [CMake Tools extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools),\nadd the paths to the different toolchain files to a “kits” file, either globally\n(\u003ckbd\u003eCtrl+Shift+P\u003c/kbd\u003e, `Edit User-Local CMake Kits`) or for the specific\nproject (in `.vscode/cmake-kits.json`). \nThen select this toolchain using \u003ckbd\u003eCtrl+Shift+P\u003c/kbd\u003e, `CMake: Select a Kit`.\n\nFor example, `cmake-kits.json` could contain:\n```json\n[\n    {\n        \"name\": \"Raspberry Pi 5 (64-bit, GCC)\",\n        \"toolchainFile\": \"${env:HOME}/opt/x-tools/aarch64-rpi3-linux-gnu/aarch64-rpi5-linux-gnu.toolchain.cmake\"\n    }\n]\n\n```\nA full kits file with all toolchains is included: [`cmake/cmake-kits.json`](./cmake/cmake-kits.json).\n\nSee [the CMake Tools documentation](https://github.com/microsoft/vscode-cmake-tools/blob/main/docs/kits.md#specify-a-toolchain)\nfor more details.\n\n### Manual compiler invocation\n\nTo invoke a compiler or other tools manually, simply add the `bin` folder of\nthe toolchain to your path, as explained [above](#installation).\n\nThen invoke the compiler you need, for example:\n```sh\ncat \u003e hello.c \u003c\u003c EOF\n#include \u003cstdio.h\u003e\nint main(void) { puts(\"Hello, world!\"); }\nEOF\naarch64-rpi3-linux-gnu-gcc hello.c -o hello\naarch64-rpi3-linux-gnu-readelf -h hello\n```\n\nNote that the compilers have been configured to use the most compatible target\nby default (e.g. the Raspberry Pi 3 for `aarch64-rpi3-linux-gnu`), so you might\nhave to specify additional flags to select the one that fits your needs (e.g.\n`-mcpu=cortex-a72+crc+simd` for the Raspberry Pi 4). See the flags used in the\nCMake toolchain files in the [`cmake`](./cmake/) directory for inspiration.\n\n### Autotools, Make and other legacy build tools\n\nFor legacy software configured using Autotools, you usually have to pass the\n`--host` flag (e.g. `--host=\"aarch64-rpi3-linux-gnu\"`) to the `configure`\nscript.  \nPackages with custom configuration scripts might have differently named options,\nfor example, OpenSSL has `--cross-compile-prefix=\"aarch64-rpi3-linux-gnu-\"`.  \nCustom Makefiles might require you to set a variable such as\n`CROSS=aarch64-rpi3-linux-gnu-` or `CROSS_COMPILE=aarch64-rpi3-linux-gnu-`.   \nIf all else fails, try setting the `CC`, `CXX` or `FC` environment variables\nexplicitly.\n\n### Pico SDK\n\nTo use the `arm-pico-eabi` toolchain for the Raspberry Pi Pico with the Pico SDK,\nset the `PICO_SDK_PATH` environment variable when invoking the CMake configure\ncommand, and use the provided toolchain file:\n\n```sh\nexport PICO_SDK_PATH=\"$HOME/pico/pico-sdk\"\ncmake -S . -B build --toolchain ~/opt/x-tools/arm-pico-eabi/arm-pico-eabi.toolchain.cmake # ...\ncmake --build build -j # ...\n```\n\nIf you're using Visual Studio Code with the CMake Tools extension, create a file\n`.vscode/cmake-kits.json` with the following contents:\n```json\n[\n    {\n        \"name\": \"Raspberry Pi Pico (GCC)\",\n        \"toolchainFile\": \"${env:HOME}/opt/x-tools/arm-pico-eabi/arm-pico-eabi.toolchain.cmake\",\n        \"environmentVariables\": {\"PICO_SDK_PATH\": \"${env:HOME}/pico/pico-sdk\"}\n    }\n]\n```\nThen select this toolchain using \u003ckbd\u003eCtrl+Shift+P\u003c/kbd\u003e, `CMake: Select a Kit`.\n\nThe `.vscode/cmake-kits.json` file is also included in this repository:\n[`cmake/cmake-kits.json`](./cmake/cmake-kits.json).\n\n\u003cdetails\u003e\n\n\u003csummary\u003eAlternative approach without a toolchain file ...\u003c/summary\u003e\n\nIf you don't want to use a toolchain file, it is possible to select the correct\ntoolchain using environment variables:\n\n```sh\nexport PICO_SDK_PATH=\"$HOME/pico/pico-sdk\"\nexport PICO_GCC_TRIPLE=\"arm-pico-eabi\"\nexport PICO_TOOLCHAIN_PATH=\"$HOME/opt/x-tools/arm-pico-eabi/bin\"\ncmake -S . -B build # ...\ncmake --build build -j # ...\n```\n\nIf you're using Visual Studio Code with the CMake Tools extension, you can add\nthe following to `.vscode/settings.json`:\n```json\n{\n    \"cmake.configureEnvironment\": {\n        \"PICO_GCC_TRIPLE\": \"arm-pico-eabi\",\n    }\n}\n```\n\nAlternatively, create a file `.vscode/cmake-kits.json` with the following contents:\n```json\n[\n    {\n        \"name\": \"RPi Pico\",\n        \"environmentVariables\": {\n            \"PICO_SDK_PATH\": \"${env:HOME}/pico/pico-sdk\",\n            \"PICO_GCC_TRIPLE\": \"arm-pico-eabi\",\n            \"PICO_TOOLCHAIN_PATH\": \"${env:HOME}/opt/x-tools/arm-pico-eabi/bin\"\n        }\n    }\n]\n```\n\n\n\u003c/details\u003e\n\n## Deployment\n\nRecent versions of GCC require recent versions of the C++ standard library,\n`libstdc++`. If the operating system on the Raspberry Pi you want to deploy to\nuses an older version of `libstdc++`, you have multiple options:\n\n - Link the C++ standard library statically, using the `-static-libstdc++` flag.\n   This results in slightly larger binaries, but improves portability.\n - Install a newer version of the C++ standard library globally by copying\n   `x-tools/aarch64-rpi3-linux-gnu/aarch64-rpi3-linux-gnu/sysroot/lib64/libstdc++.so.6.0.*`\n   from the toolchain to the `/usr/local/lib/aarch64-linux-gnu` folder on the \n   Pi, and run `sudo ldconfig`.\n - Ship a copy of `libstdc++` with your application, and ensure that it is\n   loaded before the global one, by using the `-rpath` flag or the\n   `LD_LIBRARY_PATH` environment variable. This may not be an option if your\n   binary is loaded by another program (e.g. Python modules).\n - Use a Docker container with a recent version of the C++ standard library.\n\nOther libraries, such as `libasan.so` can be installed similarly.\n\nNote that this is not at all true for the C standard library, `libc.so`. The\nC standard library is tightly coupled to the rest of the system, and cannot be\nreplaced by a newer version.\n\n## ABI compatibility\n\nIf you plan to link code compiled using these toolchains to libraries that are\nprovided by Raspberry Pi OS, you should use the `armv6-rpi-linux-gnueabihf`\ntoolchain for 32-bit RPi OS or the `aarch64-rpi3-linux-gnu` toolchain for 64-bit\nRPi OS. Even though using the `armv8-rpi3-linux-gnueabihf` toolchain may result\nin significantly more performant binaries, they may not be compatible with\nlibraries that were compiled for the ARMv6 architecture (which includes all\nlibraries that are part of Raspberry Pi OS). For instance, the `std::shared_ptr`\nABI is different between the `armv8-rpi3-linux-gnueabihf` and\n`armv6-rpi-linux-gnueabihf` toolchains.\n\nIf you compile all your libraries from source using the same toolchain (e.g.\nusing a package manager) and link them statically, ABI incompatibility is\nusually less of a concern.\n\n## Common issues\n\n- `/usr/lib/aarch64-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.33 not found`:  \n  This means that the available version of the C++ standard library is too old.\n  See [§Deployment](#deployment) for instructions to resolve this issue.\n- `/lib64/libc.so.6: version ``GLIBC_2.31' not found`:  \n  Your operating system is too old. Use a newer operating system, or an older\n  version of the toolchain. Note that upgrading glibc is not possible.\n- `Could NOT find Threads (missing: Threads_FOUND)`:   \n  See https://github.com/tttapa/RPi-Cross-Cpp-Development/issues/2#issuecomment-1431703892 for a fix.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftttapa%2Fdocker-arm-cross-toolchain","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftttapa%2Fdocker-arm-cross-toolchain","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftttapa%2Fdocker-arm-cross-toolchain/lists"}