From 8cd052938ab0d3e6869b84de538fdf864680c8cc Mon Sep 17 00:00:00 2001
From: Waldemar Brodkorb build_ARCH/staging_dir/
by
+ staging_dir_ARCH/
by
default). This is where the cross-compilation toolchain will be
installed. If you want to use the same cross-compilation toolchain for
other purposes, such as compiling third-party applications, you can add
- build_ARCH/staging_dir/bin
to your PATH, and then use
+ staging_dir_ARCH/bin
to your PATH, and then use
arch-linux-gcc
to compile your application. In order to
setup this staging directory, it first removes it, and then it creates
various subdirectories and symlinks inside it.
The toolchain generated by the Buildroot by default is located in
- build_ARCH/staging_dir/
. The simplest way to use it
- is to add build_ARCH/staging_dir/bin/
to your PATH
+ staging_dir_ARCH
. The simplest way to use it
+ is to add staging_dir_ARCH/bin/
to your PATH
environment variable, and then to use
arch-linux-gcc
, arch-linux-objdump
,
arch-linux-ld
, etc.
~/buildroot/
) :
-export PATH=$PATH:~/buildroot/build_mipsel/staging_dir/bin/ +export PATH=$PATH:~/buildroot/staging_dir_mipsel/bin/
Then you can simply do :
@@ -324,9 +324,9 @@ mipsel-linux-uclibc-gcc -o foo foo.c uClibc toolchain outside of buildrootBy default, the cross-compilation toolchain is generated inside
- build_ARCH/staging_dir/
. But sometimes, it may be useful to
+ staging_dir_ARCH/
. But sometimes, it may be useful to
install it somewhere else, so that it can be used to compile other programs
- or by other users. Moving the build_ARCH/staging_dir/
+ or by other users. Moving the staging_dir_ARCH/
directory elsewhere is not possible, because they are some hardcoded
paths in the toolchain configuration.
Build options ->
Toolchain and header file location
, which defaults to
- $(BUILD_DIR)/staging_dir/
.
+ staging_dir_ARCH/
.
- 1 ############################################################# - 2 # foo - 3 ############################################################# - 4 PKG_NAME:=foo - 5 PKG_VERSION:=1.0 - 6 PKG_RELEASE:=1 - 7 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz - 8 PKG_SITE:=http://www.foosoftware.org/downloads - 9 PKG_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) - 10 PKG_IPK:=$(PACKAGE_DIR)/$(PKG_NAME)_$(PKG_VERSION)-$(PKG_RELEASE)_$(ARCH).ipk - 11 PKG_IPK_DIR:=$(PKG_DIR)/ipkg - 12 - 13 $(DL_DIR)/$(PKG_SOURCE): - 14 $(WGET) -P $(DL_DIR) $(PKG_SITE)/$(PKG_SOURCE) - 15 - 16 $(PKG_DIR)/.source: $(DL_DIR)/$(PKG_SOURCE) - 17 zcat $(DL_DIR)/$(PKG_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) - - 18 touch $(PKG_DIR)/.source - 19 - 20 $(PKG_DIR)/.configured: $(PKG_DIR)/.source - 21 (cd $(PKG_DIR); \ - 22 $(TARGET_CONFIGURE_OPTS) \ - 23 CFLAGS="$(TARGET_CFLAGS)" \ - 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 $(PKG_DIR)/.configured; - 32 - 33 $(PKG_DIR)/foo $(PKG_DIR)/.configured - 34 $(MAKE) CC=$(TARGET_CC) -C $(PKG_DIR) - 35 - 36 $(PKG_IPK): $(PKG_DIR)/$(PKG_BINARY) - 37 $(SCRIPT_DIR)/make-ipkg-dir.sh $(PKG_IPK_DIR) $(PKG_NAME).control $(PKG_VERSION)-$(PKG_RELEASE) $(ARCH) - 38 $(MAKE) prefix=$(PKG_IPK_DIR)/usr -C $(PKG_DIR) install - 39 rm -Rf $(PKG_IPK_DIR)/usr/man - 40 $(IPKG_BUILD) $(PKG_IPK_DIR) $(PACKAGE_DIR) - 41 - 42 $(IPKG_STATE_DIR)/info/$(PKG_NAME).list: $(PKG_IPK) - 43 $(IPKG) install $(PKG_IPK) - 44 - 45 prepare: $(PKG_DIR)/.source - 46 compile: $(PKG_IPK) - 47 install: $(IPKG_STATE_DIR)/info/$(PKG_NAME).list - 48 clean: - 49 rm -rf $(PKG_DIR) - 50 rm -f $(PKG_IPK) + 1 # $Id$ + 2 + 3 PKG_NAME:=foo + 4 PKG_VERSION:=1.0 + 5 PKG_RELEASE:=1 + 6 PKG_MD5SUM:=4584f226523776a3cdd2fb6f8212ba8d + 7 + 8 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz + 9 PKG_SOURCE_URL:=http://www.foosoftware.org/downloads + 10 PKG_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) + 11 PKG_IPK:=$(PACKAGE_DIR)/$(PKG_NAME)_$(PKG_VERSION)-$(PKG_RELEASE)_$(ARCH).ipk + 12 PKG_IPK_DIR:=$(PKG_DIR)/ipkg + 13 + 14 $(DL_DIR)/$(PKG_SOURCE): + 15 $(SCRIPT_DIR)/download.pl $(DL_DIR) $(PKG_SOURCE) $(PKG_MD5SUM) $(PKG_SOURCE_URL) + 16 + 17 $(PKG_DIR)/.source: $(DL_DIR)/$(PKG_SOURCE) + 18 zcat $(DL_DIR)/$(PKG_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) - + 19 touch $(PKG_DIR)/.source + 20 + 21 $(PKG_DIR)/.configured: $(PKG_DIR)/.source + 22 (cd $(PKG_DIR); \ + 23 $(TARGET_CONFIGURE_OPTS) \ + 24 CFLAGS="$(TARGET_CFLAGS)" \ + 25 ./configure \ + 26 --target=$(GNU_TARGET_NAME) \ + 27 --host=$(GNU_TARGET_NAME) \ + 28 --build=$(GNU_HOST_NAME) \ + 29 --prefix=/usr \ + 30 --sysconfdir=/etc \ + 31 ); + 32 touch $(PKG_DIR)/.configured; + 33 + 34 $(PKG_DIR)/foo $(PKG_DIR)/.configured + 35 $(MAKE) CC=$(TARGET_CC) -C $(PKG_DIR) + 36 + 37 $(PKG_IPK): $(PKG_DIR)/$(PKG_BINARY) + 38 $(SCRIPT_DIR)/make-ipkg-dir.sh $(PKG_IPK_DIR) $(PKG_NAME).control $(PKG_VERSION)-$(PKG_RELEASE) $(ARCH) + 39 $(MAKE) prefix=$(PKG_IPK_DIR)/usr -C $(PKG_DIR) install + 40 rm -Rf $(PKG_IPK_DIR)/usr/man + 41 $(IPKG_BUILD) $(PKG_IPK_DIR) $(PACKAGE_DIR) + 42 + 43 $(IPKG_STATE_DIR)/info/$(PKG_NAME).list: $(PKG_IPK) + 44 $(IPKG) install $(PKG_IPK) + 45 + 46 prepare: $(PKG_DIR)/.source + 47 compile: $(PKG_IPK) + 48 install: $(IPKG_STATE_DIR)/info/$(PKG_NAME).list + 49 clean: + 50 rm -rf $(PKG_DIR) + 51 rm -f $(PKG_IPK)
First of all, this Makefile example works for a single
@@ -485,7 +486,7 @@ foo-compile: bar-compile
the other Makefile
files in the package
directory.
At lines 4-11, a couple of useful variables are defined :
+At lines 3-12, a couple of useful variables are defined :
PKG_NAME
: The package name, e.g. foo.PKG_RELEASE
: The release number that will be
appended to the version number of your ipkg package.
+ PKG_MD5SUM
: The md5sum of the software archive.
+
PKG_SOURCE
: The name of the tarball of
your package on the download website of FTP site. As you can see
PKG_NAME
and PKG_VERSION
are used.PKG_SITE
: The HTTP or FTP site from which
- the archive is downloaded. It must include the complete
+ PKG_SOURCE_URL
: Space separated list of the HTTP
+ or FTP sites from which the archive is downloaded. It must include the complete
path to the directory where FOO_SOURCE
can be
found.Lines 13-14 defines a target that downloads the tarball from +
Lines 14-15 defines a target that downloads the tarball from
the remote site to the download directory
(DL_DIR
).
Lines 16-18 defines a target and associated rules that +
Lines 17-19 defines 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 (line - 13-14) is called before executing the rules of the current + 14-15) is called before executing the rules of the current target. Uncompressing is followed by touching a hidden file to mark the software has having been uncompressed. This trick is used everywhere in Buildroot Makefile to split steps (download, uncompress, configure, compile, install) while still having correct dependencies.
-Lines 20-31 defines a target and associated rules that +
Lines 21-32 defines a target and associated rules that
configures 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 it, it basically runs the
@@ -540,14 +543,14 @@ foo-compile: bar-compile
filesystem. Finally it creates a .configured
file to
mark the software as configured.
Lines 33-34 defines a target and a rule that compiles the +
Lines 34-35 defines a target and a rule that compiles 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-40 defines a target and associated rules that create +
Lines 37-41 defines a target and associated rules that create
the ipkg package which can optionally be embedded into
the resulting firmware image. It depends on the binary file in
the source directory, to make sure the software has been compiled.
@@ -563,10 +566,10 @@ foo-compile: bar-compile
removed to save space.
Finally IPKG_BUILD
is called to create the package.
Line 42 and 43 define the installation target of your package, +
Line 43 and 44 define the installation target of your package, which will embed the software into the target filesystem.
-Lines 45-50 define the main targets that the Makefile in the +
Lines 46-51 define the main targets that the Makefile in the
package
dir calls.
prepare
: Download and unpack the source