| // -*- mode:doc -*- ; |
| |
| [[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. 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 +<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 +<packagename>-*.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: |
| +<packagename>-<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 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 |