Gcc-arm-none-eabi is the gcc compiler toolchain for arm outside of a hosted environment. This means that it compiles bare metal code: code running without an already existing OS. ‘Normal’ gcc uses libraries from the system where its installed, so if you compile a hello world links to and uses the standard library. Gcc-arm would mean that the compiler is a cross compiler: its installed on your system but it compiles for arm. On an arm processor could run a full fledged linux environment so a gcc-arm-aarch64-linux or something like that would compile a program on your pc for that arm system running linux. Now there are meriads of arm systems not running linux which needs code to be compiled for as well. This is the place for the none-eabi variant: it does not use any system library and uses a standard interface for calling functions and other stuff. So in other words this is just the bare metal cross compiler for arm systems. And who makes these? Anyone who wants to. Gcc is an open source project and anyone could compile the toolchain. With compiling you can ‘select’ your version: do you want to build a linux-on-riscv compiler running on your pc? Definitely possible! The linux distro repos contain a couple of standard versions of gcc of which arm-none-eabi is one Answer from rainboww_J on reddit.com
🌐
GNU
gcc.gnu.org › onlinedocs › gcc › ARM-Options.html
ARM Options (Using the GNU Compiler Collection (GCC))
You can also set the fpu name at function level by using the target("fpu=") function attributes (see ARM Attributes) or pragmas (see Function Specific Option Pragmas). ... Specify the format of the __fp16 half-precision floating-point type. Permissible names are ‘none’, ‘ieee’, and ‘alternative’; the default is ‘none’, in which case the __fp16 type is not defined.
🌐
GitHub
github.com › carlosperate › arm-none-eabi-gcc-action
GitHub - carlosperate/arm-none-eabi-gcc-action: GitHub Action to set-up the `arm-none-eabi-gcc` GNU Arm Embedded Toolchain. · GitHub
GitHub Action (compatible with Linux x86_64 and aarch64, macOS x86_64 and arm64, and Windows x86_64 platforms) to download, check, set up, and cache the arm-none-eabi-gcc compiler toolchain. Simplest way to use this action is with the default options, which uses the the latest arm-none-eabi-gcc ...
Starred by 136 users
Forked by 26 users
Languages   TypeScript 93.6% | JavaScript 6.4%
Discussions

Whats "gcc-arm-none-eabi" toolchain ??
Gcc-arm-none-eabi is the gcc compiler toolchain for arm outside of a hosted environment. This means that it compiles bare metal code: code running without an already existing OS. ‘Normal’ gcc uses libraries from the system where its installed, so if you compile a hello world links to and uses the standard library. Gcc-arm would mean that the compiler is a cross compiler: its installed on your system but it compiles for arm. On an arm processor could run a full fledged linux environment so a gcc-arm-aarch64-linux or something like that would compile a program on your pc for that arm system running linux. Now there are meriads of arm systems not running linux which needs code to be compiled for as well. This is the place for the none-eabi variant: it does not use any system library and uses a standard interface for calling functions and other stuff. So in other words this is just the bare metal cross compiler for arm systems. And who makes these? Anyone who wants to. Gcc is an open source project and anyone could compile the toolchain. With compiling you can ‘select’ your version: do you want to build a linux-on-riscv compiler running on your pc? Definitely possible! The linux distro repos contain a couple of standard versions of gcc of which arm-none-eabi is one More on reddit.com
🌐 r/embedded
31
60
September 10, 2025
arm gcc toolchain as arm-elf or arm-none-eabi, what is the difference? - Stack Overflow
When you build a gcc toolchain there is the possibility to build it as arm-elf or as arm-none-eabi, but what is the difference? I use the eabi today, but that is just since everyone else seem to... More on stackoverflow.com
🌐 stackoverflow.com
How to quickly determine arm-none-eabi-gcc flags for a stm32 board? - Stack Overflow
2 arm-none-eabi-gcc: -march option v/s -mcpu option More on stackoverflow.com
🌐 stackoverflow.com
gnu arm - GNU Arm Embedded Toolchain | arm-none-eabi-gcc options: What is a difference between Thumb (-mthumb) and Arm (-marm) state? - Stack Overflow
I have a maybe trivial question, but what is a difference between Thumb (-mthumb) and Arm (-marm) state and why most of the tutorials recommend to use Thumb state? I am curious what exactly does it... More on stackoverflow.com
🌐 stackoverflow.com
🌐
manned.org
manned.org › arm-none-eabi-gcc › 34fd6095
arm-none-eabi-gcc - manned.org
Instead of describing the displayed options, an indication is given as to whether the option is enabled, disabled or set to a specific value (assuming that the compiler knows this at the point where the --help= option is used). Here is a truncated example from the ARM port of gcc: % gcc -Q -mabi=2 --help=target -c The following options are target specific: -mabi= 2 -mabort-on-noreturn [disabled] -mapcs [disabled] The output is sensitive to the effects of previous command-line options, so for example it is possible to find out which optimizations are enabled at -O2 by using: -Q -O2 --help=optim
🌐
GitHub
github.com › marketplace › actions › arm-none-eabi-gcc-gnu-arm-embedded-toolchain
arm-none-eabi-gcc GNU Arm Embedded Toolchain - GitHub Marketplace
GitHub Action (compatible with Linux x86_64 and aarch64, macOS x86_64 and arm64, and Windows x86_64 platforms) to download, check, set up, and cache the arm-none-eabi-gcc compiler toolchain. Simplest way to use this action is with the default options, which uses the the latest arm-none-eabi-gcc ...
🌐
GitHub
github.com › intel › CODK-A-X86 › tree › master › external › gcc-arm › share › doc › gcc-arm-none-eabi
CODK-A-X86/external/gcc-arm/share/doc/gcc-arm-none-eabi at master · intel/CODK-A-X86
GNU Tools for ARM Embedded Processors Version: 4.8 Table of Contents * Installing executables on Linux * Installing executables on Mac OS X * Installing executables on Windows * Invoking GCC * Architecture options usage * C Libraries usage * GCC Plugin usage * Linker scripts & startup code * Samples * GDB Server for CMSIS-DAP based hardware debugger * Installing executables on Linux * Unpack the tarball to the install directory, like this: $ cd $install_dir && tar xjf gcc-arm-none-eabi-*-yyyymmdd-linux.tar.bz2 For 64 bit system, 32 bit libc and libncurses are required to run the tools.
Author   intel
🌐
Reddit
reddit.com › r/embedded › whats "gcc-arm-none-eabi" toolchain ??
r/embedded on Reddit: Whats "gcc-arm-none-eabi" toolchain ??
September 10, 2025 -

gcc-arm-none-eabi toolchain, my major question is, why is it made and for what problem to solve ? before toolchains existed, what were the methods used to program a chip ??

also, who makes toolchains and how are they doing it ??

Top answer
1 of 12
185
Gcc-arm-none-eabi is the gcc compiler toolchain for arm outside of a hosted environment. This means that it compiles bare metal code: code running without an already existing OS. ‘Normal’ gcc uses libraries from the system where its installed, so if you compile a hello world links to and uses the standard library. Gcc-arm would mean that the compiler is a cross compiler: its installed on your system but it compiles for arm. On an arm processor could run a full fledged linux environment so a gcc-arm-aarch64-linux or something like that would compile a program on your pc for that arm system running linux. Now there are meriads of arm systems not running linux which needs code to be compiled for as well. This is the place for the none-eabi variant: it does not use any system library and uses a standard interface for calling functions and other stuff. So in other words this is just the bare metal cross compiler for arm systems. And who makes these? Anyone who wants to. Gcc is an open source project and anyone could compile the toolchain. With compiling you can ‘select’ your version: do you want to build a linux-on-riscv compiler running on your pc? Definitely possible! The linux distro repos contain a couple of standard versions of gcc of which arm-none-eabi is one
2 of 12
24
It contains the compiler, linker, and other helpful utilities to make code that can be loaded onto a microcontroller. Before any of those utilities existed, you could literally flip switches on a console to set your program in memory. You had to know the hex values for all your opcodes, and how each one expected parameters to be formatted. Programs were very limited. Compilers came along (like gcc) that took slightly more readable code (like assembly or C) and automatically converted them into a binary file. Then linkers showed up to automatically connect up multiple C files and create more complex programs. At the same time, utilities like gdb and openocd showed up to help get that binary file into the memory of a microcontroller, using protocols like swd or jtag. Specifically though, arm (the company that creates the arm instruction set and cortex architecture, that chip makers like ST/Apple/etc license and use), maintains arm-none-eabi-gcc and provides it for free. It has some competition from paid compilers like Keil and IAR, but in most cases gcc is the best choice.
🌐
Arm Developer
developer.arm.com › downloads › - › arm-gnu-toolchain-downloads
Arm GNU Toolchain Downloads – Arm Developer
For the permissible values of -mfloat-abi, see the GCC online manual: https://gcc.gnu.org/onlinedocs/gcc-14.3.0/gcc/ARM-Options.html#index-mfloat-abi · When using processors that can execute in Arm state and Thumb state, use -mthumb to generate code for Thumb state. Examples with no floating-point and Advanced SIMD instructions: $ arm-none-eabi-gcc -mcpu=cortex-m7+nofp $ arm-none-eabi-gcc -mcpu=cortex-r5+nofp -mthumb $ arm-none-eabi-gcc -mcpu=cortex-a53+nofp -mthumb $ arm-none-eabi-gcc -mcpu=cortex-a57 -mfloat-abi=soft -mthumb
Find elsewhere
🌐
Debian Manpages
manpages.debian.org › unstable › binutils-arm-none-eabi › arm-none-eabi-as.1.en.html
arm-none-eabi-as(1) — binutils-arm-none-eabi — Debian unstable — Debian Manpages
February 11, 2026 - Specify that the code has been ... and ARM code in mind. ... Turns on CodeComposer Studio assembly syntax compatibility mode. ... Specify that PIC code has been generated. The following options are available when as is configured for the Blackfin processor family. ... This option specifies the target processor. The optional sirevision is not used in assembler. It's here such that GCC can easily ...
🌐
Arch Linux Man Pages
man.archlinux.org › man › arm-none-eabi-gcc.1.en
arm-none-eabi-gcc(1) — Arch manual pages
When you invoke GCC, it normally does preprocessing, compilation, assembly and linking. The "overall options" allow you to stop this process at an intermediate stage. For example, the -c option says not to run the linker.
🌐
Arm Community
community.arm.com › support-forums › f › compilers-and-libraries-forum › 53310 › gcc-arm-none-eabi-what-were-the-newlib-compilation-options
gcc-arm-none-eabi: what were the Newlib compilation ...
August 4, 2022 - Have a question about working on Arm technology? Browse our support forums for solutions to your questions, answer questions from fellow community members and get help from Arm experts.
🌐
GitHub
github.com › ilg-archived › arm-none-eabi-gcc
GitHub - ilg-archived/arm-none-eabi-gcc: The GNU MCU Eclipse ARM Embedded GCC binaries · GitHub
Compared to the original ARM release, there are no functional changes; the same architecture options are supported, and the same combinations of libraries (derived from newlib) are provided. The GNU MCU Eclipse ARM Embedded GCC releases generally follow the official GNU Arm Embedded Toolchain releases, maintained by ARM. This release is functionally equivalent to 8-2018-q4-major from December 20, 2018, and is based on gcc-arm-none-eabi-8-2018-q4-major-src.tar.bz2 (download), but fixes the bugs present in the initial ARM release.
Starred by 66 users
Forked by 21 users
🌐
Arm Developer
developer.arm.com › downloads › - › gnu-rm
Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer
The wrong instruction causes an ... writeback - `vldr.16 s15,[r0]!'" The workaround is to use the -O0 command line option to generate the correct instruction when loading or storing of __fp16 type together with MVE....
🌐
Debian Manpages
manpages.debian.org › testing › binutils-arm-none-eabi › arm-none-eabi-ld.1.en.html
arm-none-eabi-ld(1) — binutils-arm-none-eabi — Debian testing — Debian Manpages
This allows options placed after the --default-script option on the command line to affect the behaviour of the linker script, which can be important when the linker command line cannot be directly controlled by the user. (eg because the command line is being constructed by another tool, such ...