X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/143496aa4d31c79178027f9838e8cb3a659969f5..f776f63b764e970f2298bf09bd7b4f9902af4799:/docs/build.tex diff --git a/docs/build.tex b/docs/build.tex index 03bd1a967..54d31c582 100644 --- a/docs/build.tex +++ b/docs/build.tex @@ -65,25 +65,25 @@ There are four key directories in the base: \texttt{tools} and \texttt{toolchain} refer to common tools which will be used to build the firmware image, the compiler, and the C library. -The result of this is three new directories, \texttt{tool\_build}, which is a temporary -directory for building the target independent tools, \texttt{toolchain\_build\_\textit{}} +The result of this is three new directories, \texttt{build\_dir/host}, which is a temporary +directory for building the target independent tools, \texttt{build\_dir/toolchain-\textit{}*} which is used for building the toolchain for a specific architecture, and -\texttt{staging\_dir\_\textit{}} where the resulting toolchain is installed. +\texttt{staging\_dir/toolchain-\textit{}*} where the resulting toolchain is installed. You will not need to do anything with the toolchain directory unless you intend to add a new version of one of the components above. \begin{itemize} - \item \texttt{tool\_build} - \item \texttt{toolchain\_build\_\textit{}} + \item \texttt{build\_dir/host} + \item \texttt{build\_dir/toolchain-\textit{}*} \end{itemize} \texttt{package} is for exactly that -- packages. In an OpenWrt firmware, almost everything is an \texttt{.ipk}, a software package which can be added to the firmware to provide new features or removed to save space. Note that packages are also maintained outside of the main -trunk and can be obtained from subversion at the following location: +trunk and can be obtained from subversion using the package feeds system: \begin{Verbatim} -$ svn checkout https://svn.openwrt.org/openwrt/packages packages +$ ./scripts/feeds update \end{Verbatim} Those packages can be used to extend the functionality of the build system and need to be @@ -91,15 +91,17 @@ symlinked into the main trunk. Once you do that, the packages will show up in th configuration. From kamikaze you would do something like this: \begin{Verbatim} -$ ls -kamikaze packages -$ ln -s packages/net/nmap kamikaze/package/nmap +$ ./scripts/feeds search nmap +Search results in feed 'packages': +nmap Network exploration and/or security auditing utility + +$ ./scripts/feeds install nmap \end{Verbatim} To include all packages, issue the following command: \begin{Verbatim} -$ ln -s packages/*/* kamikaze/package/ +$ make package/symlinks \end{Verbatim} \texttt{target} refers to the embedded platform, this contains items which are specific to @@ -108,12 +110,12 @@ directory which is broken down by platform \textit{} and contains the patc kernel, profile config, for a particular platform. There's also the "\texttt{target/image}" directory which describes how to package a firmware for a specific platform. -Both the target and package steps will use the directory "\texttt{build\_\textit{}}" +Both the target and package steps will use the directory "\texttt{build\_dir/\textit{}}" as a temporary directory for compiling. Additionally, anything downloaded by the toolchain, target or package steps will be placed in the "\texttt{dl}" directory. \begin{itemize} - \item \texttt{build\_\textit{}} + \item \texttt{build\_dir/\textit{}} \item \texttt{dl} \end{itemize} @@ -171,7 +173,7 @@ of noise caused by the compile output. To see the full output, run the command "\texttt{make V=99}". During the build process, buildroot will download all sources to the "\texttt{dl}" -directory and will start patching and compiling them in the "\texttt{build\_\textit{}}" +directory and will start patching and compiling them in the "\texttt{build\_dir/\textit{}}" directory. When finished, the resulting firmware will be in the "\texttt{bin}" directory and packages will be in the "\texttt{bin/packages}" directory. @@ -202,12 +204,6 @@ simplifies the entire ordeal. Here for example, is \texttt{package/bridge/Makefile}: \begin{Verbatim}[frame=single,numbers=left] -# -# Copyright (C) 2006 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# # $Id: Makefile 5624 2006-11-23 00:29:07Z nbd $ include $(TOPDIR)/rules.mk @@ -229,12 +225,14 @@ define Package/bridge SECTION:=net CATEGORY:=Base system TITLE:=Ethernet bridging configuration utility - DESCRIPTION:=\ - Manage ethernet bridging: a way to connect networks together to \\\ - form a larger network. URL:=http://bridge.sourceforge.net/ endef +define Package/bridge/description + Manage ethernet bridging: + a way to connect networks together to form a larger network. +endef + define Build/Configure $(call Build/Configure/Default, \ --with-linux-headers="$(LINUX_DIR)" \ @@ -346,6 +344,19 @@ directly as the Nth argument to \texttt{BuildPackage}. Contains all environment variables that are passed to the make command \end{itemize} +\textbf{\texttt{Build/InstallDev} (optional):} \\ + If your package provides a library that needs to be made available to other packages, + you can use the \texttt{Build/InstallDev} template to copy it into the staging directory + which is used to collect all files that other packages might depend on at build time. + When it is called by the build system, two parameters are passed to it. \texttt{\$(1)} points to + the regular staging dir, typically \texttt{staging\_dir/\textit{ARCH}}, while \texttt{\$(2)} points + to \texttt{staging\_dir/host}. The host staging dir is only used for binaries, which are + to be executed or linked against on the host and its \texttt{bin/} subdirectory is included + in the \texttt{PATH} which is passed down to the build system processes. + Please use \texttt{\$(1)} and \texttt{\$(2)} here instead of the build system variables + \texttt{\$(STAGING\_DIR)} and \texttt{\$(STAGING\_DIR\_HOST)}, because the build system behavior + when staging libraries might change in the future to include automatic uninstallation. + \textbf{\texttt{Package/\textit{}/install}:} \\ A set of commands to copy files out of the compiled source and into the ipkg which is represented by the \texttt{\$(1)} directory. Note that there are currently @@ -384,12 +395,6 @@ For external kernel modules, you can add them to the build system just like if t Here for instance the Makefile for the I2C subsytem kernel modules : \begin{Verbatim}[frame=single,numbers=left] -# -# Copyright (C) 2006 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# # $Id $ I2CMENU:=I2C Bus @@ -398,8 +403,7 @@ define KernelPackage/i2c-core TITLE:=I2C support DESCRIPTION:=Kernel modules for i2c support SUBMENU:=$(I2CMENU) - KCONFIG:=$(CONFIG_I2C_CORE) \ - $(CONFIG_I2C_DEV) + KCONFIG:=CONFIG_I2C_CORE CONFIG_I2C_DEV FILES:=$(MODULES_DIR)/kernel/drivers/i2c/*.$(LINUX_KMOD_SUFFIX) AUTOLOAD:=$(call AutoLoad,50,i2c-core i2c-dev) endef @@ -459,14 +463,14 @@ shortcuts you can take. Instead of waiting for make to get to your package, you run one of the following: \begin{itemize} - \item \texttt{make package/\textit{}-clean V=99} - \item \texttt{make package/\textit{}-install V=99} + \item \texttt{make package/\textit{}/clean V=99} + \item \texttt{make package/\textit{}/install V=99} \end{itemize} -Another nice trick is that if the source directory under \texttt{build\_\textit{}} +Another nice trick is that if the source directory under \texttt{build\_dir/\textit{}} is newer than the package directory, it won't clobber it by unpacking the sources again. If you were working on a patch you could simply edit the sources under the -\texttt{build\_\textit{}/\textit{}} directory and run the install command above, +\texttt{build\_dir/\textit{}/\textit{}} directory and run the install command above, when satisfied, copy the patched sources elsewhere and diff them with the unpatched sources. A warning though - if you go modify anything under \texttt{package/\textit{}} it will remove the old sources and unpack a fresh copy. @@ -474,8 +478,8 @@ it will remove the old sources and unpack a fresh copy. Other useful targets include: \begin{itemize} - \item \texttt{make package/\textit{}-prepare V=99} - \item \texttt{make package/\textit{}-compile V=99} - \item \texttt{make package/\textit{}-configure V=99} + \item \texttt{make package/\textit{}/prepare V=99} + \item \texttt{make package/\textit{}/compile V=99} + \item \texttt{make package/\textit{}/configure V=99} \end{itemize}