X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/87021732394b57c922a035f315c29af4b001a58b..2e636bda64e3e8118acfbc32308138044cf393b8:/openwrt/docs/buildroot-documentation.html?ds=sidebyside diff --git a/openwrt/docs/buildroot-documentation.html b/openwrt/docs/buildroot-documentation.html index 91becd885..48b05728e 100644 --- a/openwrt/docs/buildroot-documentation.html +++ b/openwrt/docs/buildroot-documentation.html @@ -264,11 +264,11 @@ is your architecture). This is where the cross compilation toolchain will be compiled. -
  • Setup the staging directory (build_ARCH/staging_dir/ by +
  • Setup the staging directory (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.
  • @@ -292,8 +292,8 @@ use the toolchain that was generated by the Buildroot.

    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.

    @@ -304,7 +304,7 @@ ~/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 buildroot

    By 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.

    @@ -334,7 +334,7 @@ mipsel-linux-uclibc-gcc -o foo foo.c you can configure Buildroot to generate it elsewhere using the option of the configuration tool : Build options -> Toolchain and header file location, which defaults to - $(BUILD_DIR)/staging_dir/.

    + staging_dir_ARCH/.

    Location of downloaded packages

    @@ -427,56 +427,57 @@ foo-compile: bar-compile afterwards.

    -     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  include $(TOPDIR)/rules.mk
    +     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)/$(PKG_NAME): $(PKG_DIR)/.configured
    +    35          $(MAKE) CC=$(TARGET_CC) -C $(PKG_DIR)
    +    36
    +    37  $(PKG_IPK): $(PKG_DIR)/$(PKG_NAME)
    +    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 :

    -

    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.