From 2b504fe1f6f67bd2d12107c4c00248cb63a35e27 Mon Sep 17 00:00:00 2001
From: Martin Banky
source "package/libfoo/Config.in"-
.mk fileFinally, here's the hardest part. Create a file named
- foo.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:
01: ############################################################# -02: # -03: # libfoo -04: # -05: ############################################################# -06: LIBFOO_VERSION:=1.0 -07: LIBFOO_SOURCE:=libfoo-$(LIBFOO_VERSION).tar.gz -08: LIBFOO_SITE:=http://www.foosoftware.org/download -09: LIBFOO_INSTALL_STAGING=YES -10: LIBFOO_DEPENDENCIES = host-libaaa libbbb +The
+ +.mkfileFinally, here's the hardest part. Create a file named +
+ +foo.mk. It describes how the package should be + downloaded, configured, built, installed, etc.Depending on the package type, the
+ +.mkfile must be + written in a different way, using different infrastructures:
+01: ############################################################# +02: # +03: # libfoo +04: # +05: ############################################################# +06: LIBFOO_VERSION = 1.0 +07: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz +08: LIBFOO_SITE = http://www.foosoftware.org/download +09: LIBFOO_INSTALL_STAGING = YES +10: LIBFOO_DEPENDENCIES = host-libaaa libbbb 11: 12: define LIBFOO_BUILD_CMDS -13: $(MAKE) CC=$(TARGET_CC) LD=$(TARGET_LD) -C $(@D) all +13: $(MAKE) CC=$(TARGET_CC) LD=$(TARGET_LD) -C $(@D) all 14: endef 15: 16: define LIBFOO_INSTALL_STAGING_CMDS -17: $(INSTALL) -D $(@D)/libfoo.a $(STAGING_DIR)/usr/lib/libfoo.a -18: $(INSTALL) -D $(@D)/foo.h $(STAGING_DIR)/usr/include/foo.h -19: cp -dpf $(@D)/libfoo.so* $(STAGING_DIR)/usr/lib +17: $(INSTALL) -D -m 0755 $(@D)/libfoo.a $(STAGING_DIR)/usr/lib/libfoo.a +18: $(INSTALL) -D -m 0644 $(@D)/foo.h $(STAGING_DIR)/usr/include/foo.h +19: $(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(STAGING_DIR)/usr/lib 20: endef 21: 22: define LIBFOO_INSTALL_TARGET_CMDS -23: cp -dpf $(@D)/libfoo.so* $(TARGET_DIR)/usr/lib -24: -$(STRIPCMP) $(STRIP_STRIP_UNNEEDED) $(TARGET_DIR)/isr/lib/libfoo.so* +23: $(INSTALL) -D -m 0755 $(@D)/libfoo.so* $(TARGET_DIR)/usr/lib +24: $(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/foo.d 25: endef 26: -27: $(eval $(call GENTARGETS,package,libfoo))- -
The Makefile begins on line 6 to 8 by metadata informations: the
- version of the package (LIBFOO_VERSION), the name of
- the tarball containing the package (LIBFOO_SOURCE) and
- the Internet location at which the tarball can be downloaded
- (LIBFOO_SITE). All variables must start with the same
- prefix, LIBFOO_ in this case. This prefix is always
- the uppercased version of the package name (see below to understand
- where the package name is defined).
On line 9, we specify that this package wants to install
- something to the staging space. This is often needed for libraries
- since they must install header files and other development files in
- the staging space. This will ensure that the commands listed in the
- LIBFOO_INSTALL_STAGING_CMDS variable will be
- executed.
On line 10, we specify the list of dependencies this package
- relies on. These dependencies are listed in terms of lower-case
- package names, which can be packages for the target (without the
- host- prefix) or packages for the host (with the
- host-) prefix). Buildroot will ensure that all these
- packages are built and installed before the current package
- starts its configuration.
The rest of the Makefile defines what should be done at the
- different steps of the package configuration, compilation and
- installation. LIBFOO_BUILD_CMDS tells what steps
- should be performed to build the
- package. LIBFOO_INSTALL_STAGING_CMDS tells what steps
- should be performed to install the package in the staging
- space. LIBFOO_INSTALL_TARGET_CMDS tells what steps
- should be performed to install the package in the target space.
All these steps rely on the $(@D) variable, which
- contains the directory where the source code of the package has
- been extracted.
Finally, on line 27, we call the GENTARGETS which
- generates, according to the variables defined previously, all the
- Makefile code necessary to make your package working.
The GENTARGETS macro takes three arguments:
package/libfoo, then the directory
- prefix is package. If your package is in
- package/editors/foo, then the directory prefix must
- be package/editors..mk file
- and must match the configuration option name in the
- Config.in file. For example, if the package name is
- libfoo, so the variables in the .mk
- must start with LIBFOO_ and the configuration option
- in the Config.in file must be
- BR2_PACKAGE_LIBFOO.For a given package, in a single .mk file, it is
- possible to call GENTARGETS twice, once to create the rules to
- generate a target package and once to create the rules to generate
- a host package:
The Makefile begins on line 6 to 8 by metadata informations: the
+ version of the package (LIBFOO_VERSION), the name of the
+ tarball containing the package (LIBFOO_SOURCE) and the
+ Internet location at which the tarball can be downloaded
+ (LIBFOO_SITE). All variables must start with the same prefix,
+ LIBFOO_ in this case. This prefix is always the uppercased
+ version of the package name (see below to understand where the package
+ name is defined).
On line 9, we specify that this package wants to install something to
+ the staging space. This is often needed for libraries since they must
+ install header files and other development files in the staging space.
+ This will ensure that the commands listed in the
+ LIBFOO_INSTALL_STAGING_CMDS variable will be executed.
On line 10, we specify the list of dependencies this package relies
+ on. These dependencies are listed in terms of lower-case package names,
+ which can be packages for the target (without the host-
+ prefix) or packages for the host (with the host-) prefix).
+ Buildroot will ensure that all these packages are built and installed
+ before the current package starts its configuration.
The rest of the Makefile defines what should be done at the different
+ steps of the package configuration, compilation and installation.
+ LIBFOO_BUILD_CMDS tells what steps should be performed to
+ build the package. LIBFOO_INSTALL_STAGING_CMDS tells what
+ steps should be performed to install the package in the staging space.
+ LIBFOO_INSTALL_TARGET_CMDS tells what steps should be
+ performed to install the package in the target space.
All these steps rely on the $(@D) variable, which
+ contains the directory where the source code of the package has been
+ extracted.
Finally, on line 27, we call the GENTARGETS which
+ generates, according to the variables defined previously, all the
+ Makefile code necessary to make your package working.
The GENTARGETS macro takes three arguments:
package/libfoo, then the directory prefix
+ is package. If your package is in
+ package/editors/foo, then the directory prefix must be
+ package/editors..mk file and must
+ match the configuration option name in the Config.in
+ file. For example, if the package name is libfoo, so the
+ variables in the .mk must start with
+ LIBFOO_ and the configuration option in the
+ Config.in file must be BR2_PACKAGE_LIBFOO.For a given package, in a single .mk file, it is
+ possible to call GENTARGETS twice, once to create the rules to generate
+ a target package and once to create the rules to generate a host package:
+
$(eval $(call GENTARGETS,package,libfoo)) $(eval $(call GENTARGETS,package,libfoo,host))-
This might be useful if the compilation of the target package
- requires some tools to be installed on the host. If the package
- name is libfoo, then the name of the package for the
- target is also libfoo, while the name of the package
- for the host is host-libfoo. These names should be
- used in the DEPENDENCIES variables of other packages if they depend
- on libfoo or host-libfoo.
The call to the GENTARGETS macro must be at
- the end of the .mk file, after all variable
- definitions.
For the target package, the GENTARGETS uses the
- variables defined by the .mk file and prefixed by the uppercased
- package name: LIBFOO_*. For the host package, it uses
- the HOST_LIBFOO_*. For some variables, if the
- HOST_LIBFOO_ prefixed variable doesn't exist, the
- package infrastructure uses the corresponding variable prefixed by
- LIBFOO_. This is done for variables that are likely to
- have the same value for both the target and host packages. See
- below for details.
The list of variables that can be set in a .mk file
- to give metadata informations is (assuming the package name is
- libfoo) :
LIBFOO_VERSION, mandatory, must contain the
- version of the package. Note that if
- HOST_LIBFOO_VERSION doesn't exist, it is assumed to
- be the same as LIBFOO_VERSION.LIBFOO_VERSION=0.1.2LIBFOO_SOURCE may contain the name of the
- tarball of the package. If HOST_LIBFOO_SOURCE is not
- specified, it defaults to LIBFOO_VERSION. If none
- are specified, then the value is assumed to be
- packagename-$(LIBFOO_VERSION).tar.gz.LIBFOO_SOURCE =
- foobar-$(LIBFOO_VERSION).tar.bz2LIBFOO_PATCH may contain the name of a patch,
- that will be downloaded from the same location as the tarball
- indicated in LIBFOO_SOURCE. If
- HOST_LIBFOO_PATCH is not specified, it defaults to
- LIBFOO_PATCH. Also note that another mechanism is
- available to patch a package: all files of the form
- packagename-packageversion-description.patch present
- in the package directory inside Buildroot will be applied to the
- package after extraction.LIBFOO_SITE may contain the Internet location of
- the tarball of the package. If HOST_LIBFOO_SITE is
- not specified, it defaults to LIBFOO_SITE. If none
- are specified, then the location is assumed to be
- http://$$(BR2_SOURCEFORGE_MIRROR).dl.sourceforge.net/sourceforge/packagename.LIBFOO_SITE=http://www.foosoftware.org/libfoo.LIBFOO_DEPENDENCIES lists the dependencies (in
- terms of package name) that are required for the current target
- package to compile. These dependencies are guaranteed to be
- compiled and installed before the configuration of the current
- package starts. In a similar way,
- HOST_LIBFOO_DEPENDENCIES lists the dependency for
- the current host package.LIBFOO_INSTALL_STAGING can be set to
- YES or NO (default). If set to
- YES, then the commands in the
- LIBFOO_INSTALL_STAGING_CMDS variables are executed
- to install the package into the staging directory.
-
- LIBFOO_INSTALL_TARGET can be set to
- YES (default) or NO. If set to
- YES, then the commands in the
- LIBFOO_INSTALL_TARGET_CMDS variables are executed
- to install the package into the target directory.
-
- The recommended way to define these variables is to use the - following syntax:
+This might be useful if the compilation of the target package
+ requires some tools to be installed on the host. If the package name is
+ libfoo, then the name of the package for the target is also
+ libfoo, while the name of the package for the host is
+ host-libfoo. These names should be used in the DEPENDENCIES
+ variables of other packages if they depend on libfoo or
+ host-libfoo.
The call to the GENTARGETS macro must be at the
+ end of the .mk file, after all variable definitions.
For the target package, the GENTARGETS uses the
+ variables defined by the .mk file and prefixed by the uppercased package
+ name: LIBFOO_*. For the host package, it uses the
+ HOST_LIBFOO_*. For some variables, if the
+ HOST_LIBFOO_ prefixed variable doesn't exist, the package
+ infrastructure uses the corresponding variable prefixed by
+ LIBFOO_. This is done for variables that are likely to have
+ the same value for both the target and host packages. See below for
+ details.
The list of variables that can be set in a .mk file to
+ give metadata informations is (assuming the package name is
+ libfoo) :
LIBFOO_VERSION, mandatory, must contain the version
+ of the package. Note that if HOST_LIBFOO_VERSION doesn't
+ exist, it is assumed to be the same as LIBFOO_VERSION.
+ LIBFOO_VERSION=0.1.2LIBFOO_SOURCE may contain the name of the tarball of
+ the package. If HOST_LIBFOO_SOURCE is not specified, it
+ defaults to LIBFOO_VERSION. If none are specified, then
+ the value is assumed to be
+ packagename-$(LIBFOO_VERSION).tar.gz.LIBFOO_SOURCE = foobar-$(LIBFOO_VERSION).tar.bz2LIBFOO_PATCH may contain the name of a patch, that
+ will be downloaded from the same location as the tarball indicated in
+ LIBFOO_SOURCE. If HOST_LIBFOO_PATCH is not
+ specified, it defaults to LIBFOO_PATCH. Also note that
+ another mechanism is available to patch a package: all files of the
+ form packagename-packageversion-description.patch present
+ in the package directory inside Buildroot will be applied to the
+ package after extraction.LIBFOO_SITE may contain the Internet location of the
+ tarball of the package. If HOST_LIBFOO_SITE is not
+ specified, it defaults to LIBFOO_SITE. If none are
+ specified, then the location is assumed to be
+ http://$$(BR2_SOURCEFORGE_MIRROR).dl.sourceforge.net/sourceforge/packagename.
+ LIBFOO_SITE=http://www.foosoftware.org/libfoo.LIBFOO_DEPENDENCIES lists the dependencies (in terms
+ of package name) that are required for the current target package to
+ compile. These dependencies are guaranteed to be compiled and
+ installed before the configuration of the current package starts. In a
+ similar way, HOST_LIBFOO_DEPENDENCIES lists the
+ dependency for the current host package.LIBFOO_INSTALL_STAGING can be set to YES
+ or NO (default). If set to YES, then the
+ commands in the LIBFOO_INSTALL_STAGING_CMDS variables are
+ executed to install the package into the staging directory.LIBFOO_INSTALL_TARGET can be set to YES
+ (default) or NO. If set to YES, then the
+ commands in the LIBFOO_INSTALL_TARGET_CMDS variables are
+ executed to install the package into the target directory.The recommended way to define these variables is to use the following + syntax:
LIBFOO_VERSION=2.32-
Now, the variables that define what should be performed at the - different steps of the build process.
- -LIBFOO_CONFIGURE_CMDS, used to list the
- actions to be performed to configure the package before its
- compilationLIBFOO_BUILD_CMDS, used to list the actions to
- be performed to compile the packageHOST_LIBFOO_INSTALL_CMDS, used to list the
- actions to be performed to install the package, when the
- package is a host package. The package must install its files
- to the directory given by $(HOST_DIR). All files,
- including development files such as headers should be
- installed, since other packages might be compiled on top of
- this package.LIBFOO_INSTALL_TARGET_CMDS, used to list the
- actions to be performed to install the package to the target
- directory, when the package is a target package. The package
- must install its files to the directory given by
- $(TARGET_DIR). Only the files required for
- execution of the package should be installed. Header
- files and documentation should not be installed.Now, the variables that define what should be performed at the + different steps of the build process.
-LIBFOO_INSTALL_STAGING_CMDS, used to list the
- actions to be performed to install the package to the staging
- directory, when the package is a target package. The package
- must install its files to the directory given by
- $(STAGING_DIR). All development files should be
- installed, since they might be needed to compile other
- packages.LIBFOO_CLEAN_CMDS, used to list the actions to
- perform to clean up the build directory of the package.LIBFOO_UNINSTALL_TARGET_CMDS, used to list the
- actions to uninstall the package from the target directory
- $(TARGET_DIR)LIBFOO_UNINSTALL_STAGING_CMDS$(STAGING_DIR).
-
- LIBFOO_CONFIGURE_CMDS, used to list the actions to be
+ performed to configure the package before its compilationLIBFOO_BUILD_CMDS, used to list the actions to be
+ performed to compile the packageHOST_LIBFOO_INSTALL_CMDS, used to list the actions to
+ be performed to install the package, when the package is a host
+ package. The package must install its files to the directory given by
+ $(HOST_DIR). All files, including development files such
+ as headers should be installed, since other packages might be compiled
+ on top of this package.LIBFOO_INSTALL_TARGET_CMDS, used to list the actions
+ to be performed to install the package to the target directory, when
+ the package is a target package. The package must install its files to
+ the directory given by $(TARGET_DIR). Only the files
+ required for execution of the package
+ should be installed. Header files and documentation should not be
+ installed.LIBFOO_INSTALL_STAGING_CMDS, used to list the actions
+ to be performed to install the package to the staging directory, when
+ the package is a target package. The package must install its files to
+ the directory given by $(STAGING_DIR). All development
+ files should be installed, since they might be needed to compile other
+ packages.LIBFOO_CLEAN_CMDS, used to list the actions to
+ perform to clean up the build directory of the package.LIBFOO_UNINSTALL_TARGET_CMDS, used to list the actions
+ to uninstall the package from the target directory
+ $(TARGET_DIR)LIBFOO_UNINSTALL_STAGING_CMDS, used to list the
+ actions to uninstall the package from the staging directory
+ $(STAGING_DIR).The preferred way to define these variables is:
+The preferred way to define these variables is:
define LIBFOO_CONFIGURE_CMDS - action 1 - action 2 - action 3 -endef- -
In the action definitions, you can use the following - variables:
- -$(@D), which contains the directory in which
- the package source code has been uncompressed.$(TARGET_CC), $(TARGET_LD),
- etc. to get the target cross-compilation utilitiesIn the action definitions, you can use the following variables:
-$(TARGET_CROSS) to get the cross-compilation
- toolchain prefix$(@D), which contains the directory in which the
+ package source code has been uncompressed.$(HOST_DIR),
- $(STAGING_DIR) and $(TARGET_DIR)
- variables to install the packages properly.$(TARGET_CC), $(TARGET_LD), etc. to get
+ the target cross-compilation utilities$(TARGET_CROSS) to get the cross-compilation
+ toolchain prefix$(HOST_DIR), $(STAGING_DIR)
+ and $(TARGET_DIR) variables to install the packages
+ properly.The last feature of the generic infrastructure is the ability
- to add hook more actions after existing steps. These hooks aren't
- really useful for generic packages, since the .mk
- file already has full control over the actions performed in each
- step of the package construction. The hooks are more useful for
- packages using the autotools infrastructure described below. But
- since they are provided by the generic infrastructure, they are
- documented here.
The last feature of the generic infrastructure is the ability to add
+ hook more actions after existing steps. These hooks aren't really useful
+ for generic packages, since the .mk file already has full
+ control over the actions performed in each step of the package
+ construction. The hooks are more useful for packages using the autotools
+ infrastructure described below. But since they are provided by the
+ generic infrastructure, they are documented here.
The following hook points are available:
+The following hook points are available:
-LIBFOO_POST_PATCH_HOOKSLIBFOO_POST_CONFIGURE_HOOKSLIBFOO_POST_BUILD_HOOKSLIBFOO_POST_INSTALL_HOOKS (for host packages only)LIBFOO_POST_INSTALL_STAGING_HOOKS (for target packages only)LIBFOO_POST_INSTALL_TARGET_HOOKS (for target packages only)LIBFOO_POST_PATCH_HOOKSLIBFOO_POST_CONFIGURE_HOOKSLIBFOO_POST_BUILD_HOOKSLIBFOO_POST_INSTALL_HOOKS (for host packages only)LIBFOO_POST_INSTALL_STAGING_HOOKS (for target packages only)LIBFOO_POST_INSTALL_TARGET_HOOKS (for target packages only)This variables are lists of variable names containing - actions to be performed at this hook point. This allows several - hooks to be registered at a given hook point. Here is an - example:
+This variables are lists of variable names containing actions + to be performed at this hook point. This allows several hooks to be + registered at a given hook point. Here is an example:
-+define LIBFOO_POST_PATCH_FIXUP - action1 - action2 + action1 + action2 endef LIBFOO_POST_PATCH_HOOKS += LIBFOO_POST_PATCH_FIXUP-Makefile for autotools-based - packages : tutorial
- -First, let's see how to write a
- -.mkfile for an - autotools-based package, with an example :01: ############################################################# -02: # -03: # foo -04: # -05: ############################################################# -06: -07: FOO_VERSION:=1.0 -08: FOO_SOURCE:=foo-$(FOO_VERSION).tar.gz -09: FOO_SITE:=http://www.foosoftware.org/downloads -10: FOO_INSTALL_STAGING = YES -11: FOO_INSTALL_TARGET = YES -12: FOO_CONF_OPT = --enable-shared -13: FOO_DEPENDENCIES = libglib2 host-pkg-config -14: -15: $(eval $(call AUTOTARGETS,package,foo))- -On line 7, we declare the version of the package. On line 8 and - 9, we declare the name of the tarball and the location of the - tarball on the Web. Buildroot will automatically download the +
Makefile for autotools-based packages : tutorial
+ +First, let's see how to write a
+ +.mkfile for an + autotools-based package, with an example :+01: ############################################################# +02: # +03: # libfoo +04: # +05: ############################################################# +06: LIBFOO_VERSION = 1.0 +07: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz +08: LIBFOO_SITE = http://www.foosoftware.org/download +09: LIBFOO_INSTALL_STAGING = YES +10: LIBFOO_INSTALL_TARGET = YES +11: LIBFOO_CONF_OPT = --enable-shared +12: LIBFOO_DEPENDENCIES = libglib2 host-pkg-config +13: +14: $(eval $(call AUTOTARGETS,package,libfoo)) ++ +On line 6, we declare the version of the package.
+ +On line 7 and 8, we declare the name of the tarball and the location + of the tarball on the Web. Buildroot will automatically download the tarball from this location.
-On line 10, we tell Buildroot to install the package to the - staging directory. The staging directory, located in -
- -output/staging/is the directory where all the - packages are installed, including their development files, etc. By - default, packages are not installed to the staging directory, - since usually, only libraries need to be installed in the staging - directory: their development files are needed to compile other - libraries or applications depending on them. Also by default, when - staging installation is enabled, packages are installed in this - location using themake installcommand.On line 11, we tell Buildroot to also install the package to - the target directory. This directory contains what will become the - root filesystem running on the target. Usually, we try not to - install the documentation and to install stripped versions of the - binary. By default, target installation is enabled, so in fact, - this line is not strictly necessary. Also by default, packages are - installed in this location using the
- -make - install-stripcommand.On line 12, we tell Buildroot to pass a custom configure - option, that will be passed to the
- -./configurescript - before configuring and building the package.On line 13, we declare our dependencies, so that they are built +
On line 9, we tell Buildroot to install the package to the staging + directory. The staging directory, located in
+ +output/staging/+ is the directory where all the packages are installed, including their + development files, etc. By default, packages are not installed to the + staging directory, since usually, only libraries need to be installed in + the staging directory: their development files are needed to compile + other libraries or applications depending on them. Also by default, when + staging installation is enabled, packages are installed in this location + using themake installcommand.On line 10, we tell Buildroot to also install the package to the + target directory. This directory contains what will become the root + filesystem running on the target. Usually, we try not to install header + files and to install stripped versions of the binary. By default, target + installation is enabled, so in fact, this line is not strictly + necessary. Also by default, packages are installed in this location + using the
+ +make installcommand.On line 11, we tell Buildroot to pass a custom configure option, that + will be passed to the
+ +./configurescript before configuring + and building the package.On line 12, we declare our dependencies, so that they are built before the build process of our package starts.
-Finally, on line line 14, we invoke the -
- -AUTOTARGETSmacro that generates all the Makefile - rules that actually allows the package to be built.Makefile for autotools - packages : reference
- -The main macro of the autotools package infrastructure is -
- -AUTOTARGETS. It has the same number of arguments and - the same semantic as theGENTARGETSmacro, which is - the main macro of the generic package infrastructure. For - autotools packages, the ability to have target and host packages - is also available (and is actually widely used).Just like the generic infrastructure, the autotools - infrastructure works by defining a number of variables before - calling the
- -AUTOTARGETSmacro.First, all the package meta-information variables that exist in - the generic infrastructure also exist in the autotools - infrastructure:
- -LIBFOO_VERSION, -LIBFOO_SOURCE,LIBFOO_PATCH, -LIBFOO_SITE,LIBFOO_SUBDIR, -LIBFOO_DEPENDENCIES, -LIBFOO_INSTALL_STAGING, -LIBFOO_INSTALL_TARGET.A few additional variables, specific to the autotools - infrastructure, can also be defined. Many of them are only useful - in very specific cases, typical packages will therefore only use a - few of them.
+Finally, on line line 14, we invoke the
-AUTOTARGETS+ macro that generates all the Makefile rules that actually allows the + package to be built.
LIBFOO_SUBDIR may contain the name of a
- subdirectory inside the package that contains the configure
- script. This is useful, if for example, the main configure
- script is not at the root of the tree extracted by the
- tarball. If HOST_LIBFOO_SUBDIR is not specified, it
- defaults to LIBFOO_SUBDIR.LIBFOO_CONF_ENV, to specify additional
- environment variables to pass to the configure script. By
- default, empty.LIBFOO_CONF_OPT, to specify additional
- configure options to pass to the configure script. By default,
- empty.LIBFOO_MAKE, to specify an
- alternate make command. This is typically useful
- when parallel make it enabled in the configuration
- (using BR2_JLEVEL) but that this feature should be
- disabled for the given package, for one reason or another. By
- default, set to $(MAKE). If parallel building is
- not supported by the package, then it should
- do LIBFOO_MAKE=$(MAKE1).LIBFOO_MAKE_ENV, to specify additional
- environment variables to pass to make in the build step. These
- are passed before the make command. By default,
- empty.LIBFOO_MAKE_OPT, to specify additional
- variables to pass to make in the build step. These are passed
- after the make command. By default, empty.LIBFOO_AUTORECONF, tells whether the package
- should be autoreconfigured or not (i.e, if the configure script
- and Makefile.in files should be re-generated by re-running
- autoconf, automake, libtool, etc.). Valid values
- are YES and NO. By default, the value
- is NOLIBFOO_AUTORECONF_OPT to specify additional
- options passed to the autoreconf program
- if LIBFOO_AUTORECONF=YES. By default, empty.LIBFOO_LIBTOOL_PATCH tells whether the
- Buildroot patch to fix libtool cross-compilation issues should
- be applied or not. Valid values are YES
- and NO. By default, the value
- is YESLIBFOO_USE_CONFIG_CACHE tells whether the
- configure script should really on a cache file that caches test
- results from previous configure script. Usually, this variable
- should be left to its default value. Only for specific packages
- having issues with the configure cache can set this variable to
- the NO value (but this is more a work-around than a
- really fix)LIBFOO_INSTALL_STAGING_OPT contains the make
- options used to install the package to the staging directory. By
- default, the value is DESTDIR=$$(STAGING_DIR)
- install, which is correct for most autotools packages. It
- is still possible to override it.LIBFOO_INSTALL_TARGET_OPT contains the make
- options used to install the package to the target directory. By
- default, the value is DESTDIR=$$(TARGET_DIR)
- install-strip if BR2_ENABLE_DEBUG is not
- set, and DESTDIR=$$(TARGET_DIR) install-exec
- if BR2_ENABLE_DEBUG is set. These default values
- are correct for most autotools packages, but it is still
- possible to override them if needed.LIBFOO_CLEAN_OPT contains the make options used
- to clean the package. By default, the value
- is clean.LIBFOO_UNINSTALL_STAGING_OPT, contains the make
- options used to uninstall the package from the staging
- directory. By default, the value is
- DESTDIR=$$(STAGING_DIR) uninstall.LIBFOO_UNINSTALL_TARGET_OPT, contains the make
- options used to uninstall the package from the target
- directory. By default, the value is
- DESTDIR=$$(TARGET_DIR) uninstall.The main macro of the autotools package infrastructure is
+ AUTOTARGETS. It has the same number of arguments and the
+ same semantic as the GENTARGETS macro, which is the main
+ macro of the generic package infrastructure. For autotools packages, the
+ ability to have target and host packages is also available (and is
+ actually widely used).
Just like the generic infrastructure, the autotools infrastructure
+ works by defining a number of variables before calling the
+ AUTOTARGETS macro.
With the autotools infrastructure, all the steps required to - build and install the packages are already defined, and they - generally work well for most autotools-based packages. However, - when required, it is still possible to customize what is done in - particular step:
+First, all the package meta-information variables that exist in the
+ generic infrastructure also exist in the autotools infrastructure:
+ LIBFOO_VERSION, LIBFOO_SOURCE,
+ LIBFOO_PATCH, LIBFOO_SITE,
+ LIBFOO_SUBDIR, LIBFOO_DEPENDENCIES,
+ LIBFOO_INSTALL_STAGING, LIBFOO_INSTALL_TARGET.
A few additional variables, specific to the autotools infrastructure, + can also be defined. Many of them are only useful in very specific + cases, typical packages will therefore only use a few of them.
-LIBFOO_SUBDIR may contain the name of a subdirectory
+ inside the package that contains the configure script. This is useful,
+ if for example, the main configure script is not at the root of the
+ tree extracted by the tarball. If HOST_LIBFOO_SUBDIR is
+ not specified, it defaults to LIBFOO_SUBDIR.LIBFOO_CONF_ENV, to specify additional environment
+ variables to pass to the configure script. By default, empty.LIBFOO_CONF_OPT, to specify additional configure
+ options to pass to the configure script. By default, empty.LIBFOO_MAKE, to specify an alternate make
+ command. This is typically useful when parallel make it enabled in
+ the configuration (using BR2_JLEVEL) but that this
+ feature should be disabled for the given package, for one reason or
+ another. By default, set to $(MAKE). If parallel building
+ is not supported by the package, then it should do
+ LIBFOO_MAKE=$(MAKE1).LIBFOO_MAKE_ENV, to specify additional environment
+ variables to pass to make in the build step. These are passed before
+ the make command. By default, empty.LIBFOO_MAKE_OPT, to specify additional variables to
+ pass to make in the build step. These are passed after the
+ make command. By default, empty.LIBFOO_AUTORECONF, tells whether the package should
+ be autoreconfigured or not (i.e, if the configure script and
+ Makefile.in files should be re-generated by re-running autoconf,
+ automake, libtool, etc.). Valid values are YES and
+ NO. By default, the value is NOLIBFOO_AUTORECONF_OPT to specify additional options
+ passed to the autoreconf program if
+ LIBFOO_AUTORECONF=YES. By default, empty.LIBFOO_LIBTOOL_PATCH tells whether the Buildroot
+ patch to fix libtool cross-compilation issues should be applied or
+ not. Valid values are YES and NO. By
+ default, the value is YESLIBFOO_USE_CONFIG_CACHE tells whether the configure
+ script should really on a cache file that caches test results from
+ previous configure script. Usually, this variable should be left to
+ its default value. Only for specific packages having issues with the
+ configure cache can set this variable to the NO value
+ (but this is more a work-around than a really fix)LIBFOO_INSTALL_STAGING_OPT contains the make options
+ used to install the package to the staging directory. By default, the
+ value is DESTDIR=$$(STAGING_DIR) install, which is
+ correct for most autotools packages. It is still possible to override
+ it.LIBFOO_INSTALL_TARGET_OPT contains the make options
+ used to install the package to the target directory. By default, the
+ value is DESTDIR=$$(TARGET_DIR) install-strip if
+ BR2_ENABLE_DEBUG is not set, and
+ DESTDIR=$$(TARGET_DIR) install-exec if
+ BR2_ENABLE_DEBUG is set. These default values are correct
+ for most autotools packages, but it is still possible to override them
+ if needed.LIBFOO_CLEAN_OPT contains the make options used to
+ clean the package. By default, the value is clean.LIBFOO_UNINSTALL_STAGING_OPT, contains the make
+ options used to uninstall the package from the staging directory. By
+ default, the value is DESTDIR=$$(STAGING_DIR) uninstall.LIBFOO_UNINSTALL_TARGET_OPT, contains the make
+ options used to uninstall the package from the target directory. By
+ default, the value is DESTDIR=$$(TARGET_DIR) uninstall..mk defines its own
- LIBFOO_CONFIGURE_CMDS variable, it will be used
- instead of the default autotools one. However, using this method
- should be restricted to very specific cases. Do not use it in
- the general case.With the autotools infrastructure, all the steps required to build + and install the packages are already defined, and they generally work + well for most autotools-based packages. However, when required, it is + still possible to customize what is done in particular step:
+.mk defines its
+ own LIBFOO_CONFIGURE_CMDS variable, it will be used
+ instead of the default autotools one. However, using this method
+ should be restricted to very specific cases. Do not use it in the
+ general case.NOTE: new manual makefiles should not be created, and - existing manual makefiles should be converted either to the - generic infrastructure or the autotools infrastructure. This - section is only kept to document the existing manual makefiles and - help understanding how they work.
+NOTE: new manual makefiles should not be created, and existing + manual makefiles should be converted either to the generic + infrastructure or the autotools infrastructure. This section is only + kept to document the existing manual makefiles and help understanding + how they work.
- 1 ############################################################# - 2 # - 3 # foo - 4 # - 5 ############################################################# - 6 FOO_VERSION:=1.0 - 7 FOO_SOURCE:=foo-$(FOO_VERSION).tar.gz - 8 FOO_SITE:=http://www.foosoftware.org/downloads - 9 FOO_DIR:=$(BUILD_DIR)/foo-$(FOO_VERSION) - 10 FOO_BINARY:=foo - 11 FOO_TARGET_BINARY:=usr/bin/foo - 12 - 13 $(DL_DIR)/$(FOO_SOURCE): - 14 $(call DOWNLOAD,$(FOO_SITE),$(FOO_SOURCE)) - 15 - 16 $(FOO_DIR)/.source: $(DL_DIR)/$(FOO_SOURCE) - 17 $(ZCAT) $(DL_DIR)/$(FOO_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) - - 18 touch $@ - 19 - 20 $(FOO_DIR)/.configured: $(FOO_DIR)/.source - 21 (cd $(FOO_DIR); rm -rf config.cache; \ - 22 $(TARGET_CONFIGURE_OPTS) \ - 23 $(TARGET_CONFIGURE_ARGS) \ - 24 ./configure \ - 25 --target=$(GNU_TARGET_NAME) \ - 26 --host=$(GNU_TARGET_NAME) \ - 27 --build=$(GNU_HOST_NAME) \ - 28 --prefix=/usr \ - 29 --sysconfdir=/etc \ - 30 ) - 31 touch $@ - 32 - 33 $(FOO_DIR)/$(FOO_BINARY): $(FOO_DIR)/.configured - 34 $(MAKE) CC=$(TARGET_CC) -C $(FOO_DIR) - 35 - 36 $(TARGET_DIR)/$(FOO_TARGET_BINARY): $(FOO_DIR)/$(FOO_BINARY) - 37 $(MAKE) DESTDIR=$(TARGET_DIR) -C $(FOO_DIR) install-strip - 38 rm -Rf $(TARGET_DIR)/usr/man - 39 - 40 foo: uclibc ncurses $(TARGET_DIR)/$(FOO_TARGET_BINARY) - 41 - 42 foo-source: $(DL_DIR)/$(FOO_SOURCE) - 43 - 44 foo-clean: - 45 $(MAKE) prefix=$(TARGET_DIR)/usr -C $(FOO_DIR) uninstall - 46 -$(MAKE) -C $(FOO_DIR) clean - 47 - 48 foo-dirclean: - 49 rm -rf $(FOO_DIR) - 50 - 51 ############################################################# - 52 # - 53 # Toplevel Makefile options - 54 # - 55 ############################################################# - 56 ifeq ($(BR2_PACKAGE_FOO),y) - 57 TARGETS+=foo - 58 endif - +01: ############################################################# +02: # +03: # libfoo +04: # +05: ############################################################# +06: LIBFOO_VERSION:=1.0 +07: LIBFOO_SOURCE:=libfoo-$(LIBFOO_VERSION).tar.gz +08: LIBFOO_SITE:=http://www.foosoftware.org/downloads +09: LIBFOO_DIR:=$(BUILD_DIR)/foo-$(FOO_VERSION) +10: LIBFOO_BINARY:=foo +11: LIBFOO_TARGET_BINARY:=usr/bin/foo +12: +13: $(DL_DIR)/$(LIBFOO_SOURCE): +14: $(call DOWNLOAD,$(LIBFOO_SITE),$(LIBFOO_SOURCE)) +15: +16: $(LIBFOO_DIR)/.source: $(DL_DIR)/$(LIBFOO_SOURCE) +17: $(ZCAT) $(DL_DIR)/$(LIBFOO_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) - +18: touch $@ +19: +20: $(LIBFOO_DIR)/.configured: $(LIBFOO_DIR)/.source +21: (cd $(LIBFOO_DIR); rm -rf config.cache; \ +22: $(TARGET_CONFIGURE_OPTS) \ +23: $(TARGET_CONFIGURE_ARGS) \ +24: ./configure \ +25: --target=$(GNU_TARGET_NAME) \ +26: --host=$(GNU_TARGET_NAME) \ +27: --build=$(GNU_HOST_NAME) \ +28: --prefix=/usr \ +29: --sysconfdir=/etc \ +30: ) +31: touch $@ +32: +33: $(LIBFOO_DIR)/$(LIBFOO_BINARY): $(LIBFOO_DIR)/.configured +34: $(MAKE) CC=$(TARGET_CC) -C $(LIBFOO_DIR) +35: +36: $(TARGET_DIR)/$(LIBFOO_TARGET_BINARY): $(LIBFOO_DIR)/$(LIBFOO_BINARY) +37: $(MAKE) DESTDIR=$(TARGET_DIR) -C $(LIBFOO_DIR) install-strip +38: rm -Rf $(TARGET_DIR)/usr/man +39: +40: libfoo: uclibc ncurses $(TARGET_DIR)/$(LIBFOO_TARGET_BINARY) +41: +42: libfoo-source: $(DL_DIR)/$(LIBFOO_SOURCE) +43: +44: libfoo-clean: +45: $(MAKE) prefix=$(TARGET_DIR)/usr -C $(LIBFOO_DIR) uninstall +46: -$(MAKE) -C $(LIBFOO_DIR) clean +47: +48: libfoo-dirclean: +49: rm -rf $(LIBFOO_DIR) +50: +51: ############################################################# +52: # +53: # Toplevel Makefile options +54: # +55: ############################################################# +56: ifeq ($(BR2_PACKAGE_LIBFOO),y) +57: TARGETS+=libfoo +58: endif-
First of all, this Makefile example works for a package which comprises a single
- binary executable. For other software, such as libraries or more
- complex stuff with multiple binaries, it must be adapted. For examples look at
- the other *.mk files in the package
- directory.
First of all, this Makefile example works for a package which
+ comprises a single binary executable. For other software, such as
+ libraries or more complex stuff with multiple binaries, it must be
+ adapted. For examples look at the other *.mk files in the
+ package directory.
At lines 6-11, a couple of useful variables are defined:
LIBFOO_VERSION: The version of libfoo that
+ should be downloaded.FOO_VERSION: The version of foo that
- should be downloaded. LIBFOO_SOURCE: The name of the tarball of libfoo
+ on the download website or FTP site. As you can see
+ LIBFOO_VERSION is used.FOO_SOURCE: The name of the tarball of
- foo on the download website or FTP site. As you can see
- FOO_VERSION is used. LIBFOO_SITE: The HTTP or FTP site from which
+ libfoo archive is downloaded. It must include the complete path to
+ the directory where LIBFOO_SOURCE can be found.FOO_SITE: The HTTP or FTP site from which
- foo archive is downloaded. It must include the complete
- path to the directory where FOO_SOURCE can be
- found. LIBFOO_DIR: The directory into which the software will
+ be configured and compiled. Basically, it's a subdirectory of
+ BUILD_DIR which is created upon decompression of the tarball.
+ FOO_DIR: The directory into which the software
- will be configured and compiled. Basically, it's a subdirectory
- of BUILD_DIR which is created upon decompression of
- the tarball. LIBFOO_BINARY: Software binary name. As said previously,
+ this is an example for a package with a single binary.LIBFOO_TARGET_BINARY: The full path of the binary inside
+ the target filesystem.Lines 13-14 define a target that downloads
+ the tarball from the remote site to the download directory
+ (DL_DIR).
Lines 16-18 define a target and associated + rules that uncompress the downloaded tarball. As you can see, this + target depends on the tarball file so that the previous target (lines 13-14) is called before executing the rules of the + current target. Uncompressing is followed by touching a hidden + file to mark the software as having been uncompressed. This trick is + used everywhere in a Buildroot Makefile to split steps (download, + uncompress, configure, compile, install) while still having correct + dependencies.
+ +Lines 20-31 define a target and associated
+ rules that configure the software. It depends on the previous target
+ (the hidden .source file) so that we are sure the software
+ has been uncompressed. In order to configure the package, it basically
+ runs the well-known ./configure script. As we may be doing
+ cross-compilation, target, host and
+ build arguments are given. The prefix is also set to
+ /usr, not because the software will be installed in
+ /usr on your host system, but because the software will bin
+ installed in /usr on the target filesystem. Finally it
+ creates a .configured file to mark the software as
+ configured.
Lines 33-34 define a target and a rule that
+ compile the software. This target will create the binary file in the
+ compilation directory and depends on the software being already
+ configured (hence the reference to the .configured file).
+ It basically runs make inside the source directory.
Lines 36-38 define a target and associated
+ rules that install the software inside the target filesystem. They
+ depend on the binary file in the source directory to make sure the
+ software has been compiled. They use the install-strip
+ target of the software Makefile by passing a
+ DESTDIR argument so that the Makefile doesn't
+ try to install the software in the host /usr but rather in
+ the target /usr. After the installation, the
+ /usr/man directory inside the target filesystem is removed
+ to save space.
Line 40 defines the main target of the
+ software — the one that will be eventually be used by the top level
+ Makefile to download, compile, and then install this
+ package. This target should first of all depend on all needed
+ dependencies of the software (in our example, uclibc and
+ ncurses) and also depend on the final binary. This last dependency
+ will call all previous dependencies in the correct order.
Line 42 defines a simple target that only
+ downloads the code source. This is not used during normal operation of
+ Buildroot, but is needed if you intend to download all required sources
+ at once for later offline build. Note that if you add a new package
+ providing a libfoo-source target is mandatory to
+ support users that wish to do offline-builds. Furthermore it eases
+ checking if all package-sources are downloadable.
Lines 44-46 define a simple target to clean
+ the software build by calling the Makefiles with the appropriate option.
+ The -clean target should run make clean on
+ $(BUILD_DIR)/package-version and MUST uninstall all files of the package
+ from $(STAGING_DIR) and from $(TARGET_DIR).
Lines 48-49 define a simple target to
+ completely remove the directory in which the software was uncompressed,
+ configured and compiled. The -dirclean target MUST
+ completely rm $(BUILD_DIR)/ package-version.
Lines 51-58 add the target libfoo
+ to the list of targets to be compiled by Buildroot by first checking if
+ the configuration option for this package has been enabled using the
+ configuration tool. If so, it then "subscribes" this package
+ to be compiled by adding the package to the TARGETS global variable.
+ The name added to the TARGETS global variable is the name of this
+ package's target, as defined on line 40, which
+ is used by Buildroot to download, compile, and then install this package.
+
FOO_BINARY: Software binary name. As said
- previously, this is an example for a package with a single binary.FOO_TARGET_BINARY: The full path of the binary
- inside the target filesystem. Many packages that support internationalization use the gettext + library. Dependency on this library are fairly complicated and therefore + deserves a few explanations.
- +The uClibc C library doesn't implement gettext functionality, + therefore with this C library, a separate gettext must be compiled. On + the other hand, the glibc C library does integrate its own + gettext, and in this case, the separate gettext library should not be + compiled, because it creates various kind of build failures.
-Lines 13-14 define a target that downloads the
- tarball from the remote site to the download directory
- (DL_DIR).
Lines 16-18 define a target and associated rules - that uncompress the downloaded tarball. As you can see, this target - depends on the tarball file so that the previous target (lines - 13-14) is called before executing the rules of the - current target. Uncompressing is followed by touching a hidden file - to mark the software as having been uncompressed. This trick is - used everywhere in a Buildroot Makefile to split steps - (download, uncompress, configure, compile, install) while still - having correct dependencies.
- -Lines 20-31 define a target and associated rules
- that configure the software. It depends on the previous target (the
- hidden .source file) so that we are sure the software has
- been uncompressed. In order to configure the package, it basically runs the
- well-known ./configure script. As we may be doing
- cross-compilation, target, host and
- build arguments are given. The prefix is also set to
- /usr, not because the software will be installed in
- /usr on your host system, but because the software will
- bin installed in /usr on the target
- filesystem. Finally it creates a .configured file to
- mark the software as configured.
Lines 33-34 define a target and a rule that
- compile the software. This target will create the binary file in the
- compilation directory and depends on the software being already
- configured (hence the reference to the .configured
- file). It basically runs make inside the source
- directory.
Lines 36-38 define a target and associated rules
- that install the software inside the target filesystem. They depend on the
- binary file in the source directory to make sure the software has
- been compiled. They use the install-strip target of the
- software Makefile by passing a DESTDIR
- argument so that the Makefile doesn't try to install
- the software in the host /usr but rather in the target
- /usr. After the installation, the
- /usr/man directory inside the target filesystem is
- removed to save space.
Line 40 defines the main target of the software —
- the one that will be eventually be used by the top level
- Makefile to download, compile, and then install
- this package. This target should first of all depend on all
- needed dependencies of the software (in our example,
- uclibc and ncurses) and also depend on the
- final binary. This last dependency will call all previous
- dependencies in the correct order.
Line 42 defines a simple target that only
- downloads the code source. This is not used during normal operation of
- Buildroot, but is needed if you intend to download all required sources at
- once for later offline build. Note that if you add a new package providing
- a foo-source target is mandatory to support
- users that wish to do offline-builds. Furthermore it eases checking
- if all package-sources are downloadable.
Lines 44-46 define a simple target to clean the
- software build by calling the Makefiles with the appropriate option.
- The -clean target should run make clean
- on $(BUILD_DIR)/package-version and MUST uninstall all files of the
- package from $(STAGING_DIR) and from $(TARGET_DIR).
Lines 48-49 define a simple target to completely
- remove the directory in which the software was uncompressed, configured and
- compiled. The -dirclean target MUST completely rm $(BUILD_DIR)/
- package-version.
Lines 51-58 add the target foo to
- the list of targets to be compiled by Buildroot by first checking if
- the configuration option for this package has been enabled
- using the configuration tool. If so, it then "subscribes"
- this package to be compiled by adding the package to the TARGETS
- global variable. The name added to the TARGETS global
- variable is the name of this package's target, as defined on
- line 40, which is used by Buildroot to download,
- compile, and then install this package.
Many packages that support internationalization use the gettext - library. Dependency on this library are fairly complicated and - therefore deserves a few explanations.
- -The uClibc C library doesn't implement gettext - functionality, therefore with this C library, a separate gettext - must be compiled. On the other hand, the glibc C library - does integrate its own gettext, and in this case, the separate - gettext library should not be compiled, because it creates various - kind of build failures.
- -Additionally, some packages (such as libglib2) do require
- gettext unconditionally, while other packages (those who
- support --disable-nls in general) only require
- gettext when locale support is enabled.
Additionally, some packages (such as libglib2) do require gettext
+ unconditionally, while other packages (those who support
+ --disable-nls in general) only require gettext when locale
+ support is enabled.
Therefore, Buildroot defines two configuration options:
@@ -1576,64 +1517,52 @@ LIBFOO_POST_PATCH_HOOKS += LIBFOO_POST_PATCH_FIXUPBR2_NEEDS_GETTEXT, which is true as soon as the
toolchain doesn't provide its own gettext implementationBR2_NEEDS_GETTEXT_IF_LOCALE, which is true if
- the toolchain doesn't provide its own gettext implementation and
- if locale support is enabledBR2_NEEDS_GETTEXT_IF_LOCALE, which is true if the
+ toolchain doesn't provide its own gettext implementation and if locale
+ support is enabledTherefore, packages that unconditionally need gettext should:
select BR2_PACKAGE_GETTEXT if
- BR2_NEEDS_GETTEXT and possibly select
- BR2_PACKAGE_LIBINTL if BR2_NEEDS_GETTEXT if libintl is
- also neededselect BR2_PACKAGE_GETTEXT if BR2_NEEDS_GETTEXT
+ and possibly select BR2_PACKAGE_LIBINTL if BR2_NEEDS_GETTEXT
+ if libintl is also needed$(if $(BR2_NEEDS_GETTEXT),gettext) in the
- package DEPENDENCIES variable$(if $(BR2_NEEDS_GETTEXT),gettext) in the package
+ DEPENDENCIES variablePackages that need gettext only when locale support is enabled - should:
+Packages that need gettext only when locale support is enabled should: +
select BR2_PACKAGE_GETTEXT if
- BR2_NEEDS_GETTEXT_IF_LOCALE and possibly select
- BR2_PACKAGE_LIBINTL if BR2_NEEDS_GETTEXT_IF_LOCALE if
- libintl is also needed$(if
- $(BR2_NEEDS_GETTEXT_IF_LOCALE),gettext) in the
- package DEPENDENCIES variableselect BR2_PACKAGE_GETTEXT if BR2_NEEDS_GETTEXT_IF_LOCALE
+ and possibly
+ select BR2_PACKAGE_LIBINTL if BR2_NEEDS_GETTEXT_IF_LOCALE
+ if libintl is also needed$(if $(BR2_NEEDS_GETTEXT_IF_LOCALE),gettext) in
+ the package DEPENDENCIES variableAs you can see, adding a software package to Buildroot is simply a - matter of writing a Makefile using an existing - example and modifying it according to the compilation process required by - the package.
+As you can see, adding a software package to Buildroot is simply a + matter of writing a Makefile using an existing example and modifying it + according to the compilation process required by the package.
-If you package software that might be useful for other people, - don't forget to send a patch to Buildroot developers!
+If you package software that might be useful for other people, don't + forget to send a patch to Buildroot developers!
-To learn more about Buildroot you can visit these - websites:
+To learn more about Buildroot you can visit these websites:
- -