# # Copyright (C) 2006-2011 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # # Main makefile for the host tools # curdir:=tools # subdirectories to descend into tools-y := ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) BUILD_TOOLCHAIN := y ifdef CONFIG_GCC_USE_GRAPHITE BUILD_ISL = y endif endif ifneq ($(CONFIG_SDK)$(CONFIG_PACKAGE_kmod-b43)$(CONFIG_PACKAGE_b43legacy-firmware)$(CONFIG_BRCMSMAC_USE_FW_FROM_WL),) BUILD_B43_TOOLS = y endif tools-$(BUILD_TOOLCHAIN) += gmp mpfr mpc libelf expat tools-y += m4 libtool autoconf automake flex bison pkg-config mklibs zlib tools-y += sstrip make-ext4fs e2fsprogs mtd-utils mkimage tools-y += firmware-utils patch-image quilt padjffs2 tools-y += mm-macros missing-macros cmake scons bc findutils gengetopt patchelf tools-y += mtools dosfstools libressl tools-$(CONFIG_TARGET_orion_generic) += wrt350nv2-builder upslug2 tools-$(CONFIG_TARGET_x86) += qemu tools-$(CONFIG_TARGET_mxs) += elftosb sdimage tools-$(CONFIG_TARGET_ar71xx) += lzma-old tools-$(CONFIG_TARGET_ar71xx)$(CONFIG_TARGET_ath79) += squashfs tools-$(CONFIG_USES_MINOR) += kernel2minor tools-y += lzma squashfskit4 zip tools-$(BUILD_B43_TOOLS) += b43-tools tools-$(BUILD_ISL) += isl tools-$(CONFIG_USE_SPARSE) += sparse tools-$(CONFIG_TARGET_apm821xx)$(CONFIG_TARGET_gemini) += genext2fs tools-$(CONFIG_TARGET_tegra) += cbootimage cbootimage-configs # builddir dependencies $(curdir)/bison/compile := $(curdir)/flex/compile $(curdir)/flex/compile := $(curdir)/libtool/compile $(curdir)/libtool/compile := $(curdir)/m4/compile $(curdir)/autoconf/compile $(curdir)/automake/compile $(curdir)/missing-macros/compile $(curdir)/squashfs/compile := $(curdir)/lzma-old/compile $(curdir)/squashfskit4/compile := $(curdir)/xz/compile $(curdir)/zlib/compile $(curdir)/quilt/compile := $(curdir)/autoconf/compile $(curdir)/findutils/compile $(curdir)/autoconf/compile := $(curdir)/m4/compile $(curdir)/automake/compile := $(curdir)/m4/compile $(curdir)/autoconf/compile $(curdir)/pkg-config/compile $(curdir)/xz/compile $(curdir)/gmp/compile := $(curdir)/libtool/compile $(curdir)/mpc/compile := $(curdir)/mpfr/compile $(curdir)/gmp/compile $(curdir)/mpfr/compile := $(curdir)/gmp/compile $(curdir)/mtd-utils/compile := $(curdir)/libtool/compile $(curdir)/e2fsprogs/compile $(curdir)/zlib/compile $(curdir)/mklibs/compile := $(curdir)/libtool/compile $(curdir)/qemu/compile := $(curdir)/e2fsprogs/compile $(curdir)/zlib/compile $(curdir)/upslug2/compile := $(curdir)/libtool/compile $(curdir)/mm-macros/compile := $(curdir)/libtool/compile $(curdir)/missing-macros/compile := $(curdir)/autoconf/compile $(curdir)/e2fsprogs/compile := $(curdir)/libtool/compile $(curdir)/libelf/compile := $(curdir)/libtool/compile $(curdir)/sdcc/compile := $(curdir)/bison/compile $(curdir)/b43-tools/compile := $(curdir)/bison/compile $(curdir)/padjffs2/compile := $(curdir)/findutils/compile $(curdir)/isl/compile := $(curdir)/gmp/compile $(curdir)/bc/compile := $(curdir)/bison/compile $(curdir)/findutils/compile := $(curdir)/bison/compile $(curdir)/gengetopt/compile := $(curdir)/libtool/compile $(curdir)/patchelf/compile := $(curdir)/libtool/compile $(curdir)/dosfstools/compile := $(curdir)/autoconf/compile $(curdir)/automake/compile $(curdir)/libressl/compile := $(curdir)/pkg-config/compile $(curdir)/mkimage/compile += $(curdir)/libressl/compile $(curdir)/firmware-utils/compile += $(curdir)/libressl/compile $(curdir)/zlib/compile $(curdir)/cmake/compile += $(curdir)/libressl/compile $(curdir)/zlib/compile := $(curdir)/cmake/compile $(curdir)/wrt350nv2-builder/compile := $(curdir)/zlib/compile $(curdir)/lzma-old/compile := $(curdir)/zlib/compile $(curdir)/make-ext4fs/compile := $(curdir)/zlib/compile $(curdir)/cbootimage/compile += $(curdir)/automake/compile ifneq ($(HOST_OS),Linux) $(curdir)/squashfskit4/compile += $(curdir)/coreutils/compile tools-y += coreutils endif ifneq ($(CONFIG_CCACHE)$(CONFIG_SDK),) $(foreach tool, $(filter-out xz patch,$(tools-y)), $(eval $(curdir)/$(tool)/compile += $(curdir)/ccache/compile)) tools-y += ccache endif # in case there is no patch tool on the host we need to make patch tool a # dependency for tools which have patches directory $(foreach tool, $(tools-y), $(if $(wildcard $(curdir)/$(tool)/patches),$(eval $(curdir)/$(tool)/compile += $(curdir)/patch/compile))) $(foreach tool, $(filter-out xz,$(tools-y)), $(eval $(curdir)/$(tool)/compile += $(curdir)/xz/compile)) # make any tool depend on tar, xz and patch to ensure that archives can be unpacked and patched properly tools-core := tar xz patch $(foreach tool, $(tools-y), $(eval $(curdir)/$(tool)/compile += $(patsubst %,$(curdir)/%/compile,$(tools-core)))) tools-y += $(tools-core) # make core tools depend on sed and flock $(foreach tool, $(filter-out xz,$(tools-core)), $(eval $(curdir)/$(tool)/compile += $(curdir)/sed/compile)) $(curdir)/xz/compile += $(curdir)/flock/compile $(curdir)/sed/compile := $(curdir)/flock/compile $(curdir)/xz/compile tools-y += flock sed $(curdir)/autoremove := 1 $(curdir)/builddirs := $(tools-y) $(tools-dep) $(tools-) $(curdir)/builddirs-default := $(tools-y) ifdef CHECK_ALL $(curdir)/builddirs-check:=$($(curdir)/builddirs) $(curdir)/builddirs-download:=$($(curdir)/builddirs) endif ifndef DUMP_TARGET_DB define PrepareStaging @for dir in $(1); do ( \ $(if $(QUIET),,set -x;) \ mkdir -p "$$dir"; \ cd "$$dir"; \ mkdir -p bin lib include stamp; \ ); done endef # pre
\subsection{How to contribute}
OpenWrt is constantly being improved.  We'd like as many people to contribute
to this as we can get. If you find a change useful, by all means try to get
it incorporated into the project. This should improve OpenWrt and it should
help carry your changes forward into future versions

This section tries to lay out a procedure to enable people to submit patches
in a way that is most effective for all concerned.

It is important to do all these steps repeatedly:

\begin{itemize}
	\item \textit{listen} to what other people think.
	\item \textit{talk} explaining what problem you are addressing and your
		proposed solution.
	\item \textit{do} write useful patches including documentation.
    \item \textit{test. test. test.}
\end{itemize}

\subsection{Where to listen and talk}

\begin{itemize}
	\item google to find things related to your problem
	\item Mailing lists: \href{http://lists.openwrt.org/}{http://lists.openwrt.org/}
	\item Wiki: check the wiki: \href{http://wiki.openwrt.org/OpenWrtDocs}{http://wiki.openwrt.org/OpenWrtDocs}
	\item Forum: \href{http://forum.openwrt.org/}{http://forum.openwrt.org/}
	\item IRC: \texttt{irc.freenode.net}, channels \texttt{\#openwrt} and 
		\texttt{\#openwrt-devel}
	\item TRAC: \href{https://dev.openwrt.org/}{https://dev.openwrt.org/} the issue/bug/change tracking system
\end{itemize}

It is often best to document what you are doing before you do it.  The process
of documentation often exposes possible improvements.  Keep your documentation
up to date.

\subsection{Patch Submission Process}
\begin{enumerate}
	\item Use git or svn to create a patch. Creating patches manually with 
		\textit{diff -urN} also works, but is usually unnecessary.
	\item Send a mail to openwrt-devel@lists.openwrt.org with the following contents:
	\begin{enumerate}
		\item \texttt{[PATCH] <short description>} in the Subject, followed by:
		\item (optional) a longer description of your patch in the message body
        \item \texttt{Signed-off-by: Your name <your@email.address>}
		\item Your actual patch, inline, not word wrapped or whitespace mangled. 
	\end{enumerate}
	\item Please read \href{http://kerneltrap.org/Linux/Email\_Clients\_and\_Patches}{http://kerneltrap.org/Linux/Email\_Clients\_and\_Patches}
		to find out how to make sure your email client doesn't destroy your patch.
	\item Please use your real name and email address in the \texttt{Signed-off-by}
		line, following the same guidelines as in the \href{http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/SubmittingPatches;h=681e2b36195c98ea5271b76383b3a574b190b04f;hb=HEAD}{Linux Kernel patch submission guidelines}
	\item Example of a properly formatted patch submission: \\
	\href{http://lists.openwrt.org/pipermail/openwrt-devel/2007-November/001334.html}{http://lists.openwrt.org/pipermail/openwrt-devel/2007-November/001334.html}
\end{enumerate}