2011-10-10 10:46:39 +02:00
|
|
|
Package directory
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
First of all, create a directory under the +package+ directory for
|
|
|
|
your software, for example +libfoo+.
|
|
|
|
|
|
|
|
Some packages have been grouped by topic in a sub-directory:
|
|
|
|
+multimedia+, +java+, +x11r7+, and +games+. If your package fits in
|
|
|
|
one of these categories, then create your package directory in these.
|
|
|
|
|
|
|
|
+Config.in+ file
|
|
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
Then, create a file named +Config.in+. This file will contain the
|
|
|
|
option descriptions related to our +libfoo+ software that will be used
|
|
|
|
and displayed in the configuration tool. It should basically contain :
|
|
|
|
|
|
|
|
---------------------------
|
|
|
|
config BR2_PACKAGE_LIBFOO
|
|
|
|
bool "libfoo"
|
|
|
|
help
|
|
|
|
This is a comment that explains what libfoo is.
|
|
|
|
|
|
|
|
http://foosoftware.org/libfoo/
|
|
|
|
---------------------------
|
|
|
|
|
2011-11-13 09:54:44 +01:00
|
|
|
The +bool+ line, +help+ line and other meta-informations about the
|
|
|
|
configuration option must be indented with one tab. The help text
|
|
|
|
itself should be indented with one tab and two spaces, and it must
|
|
|
|
mention the upstream URL of the project.
|
|
|
|
|
2011-11-13 09:54:43 +01:00
|
|
|
Of course, you can add other sub-options into a +if
|
|
|
|
BR2_PACKAGE_LIBFOO...endif+ statement to configure particular things
|
|
|
|
in your software. You can look at examples in other packages. The
|
|
|
|
syntax of the +Config.in+ file is the same as the one for the kernel
|
|
|
|
Kconfig file. The documentation for this syntax is available at
|
2011-10-10 10:46:39 +02:00
|
|
|
http://lxr.free-electrons.com/source/Documentation/kbuild/kconfig-language.txt[]
|
|
|
|
|
|
|
|
Finally you have to add your new +libfoo/Config.in+ to
|
|
|
|
+package/Config.in+ (or in a category subdirectory if you decided to
|
|
|
|
put your package in one of the existing categories). The files
|
|
|
|
included there are 'sorted alphabetically' per category and are 'NOT'
|
|
|
|
supposed to contain anything but the 'bare' name of the package.
|
|
|
|
|
|
|
|
--------------------------
|
|
|
|
source "package/libfoo/Config.in"
|
|
|
|
--------------------------
|
|
|
|
|
2011-11-13 09:54:45 +01:00
|
|
|
The +Config.in+ file of your package must also ensure that
|
|
|
|
dependencies are enabled. Typically, Buildroot uses the following
|
|
|
|
rules:
|
|
|
|
|
|
|
|
* Use a +select+ type of dependency for dependencies on
|
|
|
|
libraries. These dependencies are generally not obvious and it
|
|
|
|
therefore make sense to have the kconfig system ensure that the
|
|
|
|
dependencies are selected. For example, the _libgtk2_ package uses
|
|
|
|
+select BR2_PACKAGE_LIBGLIB2+ to make sure this library is also
|
|
|
|
enabled.
|
|
|
|
|
|
|
|
* Use a +depends on+ type of dependency when the user really needs to
|
|
|
|
be aware of the dependency. Typically, Buildroot uses this type of
|
|
|
|
dependency for dependencies on toolchain options (large file
|
|
|
|
support, RPC support, IPV6 support), or for dependencies on "big"
|
|
|
|
things, such as the X.org system. In some cases, especially
|
|
|
|
dependency on toolchain options, it is recommended to add a
|
|
|
|
+comment+ displayed when the option is not enabled, so that the user
|
|
|
|
knows why the package is not available.
|
|
|
|
|
|
|
|
An example illustrates both the usage of +select+ and +depends on+.
|
|
|
|
|
|
|
|
--------------------------
|
|
|
|
config BR2_PACKAGE_ACL
|
|
|
|
bool "acl"
|
|
|
|
select BR2_PACKAGE_ATTR
|
|
|
|
depends on BR2_LARGEFILE
|
|
|
|
help
|
|
|
|
POSIX Access Control Lists, which are used to define more
|
|
|
|
fine-grained discretionary access rights for files and
|
|
|
|
directories.
|
|
|
|
This package also provides libacl.
|
|
|
|
|
|
|
|
http://savannah.nongnu.org/projects/acl
|
|
|
|
|
|
|
|
comment "acl requires a toolchain with LARGEFILE support"
|
|
|
|
depends on !BR2_LARGEFILE
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
|
|
|
|
Note that such dependencies will make sure that the dependency option
|
|
|
|
is also enabled, but not necessarily built before your package. To do
|
|
|
|
so, the dependency also needs to be expressed in the +.mk+ file of the
|
|
|
|
package.
|
|
|
|
|
2011-10-10 10:46:39 +02:00
|
|
|
The +.mk+ file
|
|
|
|
~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
Finally, here's the hardest part. Create a file named +libfoo.mk+. It
|
|
|
|
describes how the package should be downloaded, configured, built,
|
|
|
|
installed, etc.
|
|
|
|
|
|
|
|
Depending on the package type, the +.mk+ file must be written in a
|
|
|
|
different way, using different infrastructures:
|
|
|
|
|
2011-11-13 09:54:46 +01:00
|
|
|
* *Makefiles for generic packages* (not using autotools or CMake):
|
|
|
|
These are based on an infrastructure similar to the one used for
|
2011-10-10 10:46:39 +02:00
|
|
|
autotools-based packages, but requires a little more work from the
|
|
|
|
developer. They specify what should be done for the configuration,
|
|
|
|
compilation, installation and cleanup of the package. This
|
|
|
|
infrastructure must be used for all packages that do not use the
|
|
|
|
autotools as their build system. In the future, other specialized
|
|
|
|
infrastructures might be written for other build systems. We cover
|
|
|
|
them through in a xref:gentargets-tutorial[tutorial] and a
|
|
|
|
xref:gentargets-reference[reference].
|
|
|
|
|
|
|
|
* *Makefiles for autotools-based software* (autoconf, automake, etc.):
|
|
|
|
We provide a dedicated infrastructure for such packages, since
|
|
|
|
autotools is a very common build system. This infrastructure 'must'
|
|
|
|
be used for new packages that rely on the autotools as their build
|
|
|
|
system. We cover them through a xref:autotargets-tutorial[tutorial]
|
|
|
|
and xref:autotargets-reference[reference].
|
|
|
|
|
2011-11-13 09:54:46 +01:00
|
|
|
* *Makefiles for cmake-based software*: We provide a dedicated
|
|
|
|
infrastructure for such packages, as CMake is a more and more
|
|
|
|
commonly used build system and has a standardized behaviour. This
|
|
|
|
infrastructure 'must' be used for new packages that rely on
|
|
|
|
CMake. We cover them through a xref:cmaketargets-tutorial[tutorial]
|
|
|
|
and xref:cmaketargets-reference[reference].
|
|
|
|
|
2011-10-10 10:46:39 +02:00
|
|
|
* *Hand-written Makefiles:* These are currently obsolete, and no new
|
|
|
|
manual Makefiles should be added. However, since there are still
|
|
|
|
many of them in the tree, we keep them documented in a
|
|
|
|
xref:handwritten-tutorial[tutorial].
|
|
|
|
|