diff options
Diffstat (limited to 'docs/yaml/objects/compiler.yaml')
-rw-r--r-- | docs/yaml/objects/compiler.yaml | 542 |
1 files changed, 542 insertions, 0 deletions
diff --git a/docs/yaml/objects/compiler.yaml b/docs/yaml/objects/compiler.yaml new file mode 100644 index 0000000..d4f0715 --- /dev/null +++ b/docs/yaml/objects/compiler.yaml @@ -0,0 +1,542 @@ +name: compiler +long_name: Compiler object +description: | + This object is returned by [[meson.get_compiler]]. + It represents a compiler for a given language and allows you to query its properties. + +notes: +- | + These compiler checks do not use compiler arguments added + with `add_*_arguments()`, via `-Dlang_args` on the command-line, or + through `CFLAGS`/`LDFLAGS`, etc in the environment. Hence, you can + trust that the tests will be fully self-contained, and won't fail + because of custom flags added by other parts of the build file or by + users. + +- | + Note that if you have a single prefix with all your dependencies, you + might find it easier to append to the environment variables + `C_INCLUDE_PATH` with GCC/Clang and `INCLUDE` with MSVC to expand the + default include path, and `LIBRARY_PATH` with GCC/Clang and `LIB` with + MSVC to expand the default library search path. + + However, with GCC, these variables will be ignored when + cross-compiling. In that case you need to use a specs file. See: + http://www.mingw.org/wiki/SpecsFileHOWTO + +methods: + +# Helper methods to pre-define common posargs +- name: _code + returns: void + description: You have found a bug if you can see this! + posargs: + code: + type: str | file + description: | + The source code to check. + + If a string is passed, the code is used directly. If a [[@file]] object + is passed, it's content is used for the compiler check. + +# Helper methods to pre-define common kwargs +- name: _args + returns: void + description: You have found a bug if you can see this! + kwargs: + args: + type: list[str] + description: | + Used to pass a list of compiler arguments. + Defining include paths for headers not in the default include path + via `-Isome/path/to/header` is generally supported, however, usually not + recommended. + + This is because include directories can also be specified via the + `include_directories` or the `dependency` kwarg (if present). + The same is also true for passing libraries to link with `-lfoo`. + +- name: _include_directories + returns: void + description: You have found a bug if you can see this! + kwargs: + include_directories: + type: inc | list[inc] + since: 0.38.0 + description: Extra directories for header searches. + +- name: _dependencies + returns: void + description: You have found a bug if you can see this! + kwargs: + dependencies: + type: dep | list[dep] + description: Additionally dependencies required for compiling and / or linking. + +- name: _prefix + returns: void + description: You have found a bug if you can see this! + kwargs: + prefix: + type: str + description: | + Used to add `#include`s and other things that are required + for the symbol to be declared. System definitions should be + passed via compiler args (eg: `_GNU_SOURCE` is often required for + some symbols to be exposed on Linux, and it should be passed via + `args` keyword argument). + +- name: _no_builtin_args + returns: void + description: You have found a bug if you can see this! + kwargs: + no_builtin_args: + type: bool + default: false + description: When set to `true`, the compiler arguments controlled by built-in configuration options are not added. + +- name: _name + returns: void + description: You have found a bug if you can see this! + kwargs: + name: + type: str + description: | + The name to use for printing a message about the compiler check. + If this keyword argument is not passed, no message will be printed about the check. + +# Even more convinient +- name: _common + returns: void + description: You have found a bug if you can see this! + kwargs_inherit: + - compiler._args + - compiler._include_directories + - compiler._dependencies + - compiler._no_builtin_args + - compiler._prefix + +- name: _compiles + returns: void + description: You have found a bug if you can see this! + kwargs_inherit: + - compiler._args + - compiler._include_directories + - compiler._dependencies + - compiler._no_builtin_args + - compiler._name + +- name: _header + returns: void + description: You have found a bug if you can see this! + kwargs_inherit: compiler._common + kwargs: + required: + type: bool | feature + default: false + since: 0.50.0 + description: If set to `true`, Meson will halt if the header check fails. + + +# Star of the actual functions +- name: version + returns: str + description: Returns the compiler's version number as a string. + +- name: cmd_array + returns: list[str] + description: Returns an array containing the command(s) for the compiler. + + +- name: alignment + returns: int + description: Returns the alignment of the specified type. + + posargs: + typename: + type: str + description: The name of the type to check. + + kwargs_inherit: + - compiler._args + - compiler._prefix + - compiler._dependencies + # TODO: why not also allow passing `include_directories`? + +- name: run + returns: runresult + description: Attempts to compile and execute the given code fragment. + posargs_inherit: compiler._code + kwargs_inherit: compiler._compiles + +- name: get_id + returns: str + description: | + Returns a string identifying the compiler. + For example, `gcc`, `msvc`, [and more](Reference-tables.md#compiler-ids). + +- name: get_linker_id + returns: str + since: 0.53.0 + description: | + Returns a string identifying the linker. + For example, `ld.bfd`, `link`, [and more](Reference-tables.md#linker-ids). + +- name: symbols_have_underscore_prefix + returns: bool + since: 0.37.0 + description: Returns `true` if the C symbol mangling is one underscore (`_`) prefixed to the symbol. + +- name: has_member + returns: bool + description: Returns true if the type has the specified member. + kwargs_inherit: compiler._common + posargs: + typename: + type: str + description: The type to check. + membername: + type: str + description: The member to check. + +- name: has_members + returns: bool + description: Returns `true` if the type has *all* the specified members. + kwargs_inherit: compiler._common + posargs: + typename: + type: str + description: The type to check. + varargs: + name: member + type: str + min_varargs: 1 + description: The members to check + +- name: has_function + returns: bool + description: | + Returns true if the given function is provided + by the standard library or a library passed in with the `args` keyword. + + kwargs_inherit: compiler._common + posargs: + funcname: + type: str + description: The function to check. + +- name: has_type + returns: bool + description: Returns `true` if the specified token is a type. + kwargs_inherit: compiler._common + posargs: + typename: + type: str + description: The type to check. + +- name: compute_int + returns: int + since: 0.40.0 + kwargs_inherit: compiler._common + description: | + Computes the value of the given expression + (as an example `1 + 2`). When cross compiling this is evaluated with + an iterative algorithm, you can specify keyword arguments `low` + (defaults to -1024), `high` (defaults to 1024) and `guess` to + specify max and min values for the search and the value to try + first. + + posargs: + expr: + type: str + description: The expression to compute. + + kwargs: + low: + type: int + default: -1024 + description: The min value. + high: + type: int + default: 1024 + description: The max value. + guess: + type: int + description: The value to try first. + +- name: sizeof + returns: int + description: returns the size of the given type (e.g. `'int'`) or -1 if the type is unknown. + kwargs_inherit: compiler._common + posargs: + typename: + type: str + description: The type to compute. + +- name: get_define + returns: str + since: 0.40.0 + description: | + Returns the given preprocessor symbol's value + as a string or empty string if it is not defined. + + *(since 0.47.0)* This method will concatenate string literals as + the compiler would. E.g. `"a" "b"` will become `"ab"`. + + kwargs_inherit: compiler._common + posargs: + definename: + type: str + description: The define to check. + +- name: compiles + returns: bool + description: Returns true if the code compiles. + posargs_inherit: compiler._code + kwargs_inherit: compiler._compiles + +- name: links + returns: bool + description: Returns true if the code compiles and links. + posargs_inherit: compiler._code + kwargs_inherit: compiler._compiles + +- name: check_header + returns: bool + since: 0.47.0 + description: | + Returns true if the specified header is *usable* + with the specified prefix, dependencies, and arguments. + + kwargs_inherit: compiler._header + posargs: + header_name: + type: str + description: The header to check. + +- name: has_header + returns: bool + description: | + Returns true if the specified header is *exists* + with the specified prefix, dependencies, and arguments. + + This method is faster than [[compiler.check_header]] since it only does a + pre-processor check. + + kwargs_inherit: compiler._header + posargs_inherit: compiler.check_header + +- name: has_header_symbol + returns: bool + description: | + Detects whether a particular symbol is declared in the specified header. + + Symbols here include function, variable, `#define`, type definition, etc. + + kwargs_inherit: compiler._header + posargs: + heade: + type: str + description: The header to check. + symbol: + type: str + description: The symbol to check. + +- name: find_library + returns: dep + description: Tries to find the library specified in the positional argument. + + kwargs_inherit: compiler._common + kwargs: + required: + type: bool | feature + default: true + description: | + If set `true`, Meson will abort with an error if the library could not + be found. Otherwise, Meson will continue and the found method of the + returned object will return `false`. + + *(since 0.47.0)* The value of a [`feature`](Build-options.md#features) + option can also be passed here. + + has_headers: + type: list[str] + since: 0.50.0 + description: | + List of headers that must be found as well. + This is check is equivalent to checking each herader with an + [[compiler.has_header]] call. + + static: + type: bool + default: false + since: 0.51.0 + description: | + If `true`, the search is limited to static libraries only. + Setting this value to `false` (the default) will search for both shared + *and* static libraries. + + disabler: + type: bool + default: false + since: 0.49.0 + description: If `true`, this method will return a [[@disabler]] on a failed check. + + dirs: + type: list[str] + description: | + Additional directories to search in. + + By default the library is searched for in the system library directory + (e.g. /usr/lib). Specifying more directories here, causes Meson to search + in those directories as well as the system directories. + + +# Compiler arguments +- name: has_argument + returns: bool + description: | + Returns `true` if the compiler accepts the specified command line argument, + that is, can compile code without erroring out or printing a warning about + an unknown flag. + + posargs: + argument: + type: str + description: The argument to check. + +- name: has_multi_arguments + since: 0.37.0 + returns: bool + description: | + the same as [[compiler.has_argument]] but takes multiple arguments + and uses them all in a single compiler invocation. + + varargs: + name: arg + type: str + description: The arguments to check. + +- name: get_supported_arguments + returns: list[str] + since: 0.43.0 + varargs_inherit: compiler.has_multi_arguments + description: | + Returns an array containing only the arguments supported by the compiler, + as if [[compiler.has_argument]] were called on them individually. + + kwargs: + checked: + type: str + since: 0.59.0 + default: "'off'" + description: | + Supported values: + - `'off'`: Quietely ignore unsupported arguments + - `'warn'`: Print a warning for unsupported arguments + - `'require'`: Abort if at least one argument is not supported + +- name: first_supported_argument + returns: list[str] + since: 0.43.0 + varargs_inherit: compiler.has_multi_arguments + description: | + Given a list of strings, returns the first argument that passes the + [[compiler.has_argument]] test or an empty array if none pass. + + +# Linker arguments +- name: has_link_argument + since: 0.46.0 + returns: bool + description: | + Returns `true` if the linker accepts the specified command line argument, + that is, can + compile and link code without erroring out or printing a warning + about an unknown flag. Link arguments will be passed to the + compiler, so should usually have the `-Wl,` prefix. On VisualStudio + a `/link` argument will be prepended. + + posargs: + argument: + type: str + description: The argument to check. + +- name: has_multi_link_arguments + since: 0.46.0 + returns: bool + description: | + the same as [[compiler.has_link_argument]] but takes multiple arguments + and uses them all in a single compiler invocation. + + varargs: + name: arg + type: str + description: The link arguments to check. + +- name: get_supported_link_arguments + returns: list[str] + since: 0.46.0 + varargs_inherit: compiler.has_multi_link_arguments + description: | + Returns an array containing only the arguments supported by the compiler, + as if [[compiler.has_link_argument]] were called on them individually. + + # TODO: why is this not present here? + # kwargs: + # checked: + # type: str + # sinec: 0.59.0 + # default: "'off'" + # description: | + # Supported values: + # - `'off'`: Quietely ignore unsupported arguments + # - `'warn'`: Print a warning for unsupported arguments + # - `'require'`: Abort if at least one argument is not supported + +- name: first_supported_link_argument + returns: list[str] + since: 0.46.0 + varargs_inherit: compiler.has_multi_link_arguments + description: | + Given a list of strings, returns the first argument that passes the + [[compiler.has_link_argument]] test or an empty array if none pass. + + + + + +- name: has_function_attribute + returns: bool + since: 0.48.0 + description: | + Returns `true` if the compiler supports the GNU style (`__attribute__(...)`) `name`. + This is preferable to manual compile checks as it may be optimized for compilers that + do not support such attributes. + [This table](Reference-tables.md#gcc-__attribute__) lists all of the supported attributes. + + posargs: + name: + type: str + description: The attribute nane to check. + +- name: get_supported_function_attributes + returns: list[str] + since: 0.48.0 + description: | + Returns an array containing any names that are supported GCC style attributes. + Equivalent to [[compiler.has_function_attribute]] was called on each of + them individually. + + # TODO: Again why doesn't this function have the checked kwarg? + +- name: get_argument_syntax + returns: str + since: 0.49.0 + description: | + returns a string identifying the type of arguments the compiler takes. + Can be one of `gcc`, `msvc`, or an undefined + string value. This method is useful for identifying compilers that are not + gcc or msvc, but use the same argument syntax as one of those two compilers + such as clang or icc, especially when they use different syntax on different + operating systems. |