// -*- mode:doc -*- ; [[packages-custom]] === Customizing packages It is sometimes useful to apply 'extra' patches to packages - over and above 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. By specifying multiple global patch directories, a user could implement a layered approach to patches. This could be useful when a user has multiple boards that share a common processor architecture. It is often the case that a subset of patches for a package need to be shared between the different boards a user has. However, each board may require specific patches for the package that build on top of the common subset of patches. For a specific version ++ of a specific package ++, patches are applied from +BR2_GLOBAL_PATCH_DIR+ as follows: . For every directory - ++ - that exists in +BR2_GLOBAL_PATCH_DIR+, a ++ will be determined as follows: + * +///+ if the directory exists. + * Otherwise, +/+ if the directory exists. . Patches will then be applied from a ++ 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: +--.patch+, where ++ 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 an 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. An example directory structure for where a user has multiple directories specified for +BR2_GLOBAL_PATCH_DIR+ may look like this: ----- board/ +-- common-fooarch | +-- patches | +-- linux | | +-- linux-patch1.patch | | +-- linux-patch2.patch | +-- uboot | +-- foopkg +-- fooarch-board +-- patches +-- linux | +-- linux-patch3.patch +-- uboot +-- foopkg ----- If the user has the +BR2_GLOBAL_PATCH_DIR+ configuration option set as follows: ----- BR2_GLOBAL_PATCH_DIR="board/common-fooarch/patches board/fooarch-board/patches" ----- Then the patches would applied as follows for the Linux kernel: . board/common-fooarch/patches/linux/linux-patch1.patch . board/common-fooarch/patches/linux/linux-patch2.patch . board/fooarch-board/patches/linux/linux-patch3.patch