// -*- mode:doc -*- ;
// vim: set syntax=asciidoc:

[[customize-patches]]
=== Adding project-specific patches

It is sometimes useful to apply 'extra' patches to packages - on top of
those provided in Buildroot. This might be used to support custom
features in a project, for example, or when working on a new
architecture.

The +BR2_GLOBAL_PATCH_DIR+ configuration option can be used to specify
a space separated list of one or more directories containing package
patches.

For a specific version +<packageversion>+ of a specific package
+<packagename>+, patches are applied from +BR2_GLOBAL_PATCH_DIR+ as
follows:

. For every directory - +<global-patch-dir>+ - that exists in
  +BR2_GLOBAL_PATCH_DIR+, a +<package-patch-dir>+ will be determined as
  follows:
+
* +<global-patch-dir>/<packagename>/<packageversion>/+ if the
  directory exists.
+
* Otherwise, +<global-patch-dir>/<packagename>+ if the directory
  exists.

. Patches will then be applied from a +<package-patch-dir>+ as
  follows:
+
* If a +series+ file exists in the package directory, then patches are
  applied according to the +series+ file;
+
* Otherwise, patch files matching +*.patch+ are applied in
  alphabetical order.  So, to ensure they are applied in the right
  order, it is highly recommended to name the patch files like this:
  +<number>-<description>.patch+, where +<number>+ refers to the
  'apply order'.

For information about how patches are applied for a package, see
xref:patch-apply-order[]

The +BR2_GLOBAL_PATCH_DIR+ option is the preferred method for
specifying a custom patch directory for packages. It can be used to
specify a patch directory for any package in buildroot. It should also
be used in place of the custom patch directory options that are
available for packages such as U-Boot and Barebox. By doing this, it
will allow a user to manage their patches from one top-level
directory.

The exception to +BR2_GLOBAL_PATCH_DIR+ being the preferred method for
specifying custom patches is +BR2_LINUX_KERNEL_PATCH+.
+BR2_LINUX_KERNEL_PATCH+ should be used to specify kernel patches that
are available at a URL. *Note:* +BR2_LINUX_KERNEL_PATCH+ specifies kernel
patches that are applied after patches available in +BR2_GLOBAL_PATCH_DIR+,
as it is done from a post-patch hook of the Linux package.

