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-cmake.txt[]
|
||||||
|
|
||||||
include::adding-packages-handwritten.txt[]
|
|
||||||
|
|
||||||
include::adding-packages-gettext.txt[]
|
include::adding-packages-gettext.txt[]
|
||||||
|
|
||||||
include::adding-packages-conclusion.txt[]
|
include::adding-packages-conclusion.txt[]
|
||||||
|
Loading…
Reference in New Issue
Block a user