name: _build_target_base
returns: void
description: PRIVATE

posargs:
  target_name:
    description: The *unique* name of the build target
    type: str

varargs:
  name: source
  type: str | file | custom_tgt | custom_idx | generated_list
  description: |
    Input source to compile. The following types are supported:

    - Strings relative to the current source directory
    - [[@file]] objects defined in any preceding build file
    - The return value of configure-time generators such as [[configure_file]]
    - The return value of build-time generators such as
      [[custom_target]] or [[generator.process]]

    These input files can be sources, objects, libraries, or any other
    file. Meson will automatically categorize them based on the extension
    and use them accordingly. For instance, sources (`.c`, `.cpp`,
    `.vala`, `.rs`, etc) will be compiled and objects (`.o`, `.obj`) and
    libraries (`.so`, `.dll`, etc) will be linked.

    With the Ninja backend, Meson will create a build-time [order-only
    dependency](https://ninja-build.org/manual.html#ref_dependencies) on
    all generated input files, including unknown files. This is needed to
    bootstrap the generation of the real dependencies in the
    [depfile](https://ninja-build.org/manual.html#ref_headers) generated
    by your compiler to determine when to rebuild sources. Ninja relies on
    this dependency file for all input files, generated and non-generated.
    The behavior is similar for other backends.

warnings:
  - The `link_language` kwarg was broken until 0.55.0

kwargs:
  <lang>_pch:
    type: str
    description: precompiled header file to use for the given language

  <lang>_args:
    type: list[str]
    description: |
      compiler flags to use for the given language;
      eg: `cpp_args` for C++

  vala_args:
    type: list[str | file]
    description: |
      Compiler flags for Vala. Unlike other languages this may contain Files

  sources:
    type: str | file | custom_tgt | custom_idx | generated_list | structured_src
    description: Additional source files. Same as the source varargs.

  build_by_default:
    type: bool
    default: true
    since: 0.38.0
    description: |
      Causes, when set to `true`, to have this target be built by default.
      This means it will be built when `meson compile` is called without any
      arguments. The default value is `true` for all built target types.

  build_rpath:
    type: str
    since: 0.42.0
    description: |
      A string to add to target's rpath definition in the build dir,
      but which will be removed on install

  dependencies:
    type: list[dep]
    description: |
      one or more dependency objects
      created with
      [[dependency]] or [[compiler.find_library]]
      (for external deps) or [[declare_dependency]]
      (for deps built by the project)

  extra_files:
    type: str | file | custom_tgt | custom_idx
    description: |
      Not used for the build itself but are shown as source files in IDEs
      that group files by targets (such as Visual Studio)

  gui_app:
    type: bool
    deprecated: 0.56.0
    default: false
    description: |
      When set to true flags this target as a GUI application
      on platforms where this makes a difference, **deprecated** since
      0.56.0, use `win_subsystem` instead.

  link_args:
    type: list[str]
    description: |
      Flags to use during linking. You can use UNIX-style
      flags here for all platforms.

  link_depends:
    type: str | file | custom_tgt | custom_idx
    description: |
      Strings, files, or custom targets the link step depends on
      such as a symbol visibility map. The purpose is to
      automatically trigger a re-link (but not a re-compile) of the target
      when this file changes.

  link_language:
    type: str
    since: 0.51.0
    description: |
      Makes the linker for this target be for the specified language.
      It is generally unnecessary to set
      this, as Meson will detect the right linker to use in most cases. There are
      only two cases where this is needed. One, your main function in an
      executable is not in the language Meson picked, or second you want to force
      a library to use only one ABI.

      *(broken until 0.55.0)*

  link_whole:
    type: list[lib | custom_tgt | custom_idx]
    since: 0.40.0
    description: |
      Links all contents of the given static libraries whether they are used or
      not, equivalent to the `-Wl,--whole-archive` argument flag of GCC, or the
      '/WHOLEARCHIVE' MSVC linker option. This allows the linked target to
      re-export symbols from all objects in the static libraries.

      *(since 0.41.0)* If passed a list that list will be flattened.

      *(since 0.51.0)* This argument also accepts outputs produced by
      custom targets. The user must ensure that the output is a library in
      the correct format.

  link_with:
    type: list[lib | custom_tgt | custom_idx]
    description: |
      One or more shared or static libraries
      (built by this project) that this target should be linked with. *(since 0.41.0)* If passed a
      list this list will be flattened. *(since 0.51.0)* The arguments can also be custom targets.
      In this case Meson will assume that merely adding the output file in the linker command
      line is sufficient to make linking work. If this is not sufficient,
      then the build system writer must write all other steps manually.

  implicit_include_directories:
    type: bool
    since: 0.42.0
    default: true
    description: Controls whether Meson adds the current source and build directories to the include path

  include_directories:
    type: list[inc | str]
    description: |
      one or more objects created with the [[include_directories]] function,
      or *(since 0.50.0)* strings, which will be transparently expanded to include directory objects

  install:
    type: bool
    default: false
    description: When set to true, this executable should be installed.

  install_dir:
    type: str
    description: |
      override install directory for this file. If the value is a relative path,
      it will be considered relative the `prefix` option.
      For example, if you want to install plugins into a subdir, you'd use
      something like this: `install_dir : get_option('libdir') / 'projectname-1.0'`.

  install_mode:
    type: list[str | int]
    since: 0.47.0
    description: |
      Specify the file mode in symbolic format
      and optionally the owner/uid and group/gid for the installed files.

      See the `install_mode` kwarg of [[install_data]] for more information.

  install_tag:
    type: str
    since: 0.60.0
    description: |
      A string used by the `meson install --tags` command
      to install only a subset of the files. By default all build targets have the
      tag `runtime` except for static libraries that have the `devel` tag.

  install_rpath:
    type: str
    description: |
      A string to set the target's rpath to after install
      (but *not* before that). On Windows, this argument has no effect.

  objects:
    type: list[extracted_obj | file | str]
    description: |
      List of object files that should be linked in this target.

      **Since 1.1.0** this can include generated files in addition to
      object files that you don't have source to or that object files
      produced by other build targets.  In earlier release, generated
      object files had to be placed in `sources`.

  name_prefix:
    type: str | list[void]
    description: |
      The string that will be used as the prefix for the
      target output filename by overriding the default (only used for
      libraries). By default this is `lib` on all platforms and compilers,
      except for MSVC shared libraries where it is omitted to follow
      convention, and Cygwin shared libraries where it is `cyg`.

      Set this to `[]`, or omit the keyword argument for the default behaviour.

  name_suffix:
    type: str | list[void]
    description: |
      The string that will be used as the extension for the
      target by overriding the default. By default on Windows this is
      `exe` for executables and on other platforms it is omitted.

      For shared libraries, the default value
      is `dylib` on macOS, `dll` on Windows, and `so` everywhere else.
      For static libraries, it is `a` everywhere. By convention MSVC
      static libraries use the `lib` suffix, but we use `a` to avoid a
      potential name clash with shared libraries which also generate
      import libraries with a `lib` suffix.

      Set this to `[]`, or omit the keyword argument for the default behaviour.

  override_options:
    type: list[str] | dict[str | bool | int | list[str]]
    since: 0.40.0
    description: |
      takes an array of strings in the same format as `project`'s `default_options`
      overriding the values of these options
      for this target only.
      *(since 1.2.0)*: A dictionary may now be passed.

  gnu_symbol_visibility:
    type: str
    since: 0.48.0
    description: |
      Specifies how symbols should be exported, see
      e.g [the GCC Wiki](https://gcc.gnu.org/wiki/Visibility) for more
      information. This value can either be an empty string or one of
      `default`, `internal`, `hidden`, `protected` or `inlineshidden`, which
      is the same as `hidden` but also includes things like C++ implicit
      constructors as specified in the GCC manual. Ignored on compilers that
      do not support GNU visibility arguments.

  d_import_dirs:
    type: list[str]
    description: List of directories to look in for string imports used in the D programming language.

  d_unittest:
    type: bool
    default: false
    description: When set to true, the D modules are compiled in debug mode.

  d_module_versions:
    type: list[str | int]
    description: List of module version identifiers set when compiling D sources.

  d_debug:
    type: list[str]
    description: |
      The [D version identifiers](https://dlang.org/spec/version.html#version) to add
      during the compilation of D source files.

  native:
    type: bool
    default: false
    description: Controls whether the target is compiled for the build or host machines.

  win_subsystem:
    type: str
    default: "'console'"
    since: 0.56.0
    description: |
      Specifies the subsystem type to use
      on the Windows platform. Typical values include `console` for text
      mode programs and `windows` for gui apps. The value can also contain
      version specification such as `windows,6.0`. See [MSDN
      documentation](https://docs.microsoft.com/en-us/cpp/build/reference/subsystem-specify-subsystem)
      for the full list.

  rust_crate_type:
    type: str
    since: 0.42.0
    deprecated: 1.3.0
    description: |
      Set the specific type of rust crate to compile (when compiling rust).

      If the target is an [[executable]] this defaults to "bin", the only
      allowed value.

      If it is a [[static_library]] it defaults to "lib", and may be "lib",
      "staticlib", or "rlib". If "lib" then Rustc will pick a default, "staticlib"
      means a C ABI library, "rlib" means a Rust ABI.

      If it is a [[shared_library]] it defaults to "lib", and may be "lib",
      "dylib", "cdylib", or "proc-macro". If "lib" then Rustc will pick a
      default, "cdylib" means a C ABI library, "dylib" means a Rust ABI, and
      "proc-macro" is a special rust procedural macro crate.

      "proc-macro" is new in 0.62.0.

      *Since 1.3.0* this is deprecated and replaced by "rust_abi" keyword argument.
      `proc_macro` crates are now handled by the [`rust.proc_macro()`](Rust-module.md#proc_macro)
      method.

  rust_dependency_map:
    type: dict[str]
    since: 1.2.0
    description: |
      On rust targets this provides a map of library names to the crate name
      with which it would be available inside the rust code.

      This allows renaming similar to the dependency renaming feature of cargo
      or `extern crate foo as bar` inside rust code.
