Cross-compiler
A compiler that runs on one architecture but produces code for another.
A microcontroller with 64 KB of flash can't run GCC, so the code is built on a PC and flashed across. The toolchain is identified by a target triplet: arm-none-eabi means ARM, no operating system, embedded ABI. It comprises not just the compiler but an assembler, a linker, a C library built for the target and a linker script that knows where the memory lives.
The classic headache is mixing up host and target: build systems that run test programs during configuration, headers from the host's /usr/include sneaking in, a library linked for x86. GCC needs a separately built compiler per target, whereas Clang/LLVM picks the target with a flag — part of why Zig and Rust cross-compile with barely any ceremony. The result is often tried in QEMU before anyone digs out a real board.