| # Reference tables | |
| ## Compiler ids | |
| These are return values of the `get_id` (Compiler family) and | |
| `get_argument_syntax` (Argument syntax) method in a compiler object. | |
| | Value | Compiler family | Argument syntax | | |
| | ----- | --------------- | --------------- | | |
| | arm | ARM compiler | | | |
| | armclang | ARMCLANG compiler | | | |
| | ccomp | The CompCert formally-verified C compiler | | | |
| | ccrx | Renesas RX Family C/C++ compiler | | | |
| | clang | The Clang compiler | gcc | | |
| | clang-cl | The Clang compiler (MSVC compatible driver) | msvc | | |
| | dmd | D lang reference compiler | | | |
| | emscripten| Emscripten WASM compiler | | | |
| | flang | Classic Flang Fortran compiler | | | |
| | g95 | The G95 Fortran compiler | | | |
| | gcc | The GNU Compiler Collection | gcc | | |
| | intel | Intel compiler (Linux and Mac) | gcc | | |
| | intel-cl | Intel compiler (Windows) | msvc | | |
| | intel-llvm | Intel oneAPI LLVM-based compiler | | | |
| | intel-llvm-cl | Intel oneAPI LLVM-based compiler (Windows) | msvc | | |
| | lcc | Elbrus C/C++/Fortran Compiler | | | |
| | llvm | LLVM-based compiler (Swift, D) | | | |
| | llvm-flang| Flang Fortran compiler (LLVM-based) | | | |
| | mono | Xamarin C# compiler | | | |
| | mwccarm | Metrowerks C/C++ compiler for Embedded ARM | | | |
| | mwcceppc | Metrowerks C/C++ compiler for Embedded PowerPC | | | |
| | msvc | Microsoft Visual Studio | msvc | | |
| | nagfor | The NAG Fortran compiler | | | |
| | nvidia_hpc| NVidia HPC SDK compilers | | | |
| | nvcc | NVidia CUDA compiler | | | |
| | open64 | The Open64 Fortran Compiler | | | |
| | pathscale | The Pathscale Fortran compiler | | | |
| | pgi | Portland PGI C/C++/Fortran compilers | | | |
| | qcc | QNX SDP qcc/q++ compiler driver | | | |
| | rustc | Rust compiler | | | |
| | sdcc | Small Device C Compiler | | | |
| | sun | Sun Fortran compiler | | | |
| | c2000 | Texas Instruments C/C++ Compiler (C2000) | | | |
| | c6000 | Texas Instruments C/C++ Compiler (C6000) | | | |
| | ti | Texas Instruments C/C++ Compiler | | | |
| | valac | Vala compiler | | | |
| | xc16 | Microchip XC16 C compiler | | | |
| | xc32-gcc | Microchip XC32 C/C++ compiler | gcc | | |
| | cython | The Cython compiler | | | |
| | nasm | The NASM compiler (Since 0.64.0) | | | |
| | yasm | The YASM compiler (Since 0.64.0) | | | |
| | ml | Microsoft Macro Assembler for x86 and x86_64 (Since 0.64.0) | msvc | | |
| | armasm | Microsoft Macro Assembler for ARM and AARCH64 (Since 0.64.0) | | | |
| | mwasmarm | Metrowerks Assembler for Embedded ARM | | | |
| | mwasmeppc | Metrowerks Assembler for Embedded PowerPC | | | |
| | tasking | TASKING VX-toolset | | | |
| ## Linker ids | |
| These are return values of the `get_linker_id` method in a compiler object. | |
| | Value | Linker family | | |
| | ----- | --------------- | | |
| | ld.bfd | The GNU linker | | |
| | ld.eld | Qualcomm's embedded linker | | |
| | ld.gold | The GNU gold linker | | |
| | ld.lld | The LLVM linker, with the GNU interface | | |
| | ld.mold | The fast MOLD linker | | |
| | ld.solaris | Solaris and illumos | | |
| | ld.wasm | emscripten's wasm-ld linker | | |
| | ld.wild | The fast Wild Linker | | |
| | ld.zigcc | The Zig linker (C/C++ frontend; GNU-like) | | |
| | ld64 | Apple ld64 | | |
| | ld64.lld | The LLVM linker, with the ld64 interface | | |
| | link | MSVC linker | | |
| | lld-link | The LLVM linker, with the MSVC interface | | |
| | xilink | Used with Intel-cl only, MSVC like | | |
| | optlink | optlink (used with DMD) | | |
| | rlink | The Renesas linker, used with CCrx only | | |
| | xc16-ar | The Microchip linker, used with XC16 only | | |
| | ld.xc32 | The Microchip linker, used with XC32 only | | |
| | ar2000 | The Texas Instruments linker, used with C2000 only | | |
| | ti-ar | The Texas Instruments linker | | |
| | ar6000 | The Texas Instruments linker, used with C6000 only | | |
| | armlink | The ARM linker (arm and armclang compilers) | | |
| | pgi | Portland/Nvidia PGI | | |
| | nvlink | Nvidia Linker used with cuda | | |
| | ccomp | CompCert used as the linker driver | | |
| | mwldarm | The Metrowerks Linker with the ARM interface, used with mwccarm only | | |
| | mwldeppc | The Metrowerks Linker with the PowerPC interface, used with mwcceppc only | | |
| | tasking | TASKING VX-toolset | | |
| | sdcc | SDCC used as the linker driver | | |
| For languages that don't have separate dynamic linkers such as C# and Java, the | |
| `get_linker_id` will return the compiler name. | |
| ## Script environment variables | |
| | Value | Comment | | |
| | ----- | ------- | | |
| | MESONINTROSPECT | Command to run to run the introspection command, may be of the form `python /path/to/meson introspect`, user is responsible for splitting the path if necessary. | | |
| | MESONREWRITE | Command to run to run the rewriting command, only set when running `dist` scripts | | |
| | MESON_BUILD_ROOT | Absolute path to the build dir | | |
| | MESON_DIST_ROOT | Points to the root of the staging directory, only set when running `dist` scripts | | |
| | MESON_SOURCE_ROOT | Absolute path to the source dir | | |
| | MESON_SUBDIR | Current subdirectory, only set for `run_command` | | |
| ## CPU families | |
| These are returned by the `cpu_family` method of `build_machine`, | |
| `host_machine` and `target_machine`. For cross compilation they are | |
| set in the cross file. | |
| | Value | Comment | | |
| | ----- | ------- | | |
| | aarch64 | 64 bit ARM processor | | |
| | alpha | DEC Alpha processor | | |
| | arc | 32 bit ARC processor | | |
| | arm | 32 bit ARM processor | | |
| | avr | Atmel AVR processor | | |
| | c2000 | 32 bit C2000 processor | | |
| | c6000 | 32 bit C6000 processor | | |
| | csky | 32 bit CSky processor | | |
| | dspic | 16 bit Microchip dsPIC | | |
| | e2k | MCST Elbrus processor | | |
| | f8 | 8 bit SDCC F8 | | |
| | ft32 | 32 bit Bridgetek MCU | | |
| | hc08 | 8 bit Motorola HC08/S08 | | |
| | ia64 | Itanium processor | | |
| | loongarch64 | 64 bit Loongson processor| | |
| | m68k | Motorola 68000 processor | | |
| | mcs51 | 8 bit Intel MCS-51 | | |
| | microblaze | MicroBlaze processor | | |
| | mips | 32 bit MIPS processor | | |
| | mips64 | 64 bit MIPS processor | | |
| | mos6502 | 8 bit MOS 6502/65C02 | | |
| | msp430 | 16 bit MSP430 processor | | |
| | padauk | 8 bit Padauk PDK | | |
| | parisc | HP PA-RISC processor | | |
| | pic24 | 16 bit Microchip PIC24 | | |
| | pic32 | 32 bit Microchip PIC32 | | |
| | ppc | 32 bit PPC processors | | |
| | ppc64 | 64 bit PPC processors | | |
| | rabbit | 8 bit Rabbit 2000/3000 | | |
| | riscv32 | 32 bit RISC-V Open ISA | | |
| | riscv64 | 64 bit RISC-V Open ISA | | |
| | rl78 | Renesas RL78 | | |
| | rx | Renesas RX 32 bit MCU | | |
| | s390 | IBM zSystem s390 | | |
| | s390x | IBM zSystem s390x | | |
| | sh4 | SuperH SH-4 | | |
| | sm83 | 8 bit Sharp SM83 | | |
| | sparc | 32 bit SPARC | | |
| | sparc64 | SPARC v9 processor | | |
| | stm8 | 8 bit STMicro STM8 | | |
| | sw_64 | 64 bit sunway processor | | |
| | tlcs90 | 8 bit Toshiba TLCS-90 | | |
| | wasm32 | 32 bit Webassembly | | |
| | wasm64 | 64 bit Webassembly | | |
| | x86 | 32 bit x86 processor | | |
| | x86_64 | 64 bit x86 processor | | |
| | z80 | 8 bit Zilog Z80 family | | |
| | tricore | Tricore 32 bit processor | | |
| Any cpu family not listed in the above list is not guaranteed to | |
| remain stable in future releases. | |
| Those porting from autotools should note that Meson does not add | |
| endianness to the name of the cpu_family. For example, autotools | |
| will call little endian PPC64 "ppc64le", Meson will not, you must | |
| also check the `.endian()` value of the machine for this information. | |
| ## Operating system names | |
| These are provided by the `.system()` method call. | |
| | Value | Comment | | |
| | ----- | ------- | | |
| | android | Android or OpenHarmony / HarmonyOS (OHOS) | | |
| | cygwin | Cygwin or MSYS2 environment on Windows | | |
| | darwin | Either OSX or iOS | | |
| | dragonfly | DragonFly BSD | | |
| | emscripten | Emscripten's JavaScript environment | | |
| | freebsd | FreeBSD and its derivatives | | |
| | gnu | GNU Hurd | | |
| | haiku | | | |
| | ironclad | | | |
| | linux | | | |
| | netbsd | | | |
| | openbsd | | | |
| | windows | Native Windows (not Cygwin or MSYS2) | | |
| | sunos | illumos and Solaris | | |
| | os/2 | OS/2 | | |
| | fuchsia | Google's Fuchsia | | |
| | aix | IBM AIX or IBM i PASE | | |
| | qnx | QNX Neutrino RTOS | | |
| Any string not listed above is not guaranteed to remain stable in | |
| future releases. | |
| ## Kernel names (since 1.2.0) | |
| Native names as returned by the `.kernel()` method. | |
| | Value | Comment | | |
| | ----- | ------- | | |
| | linux | | | |
| | freebsd | | | |
| | openbsd | | | |
| | netbsd | | | |
| | gnu | GNU Hurd | | |
| | nt | | | |
| | xnu | Kernel of various Apple OSes | | |
| | illumos | Kernel derived from OpenSolaris by community efforts | | |
| | solaris | Kernel derived from OpenSolaris by Oracle | | |
| | ironclad | | | |
| | dragonfly | | | |
| | haiku| | | |
| | fuchsia | Google's Fuchsia | | |
| | aix | | | |
| | os400 | IBM i (formerly known as OS/400) | | |
| | neutrino | QNX Neutrino microkernel | | |
| | none | For e.g. bare metal embedded | | |
| ## Subsystem names (since 1.2.0) | |
| A more specific description of the system in question. Most values are | |
| meant to be used in cross files only, as those platforms can not run | |
| Meson natively. | |
| ### `darwin` subsystems | |
| Set when `system` is `darwin`. | |
| | Value | Comment | | |
| | ----- | ------- | | |
| | macos | Apple macOS (formerly OSX) | | |
| | ios | Apple iOS | | |
| | ios-simulator | | | |
| | tvos | Apple tvOS | | |
| | tvos-simulator | | | |
| | visionos | Apple visionOS | | |
| | visionos-simulator | | | |
| | watchos | Apple watchOS | | |
| | watchos-simulator | | | |
| ### `android` subsystems (since 1.12.0) | |
| Set when `system` is `android`. | |
| | Value | Comment | | |
| | ----- | ------- | | |
| | android | Android (Bionic libc) | | |
| | ohos | OpenHarmony / HarmonyOS (OHOS) | | |
| ## Language arguments parameter names | |
| These are the parameter names for passing language specific arguments | |
| to your build target. | |
| | Language | compiler name | linker name | | |
| | ------------- | -------------- | ----------------- | | |
| | C | c_args | c_link_args | | |
| | C++ | cpp_args | cpp_link_args | | |
| | C# | cs_args | cs_link_args | | |
| | CUDA | cuda_args | cuda_link_args | | |
| | D | d_args | d_link_args | | |
| | Fortran | fortran_args | fortran_link_args | | |
| | Java | java_args | java_link_args | | |
| | Objective C | objc_args | objc_link_args | | |
| | Objective C++ | objcpp_args | objcpp_link_args | | |
| | Rust | rust_args | rust_link_args | | |
| | Vala | vala_args | vala_link_args | | |
| | Cython | cython_args | cython_link_args | | |
| | NASM | nasm_args | N/A | | |
| | MASM | masm_args | N/A | | |
| | Linear ASM | linearasm_args | N/A | | |
| All these `<lang>_*` options are specified per machine. See in | |
| [specifying options per | |
| machine](Builtin-options.md#Specifying-options-per-machine) for on how | |
| to do this in cross builds. | |
| ## Compiler and linker flag environment variables | |
| These environment variables will be used to modify the compiler and | |
| linker flags. | |
| It is recommended that you **do not use these**. They are provided | |
| purely to for backwards compatibility with other build systems. There | |
| are many caveats to their use, especially when rebuilding the project. | |
| It is **highly** recommended that you use [the command line | |
| arguments](#language-arguments-parameter-names) instead. | |
| | Name | Comment | | |
| | ----- | ------- | | |
| | CFLAGS | Flags for the C compiler | | |
| | CXXFLAGS | Flags for the C++ compiler | | |
| | CUFLAGS | Flags for the CUDA compiler | | |
| | OBJCFLAGS | Flags for the Objective C compiler | | |
| | FFLAGS | Flags for the Fortran compiler | | |
| | DFLAGS | Flags for the D compiler | | |
| | VALAFLAGS | Flags for the Vala compiler | | |
| | RUSTFLAGS | Flags for the Rust compiler | | |
| | CYTHONFLAGS | Flags for the Cython compiler | | |
| | LDFLAGS | The linker flags, used for all languages | | |
| N.B. these settings are specified per machine, and so the environment | |
| variables actually come in pairs. See the [environment variables per | |
| machine](#Environment-variables-per-machine) section for details. | |
| ## Function Attributes | |
| These are the parameters names that are supported using | |
| `compiler.has_function_attribute()` or | |
| `compiler.get_supported_function_attributes()` | |
| ### GCC `__attribute__` | |
| These values are supported using the GCC style `__attribute__` annotations, | |
| which are supported by GCC, Clang, and other compilers. | |
| | Name | | |
| |-----------------------------| | |
| | alias | | |
| | aligned | | |
| | alloc_size | | |
| | always_inline | | |
| | artificial | | |
| | cold | | |
| | const | | |
| | constructor | | |
| | constructor_priority | | |
| | counted_by⁸ | | |
| | deprecated | | |
| | destructor | | |
| | error | | |
| | externally_visible | | |
| | fallthrough | | |
| | flatten | | |
| | format | | |
| | format_arg | | |
| | force_align_arg_pointer³ | | |
| | gnu_inline | | |
| | hot | | |
| | ifunc | | |
| | malloc | | |
| | noclone | | |
| | noinline | | |
| | nonnull | | |
| | noreturn | | |
| | nothrow | | |
| | null_terminated_string_arg⁷ | | |
| | optimize | | |
| | packed | | |
| | pure | | |
| | retain⁴ | | |
| | returns_nonnull | | |
| | section⁵ | | |
| | sentinel⁵ | | |
| | unused | | |
| | used | | |
| | vector_size⁶ | | |
| | visibility* | | |
| | visibility:default† | | |
| | visibility:hidden† | | |
| | visibility:internal† | | |
| | visibility:protected† | | |
| | warning | | |
| | warn_unused_result | | |
| | weak | | |
| | weakref | | |
| \* *Changed in 0.52.0* the "visibility" target no longer includes | |
| "protected", which is not present in Apple's clang. | |
| † *New in 0.52.0* These split visibility attributes are preferred to the plain | |
| "visibility" as they provide narrower checks. | |
| ³ *New in 0.55.0* | |
| ⁴ *New in 0.62.0* | |
| ⁵ *New in 0.63.0* | |
| ⁶ *New in 1.1.0* | |
| ⁷ *New in 1.5.0* | |
| ⁸ *New in 1.10.0* | |
| ### MSVC __declspec | |
| These values are supported using the MSVC style `__declspec` annotation, | |
| which are supported by MSVC, GCC, Clang, and other compilers. | |
| | Name | | |
| |----------------------| | |
| | dllexport | | |
| | dllimport | | |
| ## Dependency lookup methods | |
| These are the values that can be passed to `dependency` function's | |
| `method` keyword argument. | |
| | Name | Comment | | |
| | ----- | ------- | | |
| | auto | Automatic method selection | | |
| | pkg-config | Use Pkg-Config | | |
| | cmake | Look up as a CMake module | | |
| | config-tool | Use a custom dep tool such as `cups-config` | | |
| | system | System provided (e.g. OpenGL) | | |
| | extraframework | A macOS/iOS framework | | |
| ## Compiler and Linker selection variables | |
| N.B. these settings are specified per machine, and so the environment | |
| variables actually come in pairs. See the [environment variables per | |
| machine](#Environment-variables-per-machine) section for details. | |
| | Language | Compiler | Linker | Note | | |
| |---------------|----------|-----------|---------------------------------------------| | |
| | C | CC | CC_LD | | | |
| | C++ | CXX | CXX_LD | | | |
| | D | DC | DC_LD | Before 0.54 D_LD* | | |
| | Fortran | FC | FC_LD | Before 0.54 F_LD* | | |
| | Objective-C | OBJC | OBJC_LD | | | |
| | Objective-C++ | OBJCXX | OBJCXX_LD | Before 0.54 OBJCPP_LD* | | |
| | Rust | RUSTC | RUSTC_LD | Before 0.54 RUST_LD* | | |
| | Vala | VALAC | | Use CC_LD. Vala transpiles to C | | |
| | C# | CSC | CSC | The linker is the compiler | | |
| | Cython | CYTHON | | | | |
| | nasm | NASM | | Uses the C linker | | |
| | archiver | | AR | | | |
| *The old environment variables are still supported, but are deprecated | |
| and will be removed in a future version of Meson. | |
| *changed in 1.3.0* Paths with spaces were split unconditionally to extract | |
| components such as the [path to Ccache](Feature-autodetection.md#ccache), | |
| intrinsic compiler flags like `-m32` or `--target`, etc. This broke passing | |
| a hardcoded compiler path to CMake subprojects. To work around this, paths | |
| must be wrapped with double quotes: | |
| ```bash | |
| export CC='"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.34.31933/bin/Hostx64/x64/cl.exe"' | |
| ``` | |
| You can also set the values through [machine files](Machine-files.md#binaries). | |
| *New in 1.3.0* Paths that point to an existing executable no longer need | |
| wrapping: | |
| ```bash | |
| export CC='C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.34.31933/bin/Hostx64/x64/cl.exe' | |
| ``` | |
| ## Environment variables per machine | |
| Since *0.54.0*, Following Autotool and other legacy build systems, | |
| environment variables that affect machine-specific settings come in | |
| pairs: for every bare environment variable `FOO`, there is a suffixed | |
| `FOO_FOR_BUILD`, where `FOO` just affects the host machine | |
| configuration, while `FOO_FOR_BUILD` just affects the build machine | |
| configuration. For example: | |
| - `PKG_CONFIG_PATH_FOR_BUILD` controls the paths pkg-config will search for | |
| just `native: true` dependencies (build machine). | |
| - `PKG_CONFIG_PATH` controls the paths pkg-config will search for just | |
| `native: false` dependencies (host machine). | |
| This mirrors the `build.` prefix used for (built-in) Meson options, | |
| which has the same meaning. | |
| This is useful for cross builds. In the native builds, build = host, | |
| and the unsuffixed environment variables alone will suffice. | |
| Prior to *0.54.0*, there was no `_FOR_BUILD`-suffixed variables, and | |
| most environment variables only effected native machine | |
| configurations, though this wasn't consistent (e.g. `PKG_CONFIG_PATH` | |
| still affected cross builds). |