| Infrastructure for autotools-based packages |
| ------------------------------------------- |
| |
| [[autotargets-tutorial]] |
| |
| +AUTOTARGETS+ tutorial |
| ~~~~~~~~~~~~~~~~~~~~~~ |
| |
| First, let's see how to write a +.mk+ file 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)) |
| ------------------------ |
| |
| 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 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 the +make install+ command. |
| |
| 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 install+ command. |
| |
| On line 11, we tell Buildroot to pass a custom configure option, that |
| will be passed to the +./configure+ script 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 +AUTOTARGETS+ |
| macro that generates all the Makefile rules that actually allows the |
| package to be built. |
| |
| [[autotargets-reference]] |
| |
| +AUTOTARGETS+ reference |
| ~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| 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. |
| |
| First, all the package metadata 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 is 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 be set to |
| +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 +NO+ |
| |
| * +LIBFOO_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 +YES+ |
| |
| * +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+. The default |
| value is correct for most autotools packages, but it is still possible |
| to override it 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+. |
| |
| 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 any particular step: |
| |
| * By adding a post-operation hook (after extract, patch, configure, |
| build or install). See the reference documentation of the generic |
| infrastructure for details. |
| |
| * By overriding one of the steps. For example, even if the autotools |
| infrastructure is used, if the package +.mk+ file 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. |