// -*- mode:doc; -*- // vim: set syntax=asciidoc: [[customize-packages]] === Adding project-specific packages In general, any new package should be added directly in the +package+ directory and submitted to the Buildroot upstream project. How to add packages to Buildroot in general is explained in full detail in xref:adding-packages[] and will not be repeated here. However, your project may need some proprietary packages that cannot be upstreamed. This section will explain how you can keep such project-specific packages in a project-specific directory. As shown in xref:customize-dir-structure[], the recommended location for project-specific packages is +package//+. If you are using the +BR2_EXTERNAL+ feature (see xref:outside-br-custom[]) the recommended location is +$(BR2_EXTERNAL)/package/+. However, Buildroot will not be aware of the packages in this location, unless we perform some additional steps. As explained in xref:adding-packages[], a package in Buildroot basically consists of two files: a +.mk+ file (describing how to build the package) and a +Config.in+ file (describing the configuration options for this package). Buildroot will automatically include the +.mk+ files in first-level subdirectories of the +package+ directory (using the pattern +package/\*/*.mk+). If we want Buildroot to include +.mk+ files from deeper subdirectories (like +package//package1/+) then we simply have to add a +.mk+ file in a first-level subdirectory that includes these additional +.mk+ files. Therefore, create a file +package//.mk+ with following contents (assuming you have only one extra directory level below +package//+): ----- include $(sort $(wildcard package//*/*.mk)) ----- If you are using +BR2_EXTERNAL+, create a file +$(BR2_EXTERNAL)/external.mk+ with following contents (again assuming only one extra level): ----- include $(sort $(wildcard $(BR2_EXTERNAL)/package/*/*.mk)) ----- For the +Config.in+ files, create a file +package//Config.in+ that includes the +Config.in+ files of all your packages. An exhaustive list has to be provided since wildcards are not supported in the source command of kconfig. For example: ----- source "package//package1/Config.in" source "package//package2/Config.in" ----- Include this new file +package//Config.in+ from +package/Config.in+, preferably in a company-specific menu to make merges with future Buildroot versions easier. If you are using +BR2_EXTERNAL+, create a file +$(BR2_EXTERNAL)/Config.in+ with similar contents: ----- source "$BR2_EXTERNAL/package/package1/Config.in" source "$BR2_EXTERNAL/package/package2/Config.in" ----- You do not have to add an include for this +$(BR2_EXTERNAL)/Config.in+ file as it is included automatically.