manual: remove Manual Makefile section
Signed-off-by: Samuel Martin <s.martin49@gmail.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
This commit is contained in:
parent
a34896a8d7
commit
93e4785aa4
@ -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.
|
@ -15,8 +15,6 @@ include::adding-packages-autotools.txt[]
|
||||
|
||||
include::adding-packages-cmake.txt[]
|
||||
|
||||
include::adding-packages-handwritten.txt[]
|
||||
|
||||
include::adding-packages-gettext.txt[]
|
||||
|
||||
include::adding-packages-conclusion.txt[]
|
||||
|
Loading…
Reference in New Issue
Block a user