|
@@ -1,167 +0,0 @@
|
|
|
-[[handwritten-tutorial]]
|
|
|
-
|
|
|
-Manual Makefile
|
|
|
----------------
|
|
|
-
|
|
|
-*NOTE: new manual makefiles should not be created, and existing manual
|
|
|
-makefiles should be converted either to the generic, autotools or
|
|
|
-cmake infrastructure. This section is only kept to document the
|
|
|
-existing manual makefiles and to help understand how they work.*
|
|
|
-
|
|
|
-------------------------
|
|
|
-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
|
|
|
-qqadapted. 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.
|
|
|
-
|
|
|
-* +LIBFOO_SOURCE+: The name of the tarball of 'libfoo' on the download
|
|
|
- website or FTP site. As you can see +LIBFOO_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.
|
|
|
-
|
|
|
-* +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.
|
|
|
-
|
|
|
-* +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 be 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 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 Makefile with the appropriate options. 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.
|