diff --git a/docs/manual/customize-packages.txt b/docs/manual/customize-packages.txt new file mode 100644 index 0000000000..e3ecb4c799 --- /dev/null +++ b/docs/manual/customize-packages.txt @@ -0,0 +1,71 @@ +// -*- 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. diff --git a/docs/manual/customize.txt b/docs/manual/customize.txt index b389d7f7c6..98db69de18 100644 --- a/docs/manual/customize.txt +++ b/docs/manual/customize.txt @@ -55,4 +55,6 @@ include::customize-post-image.txt[] include::customize-patches.txt[] +include::customize-packages.txt[] + include::customize-store.txt[]