Changeset 1770 in MondoRescue for branches/stable/mindi-busybox/Makefile


Ignore:
Timestamp:
Nov 6, 2007, 11:01:53 AM (16 years ago)
Author:
Bruno Cornec
Message:
  • Better output for mindi-busybox revision
  • Remove dummy file created on NFS - report from Arnaud Tiger <arnaud.tiger_at_hp.com>
  • strace useful for debug
  • fix new versions for pb (2.0.0 for mindi and 1.7.2 for mindi-busybox)
  • fix build process for mindi-busybox + options used in that version (dd for label-partitions-as-necessary)
  • fix typo in label-partitions-as-necessary which doesn't seem to work
  • Update to busybox 1.7.2
  • perl is now required at restore time to support uuid swap partitions (and will be used for many other thigs

in the future for sure)

  • next mindi version will be 2.0.0 due to all the changes made in it (udev may break working distros)
  • small optimization in mindi on keyboard handling (one single find instead of multiple)
  • better interaction for USB device when launching mindi manually
  • attempt to automatically guess block disk size for ramdisk
  • fix typos in bkphw
  • Fix the remaining problem with UUID support for swap partitions
  • Updates mondoarchive man page for USB support
  • Adds preliminary Hardware support to mindi (Proliant SSSTK)
  • Tries to add udev support also for rhel4
  • Fix UUID support which was still broken.
  • Be conservative in test for the start-nfs script
  • Update config file for mindi-busybox for 1.7.2 migration
  • Try to run around a busybox bug (1.2.2 pb on inexistant links)
  • Add build content for mindi-busybox in pb
  • Remove distributions content for mindi-busybox
  • Fix a warning on inexistant raidtab
  • Solve problem on tmpfs in restore init (Problem of inexistant symlink and busybox)
  • Create MONDO_CACHE and use it everywhere + creation at start
  • Really never try to eject a USB device
  • Fix a issue with &> usage (replaced with 1> and 2>)
  • Adds magic file to depllist in order to have file working + ldd which helps for debugging issues
  • tty modes correct to avoid sh error messages
  • Use ext3 normally and not ext2 instead
  • USB device should be corrected after reading (take 1st part)
  • Adds a mount_USB_here function derived from mount_CDROM_here
  • usb detection place before /dev detection in device name at restore time
  • Fix when restoring from USB: media is asked in interactive mode
  • Adds USB support for mondorestore
  • mount_cdrom => mount_media
  • elilo.efi is now searched throughout /boot/efi and not in a fixed place as there is no standard
  • untar-and-softlink => untar (+ interface change)
  • suppress useless softlinks creation/removal in boot process
  • avoids udevd messages on groups
  • Increase # of disks to 99 as in mindi at restore time (should be a conf file parameter)
  • skip existing big file creation
  • seems to work correctly for USB mindi boot
  • Adds group and tty link to udev conf
  • Always load usb-torage (even 2.6) to initiate USB bus discovery
  • Better printing of messages
  • Attempt to fix a bug in supporting OpenSusE 10.3 kernel for initramfs (mindi may now use multiple regex for kernel initrd detection)
  • Links were not correctly done as non relative for modules in mindi
  • exclusion of modules denied now works
  • Also create modules in their ordinary place, so that classical modprobe works + copy modules.dep
  • Fix bugs for DENY_MODS handling
  • Add device /dev/console for udev
  • ide-generic should now really be excluded
  • Fix a bug in major number for tty
  • If udev then adds modprobe/insmod to rootfs
  • tty0 is also cretaed with udev
  • ide-generic put rather in DENY_MODS
  • udevd remove from deplist s handled in mindi directly
  • better default for mindi when using --usb
  • Handles dynamically linked busybox (in case we want to use it soon ;-)
  • Adds fixed devices to create for udev
  • ide-generic should not be part of the initrd when using libata v2
  • support a dynamically linked udev (case on Ubuntu 7.10 and Mandriva 2008.0 so should be quite generic) This will give incitation to move to dyn. linked binaries in the initrd which will help for other tasks (ia6 4)
  • Improvement in udev support (do not use cl options not available in busybox)
  • Udev in mindi
    • auto creation of the right links at boot time with udev-links.conf(from Mandriva 2008.0)
    • rework startup of udev as current makes kernel crash (from Mandriva 2008.0)
    • add support for 64 bits udev
  • Try to render MyInsmod silent at boot time
  • Adds udev support (mandatory for newest distributions to avoid remapping of devices in a different way as on the original system)
  • We also need vaft format support for USB boot
  • Adds libusual support (Ubuntu 7.10 needs it for USB)
  • Improve Ubuntu/Debian keyboard detection and support
  • pbinit adapted to new pb (0.8.10). Filtering of docs done in it
  • Suppress some mondo warnings and errors on USB again
  • Tries to fix lack of files in deb mindi package
  • Verify should now work for USB devices
  • More log/mesages improvement for USB support
  • - Supress g_erase_tmpdir_and_scratchdir
  • Improve some log messages for USB support
  • Try to improve install in mindi to avoid issues with isolinux.cfg not installed vene if in the pkg :-(
  • Improve mindi-busybox build
  • In conformity with pb 0.8.9
  • Add support for Ubuntu 7.10 in build process
  • Add USB Key button to Menu UI (CD streamer removed)
  • Attempt to fix error messages on tmp/scratch files at the end by removing those dir at the latest possible.
  • Fix a bug linked to the size of the -E param which could be used (Arnaud Tiger/René Ribaud).
  • Integrate ~/.pbrc content into mondorescue.pb (required project-builder >= 0.8.7)
  • Put mondorescue in conformity with new pb filtering rules
  • Add USB support at restore time (no test done yet). New start-usb script PB varibale added where useful
  • Unmounting USB device before removal of temporary scratchdir
  • Stil refining USB copy back to mondo (one command was not executed)
  • No need to have the image subdor in the csratchdir when USB.
  • umount the USB partition before attempting to use it
  • Remove useless copy from mindi to mondo at end of USB handling

(risky merge, we are raising the limits of 2 diverging branches. The status of stable is not completely sure as such. Will need lots of tests, but it's not yet done :-()
(merge -r1692:1769 $SVN_M/branches/2.2.5)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/stable/mindi-busybox/Makefile

    r821 r1770  
    1 # Makefile for busybox
    2 #
    3 # Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
    4 #
    5 # Licensed under GPLv2, see the file LICENSE in this tarball for details.
    6 #
    7 
    8 # You shouldn't have to edit anything in this file for configuration
    9 # purposes, try "make help" or read http://busybox.net/FAQ.html.
    10 
    11 .PHONY: dummy subdirs release distclean clean config oldconfig menuconfig \
    12         tags check test depend dep buildtree hosttools _all checkhelp \
    13         sizes bloatcheck baseline objsizes
    14 
    15 noconfig_targets := menuconfig config oldconfig randconfig hosttools \
    16     defconfig allyesconfig allnoconfig allbareconfig \
    17     clean distclean help \
    18     release tags
    19 
    20 nocheck_targets := clean distclean help release tags
    21 
    22 # the toplevel sourcedir
    23 ifndef top_srcdir
    24 top_srcdir=$(CURDIR)
    25 endif
    26 # toplevel directory of the object-tree
    27 ifndef top_builddir
    28 top_builddir=$(CURDIR)
    29 endif
    30 
    31 export srctree=$(top_srcdir)
    32 vpath %/Config.in $(srctree)
    33 
    34 DIRS:=applets archival archival/libunarchive coreutils console-tools \
    35     debianutils editors findutils init miscutils modutils networking \
    36     networking/libiproute networking/udhcp procps loginutils shell \
    37     sysklogd util-linux e2fsprogs libpwdgrp coreutils/libcoreutils libbb
    38 
    39 SRC_DIRS:=$(patsubst %,$(top_srcdir)/%,$(DIRS))
    40 
    41 # That's our default target when none is given on the command line
    42 _all:
    43 
    44 CONFIG_CONFIG_IN = $(top_srcdir)/Config.in
    45 
    46 ifeq ($(BUILD_SRC),)
     1VERSION = 1
     2PATCHLEVEL = 7
     3SUBLEVEL = 2
     4EXTRAVERSION = -rPBREV
     5NAME = Unnamed
     6
     7# *DOCUMENTATION*
     8# To see a list of typical targets execute "make help"
     9# More info can be located in ./README
     10# Comments in this file are targeted only to the developer, do not
     11# expect to learn how to build the kernel reading this file.
     12
     13# Do not print "Entering directory ..."
     14MAKEFLAGS += --no-print-directory
     15
     16# We are using a recursive build, so we need to do a little thinking
     17# to get the ordering right.
     18#
     19# Most importantly: sub-Makefiles should only ever modify files in
     20# their own directory. If in some directory we have a dependency on
     21# a file in another dir (which doesn't happen often, but it's often
     22# unavoidable when linking the built-in.o targets which finally
     23# turn into busybox), we will call a sub make in that other dir, and
     24# after that we are sure that everything which is in that other dir
     25# is now up to date.
     26#
     27# The only cases where we need to modify files which have global
     28# effects are thus separated out and done before the recursive
     29# descending is started. They are now explicitly listed as the
     30# prepare rule.
     31
     32# To put more focus on warnings, be less verbose as default
     33# Use 'make V=1' to see the full commands
     34
     35ifdef V
     36  ifeq ("$(origin V)", "command line")
     37    KBUILD_VERBOSE = $(V)
     38  endif
     39endif
     40ifndef KBUILD_VERBOSE
     41  KBUILD_VERBOSE = 0
     42endif
     43
     44# Call sparse as part of compilation of C files
     45# Use 'make C=1' to enable sparse checking
     46
     47ifdef C
     48  ifeq ("$(origin C)", "command line")
     49    KBUILD_CHECKSRC = $(C)
     50  endif
     51endif
     52ifndef KBUILD_CHECKSRC
     53  KBUILD_CHECKSRC = 0
     54endif
     55
     56# Use make M=dir to specify directory of external module to build
     57# Old syntax make ... SUBDIRS=$PWD is still supported
     58# Setting the environment variable KBUILD_EXTMOD take precedence
     59ifdef SUBDIRS
     60  KBUILD_EXTMOD ?= $(SUBDIRS)
     61endif
     62ifdef M
     63  ifeq ("$(origin M)", "command line")
     64    KBUILD_EXTMOD := $(M)
     65  endif
     66endif
     67
     68
     69# kbuild supports saving output files in a separate directory.
     70# To locate output files in a separate directory two syntaxes are supported.
     71# In both cases the working directory must be the root of the kernel src.
     72# 1) O=
     73# Use "make O=dir/to/store/output/files/"
     74#
     75# 2) Set KBUILD_OUTPUT
     76# Set the environment variable KBUILD_OUTPUT to point to the directory
     77# where the output files shall be placed.
     78# export KBUILD_OUTPUT=dir/to/store/output/files/
     79# make
     80#
     81# The O= assignment takes precedence over the KBUILD_OUTPUT environment
     82# variable.
     83
     84
     85# KBUILD_SRC is set on invocation of make in OBJ directory
     86# KBUILD_SRC is not intended to be used by the regular user (for now)
     87ifeq ($(KBUILD_SRC),)
     88
     89# OK, Make called in directory where kernel src resides
     90# Do we want to locate output files in a separate directory?
    4791ifdef O
    4892  ifeq ("$(origin O)", "command line")
    49     BUILD_OUTPUT := $(O)
    50     top_builddir := $(O)
     93    KBUILD_OUTPUT := $(O)
    5194  endif
    52 else
    53 # If no alternate output-dir was specified, we build in cwd
    54 # We are using BUILD_OUTPUT nevertheless to make sure that we create
    55 # Rules.mak and the toplevel Makefile, in case they don't exist.
    56   BUILD_OUTPUT := $(top_builddir)
    57 endif
    58 
    59 # see if we are in verbose mode
    60 BUILD_VERBOSE :=
    61 ifdef V
    62   ifeq ("$(origin V)", "command line")
    63     BUILD_VERBOSE := $(V)
    64   endif
    65 endif
    66 ifdef VERBOSE
    67   ifeq ("$(origin VERBOSE)", "command line")
    68     BUILD_VERBOSE := $(VERBOSE)
    69   endif
    70 endif
    71 
    72 ifneq ($(strip $(BUILD_VERBOSE)),)
    73   export BUILD_VERBOSE
    74   CHECK_VERBOSE := -v
    75 # ARFLAGS+=v
    76 endif
    77 
    78 ifneq ($(strip $(HAVE_DOT_CONFIG)),y)
    79 # pull in settings early
    80 -include $(top_srcdir)/Rules.mak
    81 endif
    82 
    83 # All object directories.
    84 OBJ_DIRS := $(DIRS)
    85 all_tree := $(patsubst %,$(top_builddir)/%,$(OBJ_DIRS) scripts scripts/config include)
    86 all_tree: $(all_tree)
    87 $(all_tree):
    88     @mkdir -p "$@"
    89 
    90 ifneq ($(BUILD_OUTPUT),)
     95endif
     96
     97# That's our default target when none is given on the command line
     98PHONY := _all
     99_all:
     100
     101ifneq ($(KBUILD_OUTPUT),)
    91102# Invoke a second make in the output directory, passing relevant variables
    92 # Check that the output directory actually exists
    93 saved-output := $(BUILD_OUTPUT)
    94 BUILD_OUTPUT := $(shell cd $(BUILD_OUTPUT) && /bin/pwd)
    95 $(if $(wildcard $(BUILD_OUTPUT)),, \
     103# check that the output directory actually exists
     104saved-output := $(KBUILD_OUTPUT)
     105KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd)
     106$(if $(KBUILD_OUTPUT),, \
    96107     $(error output directory "$(saved-output)" does not exist))
    97108
    98 .PHONY: $(MAKECMDGOALS)
    99 
    100 $(filter-out _all,$(MAKECMDGOALS)) _all: $(BUILD_OUTPUT)/Rules.mak $(BUILD_OUTPUT)/Makefile all_tree
    101     $(Q)$(MAKE) -C $(BUILD_OUTPUT) \
    102     top_srcdir=$(top_srcdir) \
    103     top_builddir=$(top_builddir) \
    104     BUILD_SRC=$(top_srcdir) \
    105     -f $(CURDIR)/Makefile $@
    106 
    107 $(BUILD_OUTPUT)/Rules.mak:
    108     @echo > $@
    109     @echo top_srcdir=$(top_srcdir) >> $@
    110     @echo top_builddir=$(BUILD_OUTPUT) >> $@
    111     @echo include $(top_srcdir)/Rules.mak >> $@
    112 
    113 $(BUILD_OUTPUT)/Makefile:
    114     @echo > $@
    115     @echo top_srcdir=$(top_srcdir) >> $@
    116     @echo top_builddir=$(BUILD_OUTPUT) >> $@
    117     @echo BUILD_SRC='$$(top_srcdir)' >> $@
    118     @echo include '$$(BUILD_SRC)'/Makefile >> $@
     109PHONY += $(MAKECMDGOALS)
     110
     111$(filter-out _all,$(MAKECMDGOALS)) _all:
     112    $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
     113    KBUILD_SRC=$(CURDIR) \
     114    KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile $@
    119115
    120116# Leave processing to above invocation of make
    121117skip-makefile := 1
    122 endif # ifneq ($(BUILD_OUTPUT),)
    123 endif # ifeq ($(BUILD_SRC),)
    124 
     118endif # ifneq ($(KBUILD_OUTPUT),)
     119endif # ifeq ($(KBUILD_SRC),)
     120
     121# We process the rest of the Makefile if this is the final invocation of make
    125122ifeq ($(skip-makefile),)
    126123
    127 # We only need a copy of the Makefile for the config targets and reuse
    128 # the rest from the source directory, i.e. we do not cp ALL_MAKEFILES.
    129 scripts/config/Makefile: $(top_srcdir)/scripts/config/Makefile
    130     cp $< $@
    131 
     124# If building an external module we do not care about the all: rule
     125# but instead _all depend on modules
     126PHONY += all
     127ifeq ($(KBUILD_EXTMOD),)
    132128_all: all
     129else
     130_all: modules
     131endif
     132
     133srctree     := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR))
     134TOPDIR      := $(srctree)
     135# FIXME - TOPDIR is obsolete, use srctree/objtree
     136objtree     := $(CURDIR)
     137src     := $(srctree)
     138obj     := $(objtree)
     139
     140VPATH       := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
     141
     142export srctree objtree VPATH TOPDIR
     143
     144
     145# SUBARCH tells the usermode build what the underlying arch is.  That is set
     146# first, and if a usermode build is happening, the "ARCH=um" on the command
     147# line overrides the setting of ARCH below.  If a native build is happening,
     148# then ARCH is assigned, getting whatever value it gets normally, and
     149# SUBARCH is subsequently ignored.
     150
     151SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
     152                  -e s/arm.*/arm/ -e s/sa110/arm/ \
     153                  -e s/s390x/s390/ -e s/parisc64/parisc/ \
     154                  -e s/ppc.*/powerpc/ -e s/mips.*/mips/ )
     155
     156# Cross compiling and selecting different set of gcc/bin-utils
     157# ---------------------------------------------------------------------------
     158#
     159# When performing cross compilation for other architectures ARCH shall be set
     160# to the target architecture. (See arch/* for the possibilities).
     161# ARCH can be set during invocation of make:
     162# make ARCH=ia64
     163# Another way is to have ARCH set in the environment.
     164# The default ARCH is the host where make is executed.
     165
     166# CROSS_COMPILE specify the prefix used for all executables used
     167# during compilation. Only gcc and related bin-utils executables
     168# are prefixed with $(CROSS_COMPILE).
     169# CROSS_COMPILE can be set on the command line
     170# make CROSS_COMPILE=ia64-linux-
     171# Alternatively CROSS_COMPILE can be set in the environment.
     172# Default value for CROSS_COMPILE is not to prefix executables
     173# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
     174
     175ARCH        ?= $(SUBARCH)
     176CROSS_COMPILE   ?=
     177
     178# Architecture as present in compile.h
     179UTS_MACHINE := $(ARCH)
     180
     181# SHELL used by kbuild
     182CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
     183      else if [ -x /bin/bash ]; then echo /bin/bash; \
     184      else echo sh; fi ; fi)
     185
     186#   Decide whether to build built-in, modular, or both.
     187#   Normally, just do built-in.
     188
     189KBUILD_MODULES :=
     190KBUILD_BUILTIN := 1
     191
     192#   If we have only "make modules", don't compile built-in objects.
     193#   When we're building modules with modversions, we need to consider
     194#   the built-in objects during the descend as well, in order to
     195#   make sure the checksums are uptodate before we record them.
     196
     197ifeq ($(MAKECMDGOALS),modules)
     198  KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
     199endif
     200
     201#   If we have "make <whatever> modules", compile modules
     202#   in addition to whatever we do anyway.
     203#   Just "make" or "make all" shall build modules as well
     204
     205ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
     206  KBUILD_MODULES := 1
     207endif
     208
     209ifeq ($(MAKECMDGOALS),)
     210  KBUILD_MODULES := 1
     211endif
     212
     213export KBUILD_MODULES KBUILD_BUILTIN
     214export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
     215
     216# Beautify output
     217# ---------------------------------------------------------------------------
     218#
     219# Normally, we echo the whole command before executing it. By making
     220# that echo $($(quiet)$(cmd)), we now have the possibility to set
     221# $(quiet) to choose other forms of output instead, e.g.
     222#
     223#         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
     224#         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
     225#
     226# If $(quiet) is empty, the whole command will be printed.
     227# If it is set to "quiet_", only the short version will be printed.
     228# If it is set to "silent_", nothing wil be printed at all, since
     229# the variable $(silent_cmd_cc_o_c) doesn't exist.
     230#
     231# A simple variant is to prefix commands with $(Q) - that's useful
     232# for commands that shall be hidden in non-verbose mode.
     233#
     234#   $(Q)ln $@ :<
     235#
     236# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
     237# If KBUILD_VERBOSE equals 1 then the above command is displayed.
     238
     239ifeq ($(KBUILD_VERBOSE),1)
     240  quiet =
     241  Q =
     242else
     243  quiet=quiet_
     244  Q = @
     245endif
     246
     247# If the user is running make -s (silent mode), suppress echoing of
     248# commands
     249
     250ifneq ($(findstring s,$(MAKEFLAGS)),)
     251  quiet=silent_
     252endif
     253
     254export quiet Q KBUILD_VERBOSE
     255
     256
     257# Look for make include files relative to root of kernel src
     258MAKEFLAGS += --include-dir=$(srctree)
     259
     260HOSTCC      = gcc
     261HOSTCXX     = g++
     262HOSTCFLAGS  :=
     263HOSTCXXFLAGS    :=
     264# We need some generic definitions
     265include $(srctree)/scripts/Kbuild.include
     266
     267HOSTCFLAGS  += $(call hostcc-option,-Wall -Wstrict-prototypes -O2 -fomit-frame-pointer,)
     268HOSTCXXFLAGS    += -O2
     269
     270# For maximum performance (+ possibly random breakage, uncomment
     271# the following)
     272
     273MAKEFLAGS += -rR
     274
     275# Make variables (CC, etc...)
     276
     277AS      = $(CROSS_COMPILE)as
     278CC      = $(CROSS_COMPILE)gcc
     279LD      = $(CC) -nostdlib
     280CPP     = $(CC) -E
     281AR      = $(CROSS_COMPILE)ar
     282NM      = $(CROSS_COMPILE)nm
     283STRIP       = $(CROSS_COMPILE)strip
     284OBJCOPY     = $(CROSS_COMPILE)objcopy
     285OBJDUMP     = $(CROSS_COMPILE)objdump
     286AWK     = awk
     287GENKSYMS    = scripts/genksyms/genksyms
     288DEPMOD      = /sbin/depmod
     289KALLSYMS    = scripts/kallsyms
     290PERL        = perl
     291CHECK       = sparse
     292
     293CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise $(CF)
     294MODFLAGS    = -DMODULE
     295CFLAGS_MODULE   = $(MODFLAGS)
     296AFLAGS_MODULE   = $(MODFLAGS)
     297LDFLAGS_MODULE  = -r
     298CFLAGS_KERNEL   =
     299AFLAGS_KERNEL   =
     300
     301
     302# Use LINUXINCLUDE when you must reference the include/ directory.
     303# Needed to be compatible with the O= option
     304CFLAGS      := $(CFLAGS)
     305CPPFLAGS    := $(CPPFLAGS)
     306AFLAGS      := $(AFLAGS)
     307LDFLAGS     := $(LDFLAGS)
     308LDLIBS      :=
     309
     310# Read KERNELRELEASE from .kernelrelease (if it exists)
     311KERNELRELEASE = $(shell cat .kernelrelease 2> /dev/null)
     312KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
     313
     314export  VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION \
     315    ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
     316    CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \
     317    HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
     318
     319export CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
     320export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
     321export AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
     322export FLTFLAGS
     323
     324# When compiling out-of-tree modules, put MODVERDIR in the module
     325# tree rather than in the kernel tree. The kernel tree might
     326# even be read-only.
     327export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions
     328
     329# Files to ignore in find ... statements
     330
     331RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS -o -name .pc -o -name .hg -o -name .git \) -prune -o
     332export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS --exclude .pc --exclude .hg --exclude .git
     333
     334# ===========================================================================
     335# Rules shared between *config targets and build targets
     336
     337# Basic helpers built in scripts/
     338PHONY += scripts_basic
     339scripts_basic:
     340    $(Q)$(MAKE) $(build)=scripts/basic
     341
     342# To avoid any implicit rule to kick in, define an empty command.
     343scripts/basic/%: scripts_basic ;
     344
     345PHONY += outputmakefile
     346# outputmakefile generates a Makefile in the output directory, if using a
     347# separate output directory. This allows convenient use of make in the
     348# output directory.
     349outputmakefile:
     350ifneq ($(KBUILD_SRC),)
     351    $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
     352        $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
     353endif
     354
     355# To make sure we do not include .config for any of the *config targets
     356# catch them early, and hand them over to scripts/kconfig/Makefile
     357# It is allowed to specify more targets when calling make, including
     358# mixing *config targets and build targets.
     359# For example 'make oldconfig all'.
     360# Detect when mixed targets is specified, and make a second invocation
     361# of make so .config is not included in this case either (for *config).
     362
     363no-dot-config-targets := clean mrproper distclean \
     364             cscope TAGS tags help %docs check%
     365
     366config-targets := 0
     367mixed-targets  := 0
     368dot-config     := 1
     369
     370ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),)
     371    ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),)
     372        dot-config := 0
     373    endif
     374endif
     375
     376ifeq ($(KBUILD_EXTMOD),)
     377        ifneq ($(filter config %config,$(MAKECMDGOALS)),)
     378                config-targets := 1
     379                ifneq ($(filter-out config %config,$(MAKECMDGOALS)),)
     380                        mixed-targets := 1
     381                endif
     382        endif
     383endif
     384
     385ifeq ($(mixed-targets),1)
     386# ===========================================================================
     387# We're called with mixed targets (*config and build targets).
     388# Handle them one by one.
     389
     390%:: FORCE
     391    $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= $@
     392
     393else
     394ifeq ($(config-targets),1)
     395# ===========================================================================
     396# *config targets only - make sure prerequisites are updated, and descend
     397# in scripts/kconfig to make the *config target
     398
     399# Read arch specific Makefile to set KBUILD_DEFCONFIG as needed.
     400# KBUILD_DEFCONFIG may point out an alternative default configuration
     401# used for 'make defconfig'
     402-include $(srctree)/arch/$(ARCH)/Makefile
     403export KBUILD_DEFCONFIG
     404
     405config %config: scripts_basic outputmakefile FORCE
     406    $(Q)mkdir -p include
     407    $(Q)$(MAKE) $(build)=scripts/kconfig $@
     408    $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease
     409
     410else
     411# ===========================================================================
     412# Build targets only - this includes busybox, arch specific targets, clean
     413# targets and others. In general all targets except *config targets.
     414
     415ifeq ($(KBUILD_EXTMOD),)
     416# Additional helpers built in scripts/
     417# Carefully list dependencies so we do not try to build scripts twice
     418# in parrallel
     419PHONY += scripts
     420scripts: scripts_basic include/config/MARKER
     421    $(Q)$(MAKE) $(build)=$(@)
     422
     423scripts_basic: include/autoconf.h
     424
     425# Objects we will link into busybox / subdirs we need to visit
     426core-y      := \
     427        applets/ \
     428
     429libs-y      := \
     430        archival/ \
     431        archival/libunarchive/ \
     432        console-tools/ \
     433        coreutils/ \
     434        coreutils/libcoreutils/ \
     435        debianutils/ \
     436        e2fsprogs/ \
     437        editors/ \
     438        findutils/ \
     439        init/ \
     440        ipsvd/ \
     441        libbb/ \
     442        libpwdgrp/ \
     443        loginutils/ \
     444        miscutils/ \
     445        modutils/ \
     446        networking/ \
     447        networking/libiproute/ \
     448        networking/udhcp/ \
     449        procps/ \
     450        runit/ \
     451        selinux/ \
     452        shell/ \
     453        sysklogd/ \
     454        util-linux/ \
     455
     456endif # KBUILD_EXTMOD
     457
     458ifeq ($(dot-config),1)
     459# In this section, we need .config
     460
     461# Read in dependencies to all Kconfig* files, make sure to run
     462# oldconfig if changes are detected.
     463-include .kconfig.d
     464
     465-include .config
     466
     467# If .config needs to be updated, it will be done via the dependency
     468# that autoconf has on .config.
     469# To avoid any implicit rule to kick in, define an empty command
     470.config .kconfig.d: ;
     471
     472# Now we can define CFLAGS etc according to .config
     473include $(srctree)/Makefile.flags
     474
     475# If .config is newer than include/autoconf.h, someone tinkered
     476# with it and forgot to run make oldconfig.
     477# If kconfig.d is missing then we are probarly in a cleaned tree so
     478# we execute the config step to be sure to catch updated Kconfig files
     479include/autoconf.h: .kconfig.d .config
     480    $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
     481
     482else
     483# Dummy target needed, because used as prerequisite
     484include/autoconf.h: ;
     485endif
     486
     487# The all: target is the default when no target is given on the
     488# command line.
     489# This allow a user to issue only 'make' to build a kernel including modules
     490# Defaults busybox but it is usually overridden in the arch makefile
     491all: busybox
     492
     493-include $(srctree)/arch/$(ARCH)/Makefile
     494
     495# arch Makefile may override CC so keep this after arch Makefile is included
     496#bbox# NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
     497CHECKFLAGS += $(NOSTDINC_FLAGS)
     498
     499# warn about C99 declaration after statement
     500CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
     501
     502# disable pointer signedness warnings in gcc 4.0
     503CFLAGS += $(call cc-option,-Wno-pointer-sign,)
     504
     505# Default kernel image to build when no specific target is given.
     506# KBUILD_IMAGE may be overruled on the commandline or
     507# set in the environment
     508# Also any assignments in arch/$(ARCH)/Makefile take precedence over
     509# this default value
     510export KBUILD_IMAGE ?= busybox
     511
     512#
     513# INSTALL_PATH specifies where to place the updated kernel and system map
     514# images. Default is /boot, but you can set it to other values
     515export  INSTALL_PATH ?= /boot
     516
     517#
     518# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
     519# relocations required by build roots.  This is not defined in the
     520# makefile but the arguement can be passed to make if needed.
     521#
     522
     523MODLIB  = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
     524export MODLIB
     525
     526
     527ifeq ($(KBUILD_EXTMOD),)
     528busybox-dirs    := $(patsubst %/,%,$(filter %/, $(core-y) $(core-m) $(libs-y) $(libs-m)))
     529
     530busybox-alldirs := $(sort $(busybox-dirs) $(patsubst %/,%,$(filter %/, \
     531             $(core-n) $(core-) $(libs-n) $(libs-) \
     532        )))
     533
     534core-y      := $(patsubst %/, %/built-in.o, $(core-y))
     535libs-y1     := $(patsubst %/, %/lib.a, $(libs-y))
     536libs-y2     := $(patsubst %/, %/built-in.o, $(libs-y))
     537libs-y      := $(libs-y1) $(libs-y2)
     538
     539# Build busybox
     540# ---------------------------------------------------------------------------
     541# busybox is build from the objects selected by $(busybox-init) and
     542# $(busybox-main). Most are built-in.o files from top-level directories
     543# in the kernel tree, others are specified in arch/$(ARCH)Makefile.
     544# Ordering when linking is important, and $(busybox-init) must be first.
     545#
     546# busybox
     547#   ^
     548#   |
     549#   +-< $(busybox-init)
     550#   |   +--< init/version.o + more
     551#   |
     552#   +--< $(busybox-main)
     553#   |    +--< driver/built-in.o mm/built-in.o + more
     554#   |
     555#   +-< kallsyms.o (see description in CONFIG_KALLSYMS section)
     556#
     557# busybox version (uname -v) cannot be updated during normal
     558# descending-into-subdirs phase since we do not yet know if we need to
     559# update busybox.
     560# Therefore this step is delayed until just before final link of busybox -
     561# except in the kallsyms case where it is done just before adding the
     562# symbols to the kernel.
     563#
     564# System.map is generated to document addresses of all kernel symbols
     565
     566busybox-all  := $(core-y) $(libs-y)
     567
     568# Rule to link busybox - also used during CONFIG_KALLSYMS
     569# May be overridden by arch/$(ARCH)/Makefile
     570quiet_cmd_busybox__ ?= LINK    $@
     571      cmd_busybox__ ?= $(srctree)/scripts/trylink $(CC) $(LDFLAGS) \
     572      -o $@ -Wl,-Map -Wl,$@.map \
     573      -Wl,--warn-common -Wl,--sort-common -Wl,--gc-sections \
     574      -Wl,--start-group $(busybox-all) -Wl,--end-group \
     575      $(LDLIBS)
     576
     577# Generate System.map
     578quiet_cmd_sysmap = SYSMAP
     579      cmd_sysmap = $(CONFIG_SHELL) $(srctree)/scripts/mksysmap
     580
     581# Link of busybox
     582# If CONFIG_KALLSYMS is set .version is already updated
     583# Generate System.map and verify that the content is consistent
     584# Use + in front of the busybox_version rule to silent warning with make -j2
     585# First command is ':' to allow us to use + in front of the rule
     586define rule_busybox__
     587    :
     588    $(call cmd,busybox__)
     589    $(Q)echo 'cmd_$@ := $(cmd_busybox__)' > $(@D)/.$(@F).cmd
     590endef
     591
     592
     593ifdef CONFIG_KALLSYMS
     594# Generate section listing all symbols and add it into busybox $(kallsyms.o)
     595# It's a three stage process:
     596# o .tmp_busybox1 has all symbols and sections, but __kallsyms is
     597#   empty
     598#   Running kallsyms on that gives us .tmp_kallsyms1.o with
     599#   the right size - busybox version (uname -v) is updated during this step
     600# o .tmp_busybox2 now has a __kallsyms section of the right size,
     601#   but due to the added section, some addresses have shifted.
     602#   From here, we generate a correct .tmp_kallsyms2.o
     603# o The correct .tmp_kallsyms2.o is linked into the final busybox.
     604# o Verify that the System.map from busybox matches the map from
     605#   .tmp_busybox2, just in case we did not generate kallsyms correctly.
     606# o If CONFIG_KALLSYMS_EXTRA_PASS is set, do an extra pass using
     607#   .tmp_busybox3 and .tmp_kallsyms3.o.  This is only meant as a
     608#   temporary bypass to allow the kernel to be built while the
     609#   maintainers work out what went wrong with kallsyms.
     610
     611ifdef CONFIG_KALLSYMS_EXTRA_PASS
     612last_kallsyms := 3
     613else
     614last_kallsyms := 2
     615endif
     616
     617kallsyms.o := .tmp_kallsyms$(last_kallsyms).o
     618
     619define verify_kallsyms
     620    $(Q)$(if $($(quiet)cmd_sysmap),                       \
     621      echo '  $($(quiet)cmd_sysmap) .tmp_System.map' &&)  \
     622      $(cmd_sysmap) .tmp_busybox$(last_kallsyms) .tmp_System.map
     623    $(Q)cmp -s System.map .tmp_System.map ||              \
     624        (echo Inconsistent kallsyms data;             \
     625         echo Try setting CONFIG_KALLSYMS_EXTRA_PASS; \
     626         rm .tmp_kallsyms* ; /bin/false )
     627endef
     628
     629# Update busybox version before link
     630# Use + in front of this rule to silent warning about make -j1
     631# First command is ':' to allow us to use + in front of this rule
     632cmd_ksym_ld = $(cmd_busybox__)
     633define rule_ksym_ld
     634    :
     635    +$(call cmd,busybox_version)
     636    $(call cmd,busybox__)
     637    $(Q)echo 'cmd_$@ := $(cmd_busybox__)' > $(@D)/.$(@F).cmd
     638endef
     639
     640# Generate .S file with all kernel symbols
     641quiet_cmd_kallsyms = KSYM    $@
     642      cmd_kallsyms = $(NM) -n $< | $(KALLSYMS) \
     643                     $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) > $@
     644
     645.tmp_kallsyms1.o .tmp_kallsyms2.o .tmp_kallsyms3.o: %.o: %.S scripts FORCE
     646    $(call if_changed_dep,as_o_S)
     647
     648.tmp_kallsyms%.S: .tmp_busybox% $(KALLSYMS)
     649    $(call cmd,kallsyms)
     650
     651# .tmp_busybox1 must be complete except kallsyms, so update busybox version
     652.tmp_busybox1: $(busybox-lds) $(busybox-all) FORCE
     653    $(call if_changed_rule,ksym_ld)
     654
     655.tmp_busybox2: $(busybox-lds) $(busybox-all) .tmp_kallsyms1.o FORCE
     656    $(call if_changed,busybox__)
     657
     658.tmp_busybox3: $(busybox-lds) $(busybox-all) .tmp_kallsyms2.o FORCE
     659    $(call if_changed,busybox__)
     660
     661# Needs to visit scripts/ before $(KALLSYMS) can be used.
     662$(KALLSYMS): scripts ;
     663
     664# Generate some data for debugging strange kallsyms problems
     665debug_kallsyms: .tmp_map$(last_kallsyms)
     666
     667.tmp_map%: .tmp_busybox% FORCE
     668    ($(OBJDUMP) -h $< | $(AWK) '/^ +[0-9]/{print $$4 " 0 " $$2}'; $(NM) $<) | sort > $@
     669
     670.tmp_map3: .tmp_map2
     671
     672.tmp_map2: .tmp_map1
     673
     674endif # ifdef CONFIG_KALLSYMS
     675
     676# busybox image - including updated kernel symbols
     677busybox_unstripped: $(busybox-all) FORCE
     678    $(call if_changed_rule,busybox__)
     679    $(Q)rm -f .old_version
     680
     681busybox: busybox_unstripped
     682ifeq ($(SKIP_STRIP),y)
     683    $(Q)cp $< $@
     684else
     685    $(Q)$(STRIP) -s --remove-section=.note --remove-section=.comment \
     686        busybox_unstripped -o $@
     687endif
     688
     689# The actual objects are generated when descending,
     690# make sure no implicit rule kicks in
     691$(sort $(busybox-all)): $(busybox-dirs) ;
     692
     693# Handle descending into subdirectories listed in $(busybox-dirs)
     694# Preset locale variables to speed up the build process. Limit locale
     695# tweaks to this spot to avoid wrong language settings when running
     696# make menuconfig etc.
     697# Error messages still appears in the original language
     698
     699PHONY += $(busybox-dirs)
     700$(busybox-dirs): prepare scripts
     701    $(Q)$(MAKE) $(build)=$@
     702
     703# Build the kernel release string
     704# The KERNELRELEASE is stored in a file named .kernelrelease
     705# to be used when executing for example make install or make modules_install
     706#
     707# Take the contents of any files called localversion* and the config
     708# variable CONFIG_LOCALVERSION and append them to KERNELRELEASE.
     709# LOCALVERSION from the command line override all of this
     710
     711nullstring :=
     712space      := $(nullstring) # end of line
     713
     714___localver = $(objtree)/localversion* $(srctree)/localversion*
     715__localver  = $(sort $(wildcard $(___localver)))
     716# skip backup files (containing '~')
     717_localver = $(foreach f, $(__localver), $(if $(findstring ~, $(f)),,$(f)))
     718
     719localver = $(subst $(space),, \
     720       $(shell cat /dev/null $(_localver)) \
     721       $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
     722
     723# If CONFIG_LOCALVERSION_AUTO is set scripts/setlocalversion is called
     724# and if the SCM is know a tag from the SCM is appended.
     725# The appended tag is determinded by the SCM used.
     726#
     727# Currently, only git is supported.
     728# Other SCMs can edit scripts/setlocalversion and add the appropriate
     729# checks as needed.
     730ifdef CONFIG_LOCALVERSION_AUTO
     731    _localver-auto = $(shell $(CONFIG_SHELL) \
     732                      $(srctree)/scripts/setlocalversion $(srctree))
     733    localver-auto  = $(LOCALVERSION)$(_localver-auto)
     734endif
     735
     736localver-full = $(localver)$(localver-auto)
     737
     738# Store (new) KERNELRELASE string in .kernelrelease
     739kernelrelease = $(KERNELVERSION)$(localver-full)
     740.kernelrelease: FORCE
     741    $(Q)rm -f $@
     742    $(Q)echo $(kernelrelease) > $@
     743
     744
     745# Things we need to do before we recursively start building the kernel
     746# or the modules are listed in "prepare".
     747# A multi level approach is used. prepareN is processed before prepareN-1.
     748# archprepare is used in arch Makefiles and when processed asm symlink,
     749# version.h and scripts_basic is processed / created.
     750
     751# Listed in dependency order
     752PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
     753
     754# prepare-all is deprecated, use prepare as valid replacement
     755PHONY += prepare-all
     756
     757# prepare3 is used to check if we are building in a separate output directory,
     758# and if so do:
     759# 1) Check that make has not been executed in the kernel src $(srctree)
     760# 2) Create the include2 directory, used for the second asm symlink
     761prepare3: .kernelrelease
     762ifneq ($(KBUILD_SRC),)
     763    @echo '  Using $(srctree) as source for busybox'
     764    $(Q)if [ -f $(srctree)/.config ]; then \
     765        echo "  $(srctree) is not clean, please run 'make mrproper'";\
     766        echo "  in the '$(srctree)' directory.";\
     767        /bin/false; \
     768    fi;
     769    $(Q)if [ ! -d include2 ]; then mkdir -p include2; fi;
     770    $(Q)ln -fsn $(srctree)/include/asm-$(ARCH) include2/asm
     771endif
     772
     773# prepare2 creates a makefile if using a separate output directory
     774prepare2: prepare3 outputmakefile
     775
     776prepare1: prepare2 include/config/MARKER
     777ifneq ($(KBUILD_MODULES),)
     778    $(Q)mkdir -p $(MODVERDIR)
     779    $(Q)rm -f $(MODVERDIR)/*
     780endif
     781
     782archprepare: prepare1 scripts_basic
     783
     784prepare0: archprepare FORCE
     785    $(Q)$(MAKE) $(build)=.
     786
     787# All the preparing..
     788prepare prepare-all: prepare0
     789
     790#   Leave this as default for preprocessing busybox.lds.S, which is now
     791#   done in arch/$(ARCH)/kernel/Makefile
     792
     793export CPPFLAGS_busybox.lds += -P -C -U$(ARCH)
     794
     795#   FIXME: The asm symlink changes when $(ARCH) changes. That's
     796#   hard to detect, but I suppose "make mrproper" is a good idea
     797#   before switching between archs anyway.
     798
     799#bbox# include/asm:
     800#bbox#  @echo '  SYMLINK $@ -> include/asm-$(ARCH)'
     801#bbox#  $(Q)if [ ! -d include ]; then mkdir -p include; fi;
     802#bbox#  @ln -fsn asm-$(ARCH) $@
     803
     804#   Split autoconf.h into include/linux/config/*
     805quiet_cmd_gen_bbconfigopts = GEN     include/bbconfigopts.h
     806      cmd_gen_bbconfigopts = $(srctree)/scripts/mkconfigs > include/bbconfigopts.h
     807quiet_cmd_split_autoconf   = SPLIT   include/autoconf.h -> include/config/*
     808      cmd_split_autoconf   = scripts/basic/split-include include/autoconf.h include/config
     809#bbox# piggybacked generation of few .h files
     810include/config/MARKER: scripts/basic/split-include include/autoconf.h
     811    $(call cmd,split_autoconf)
     812    $(call cmd,gen_bbconfigopts)
     813    @touch $@
     814
     815# Generate some files
     816# ---------------------------------------------------------------------------
     817
     818# KERNELRELEASE can change from a few different places, meaning version.h
     819# needs to be updated, so this check is forced on all builds
     820
     821uts_len := 64
     822
     823define filechk_version.h
     824    if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
     825      echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2; \
     826      exit 1; \
     827    fi; \
     828    (echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"; \
     829      echo \#define LINUX_VERSION_CODE `expr $(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)`; \
     830     echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \
     831    )
     832endef
     833
     834# ---------------------------------------------------------------------------
     835
     836PHONY += depend dep
     837depend dep:
     838    @echo '*** Warning: make $@ is unnecessary now.'
     839
     840# ---------------------------------------------------------------------------
     841# Modules
     842
     843ifdef CONFIG_MODULES
     844
     845#   By default, build modules as well
     846
     847all: modules
     848
     849#   Build modules
     850
     851PHONY += modules
     852modules: $(busybox-dirs) $(if $(KBUILD_BUILTIN),busybox)
     853    @echo '  Building modules, stage 2.';
     854    $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
     855
     856
     857# Target to prepare building external modules
     858PHONY += modules_prepare
     859modules_prepare: prepare scripts
     860
     861# Target to install modules
     862PHONY += modules_install
     863modules_install: _modinst_ _modinst_post
     864
     865PHONY += _modinst_
     866_modinst_:
     867    @if [ -z "`$(DEPMOD) -V 2>/dev/null | grep module-init-tools`" ]; then \
     868        echo "Warning: you may need to install module-init-tools"; \
     869        echo "See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt";\
     870        sleep 1; \
     871    fi
     872    @rm -rf $(MODLIB)/kernel
     873    @rm -f $(MODLIB)/source
     874    @mkdir -p $(MODLIB)/kernel
     875    @ln -s $(srctree) $(MODLIB)/source
     876    @if [ ! $(objtree) -ef  $(MODLIB)/build ]; then \
     877        rm -f $(MODLIB)/build ; \
     878        ln -s $(objtree) $(MODLIB)/build ; \
     879    fi
     880    $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst
     881
     882# If System.map exists, run depmod.  This deliberately does not have a
     883# dependency on System.map since that would run the dependency tree on
     884# busybox.  This depmod is only for convenience to give the initial
     885# boot a modules.dep even before / is mounted read-write.  However the
     886# boot script depmod is the master version.
     887ifeq "$(strip $(INSTALL_MOD_PATH))" ""
     888depmod_opts :=
     889else
     890depmod_opts := -b $(INSTALL_MOD_PATH) -r
     891endif
     892PHONY += _modinst_post
     893_modinst_post: _modinst_
     894    if [ -r System.map -a -x $(DEPMOD) ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi
     895
     896else # CONFIG_MODULES
     897
     898# Modules not configured
     899# ---------------------------------------------------------------------------
     900
     901modules modules_install: FORCE
     902    @echo
     903    @echo "The present busybox configuration has modules disabled."
     904    @echo "Type 'make config' and enable loadable module support."
     905    @echo "Then build a kernel with module support enabled."
     906    @echo
     907    @exit 1
     908
     909endif # CONFIG_MODULES
     910
     911###
     912# Cleaning is done on three levels.
     913# make clean     Delete most generated files
     914#                Leave enough to build external modules
     915# make mrproper  Delete the current configuration, and all generated files
     916# make distclean Remove editor backup files, patch leftover files and the like
     917
     918# Directories & files removed with 'make clean'
     919CLEAN_DIRS  += $(MODVERDIR)
     920CLEAN_FILES +=  busybox* System.map .kernelrelease \
     921                .tmp_kallsyms* .tmp_version .tmp_busybox* .tmp_System.map
     922
     923# Directories & files removed with 'make mrproper'
     924MRPROPER_DIRS  += include/config include2
     925MRPROPER_FILES += .config .config.old include/asm .version .old_version \
     926          include/autoconf.h \
     927          include/bbconfigopts.h \
     928          include/usage_compressed.h \
     929          .kernelrelease Module.symvers tags TAGS cscope*
     930
     931# clean - Delete most, but leave enough to build external modules
     932#
     933clean: rm-dirs  := $(CLEAN_DIRS)
     934clean: rm-files := $(CLEAN_FILES)
     935clean-dirs      := $(addprefix _clean_,$(srctree) $(busybox-alldirs))
     936
     937PHONY += $(clean-dirs) clean archclean
     938$(clean-dirs):
     939    $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
     940
     941clean: archclean $(clean-dirs)
     942    $(call cmd,rmdirs)
     943    $(call cmd,rmfiles)
     944    @find . $(RCS_FIND_IGNORE) \
     945        \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
     946        -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
     947        -type f -print | xargs rm -f
     948
     949# mrproper - Delete all generated files, including .config
     950#
     951mrproper: rm-dirs  := $(wildcard $(MRPROPER_DIRS))
     952mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
     953mrproper-dirs      := $(addprefix _mrproper_,scripts)
     954
     955PHONY += $(mrproper-dirs) mrproper archmrproper
     956$(mrproper-dirs):
     957    $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
     958
     959mrproper: clean archmrproper $(mrproper-dirs)
     960    $(call cmd,rmdirs)
     961    $(call cmd,rmfiles)
     962
     963# distclean
     964#
     965PHONY += distclean
     966
     967distclean: mrproper
     968    @find $(srctree) $(RCS_FIND_IGNORE) \
     969        \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
     970        -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
     971        -o -name '.*.rej' -o -size 0 \
     972        -o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
     973        -type f -print | xargs rm -f
     974
     975
     976# Packaging of the kernel to various formats
     977# ---------------------------------------------------------------------------
     978# rpm target kept for backward compatibility
     979package-dir := $(srctree)/scripts/package
     980
     981%pkg: FORCE
     982    $(Q)$(MAKE) $(build)=$(package-dir) $@
     983rpm: FORCE
     984    $(Q)$(MAKE) $(build)=$(package-dir) $@
     985
     986
     987# Brief documentation of the typical targets used
     988# ---------------------------------------------------------------------------
     989
     990boards := $(wildcard $(srctree)/arch/$(ARCH)/configs/*_defconfig)
     991boards := $(notdir $(boards))
     992
     993-include $(srctree)/Makefile.help
     994
     995# Documentation targets
     996# ---------------------------------------------------------------------------
     997%docs: scripts_basic FORCE
     998    $(Q)$(MAKE) $(build)=Documentation/DocBook $@
     999
     1000else # KBUILD_EXTMOD
     1001
     1002###
     1003# External module support.
     1004# When building external modules the kernel used as basis is considered
     1005# read-only, and no consistency checks are made and the make
     1006# system is not used on the basis kernel. If updates are required
     1007# in the basis kernel ordinary make commands (without M=...) must
     1008# be used.
     1009#
     1010# The following are the only valid targets when building external
     1011# modules.
     1012# make M=dir clean     Delete all automatically generated files
     1013# make M=dir modules   Make all modules in specified dir
     1014# make M=dir           Same as 'make M=dir modules'
     1015# make M=dir modules_install
     1016#                      Install the modules build in the module directory
     1017#                      Assumes install directory is already created
     1018
     1019# We are always building modules
     1020KBUILD_MODULES := 1
     1021PHONY += crmodverdir
     1022crmodverdir:
     1023    $(Q)mkdir -p $(MODVERDIR)
     1024    $(Q)rm -f $(MODVERDIR)/*
     1025
     1026PHONY += $(objtree)/Module.symvers
     1027$(objtree)/Module.symvers:
     1028    @test -e $(objtree)/Module.symvers || ( \
     1029    echo; \
     1030    echo "  WARNING: Symbol version dump $(objtree)/Module.symvers"; \
     1031    echo "           is missing; modules will have no dependencies and modversions."; \
     1032    echo )
     1033
     1034module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD))
     1035PHONY += $(module-dirs) modules
     1036$(module-dirs): crmodverdir $(objtree)/Module.symvers
     1037    $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
     1038
     1039modules: $(module-dirs)
     1040    @echo '  Building modules, stage 2.';
     1041    $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
     1042
     1043PHONY += modules_install
     1044modules_install: _emodinst_ _emodinst_post
     1045
     1046install-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra)
     1047PHONY += _emodinst_
     1048_emodinst_:
     1049    $(Q)mkdir -p $(MODLIB)/$(install-dir)
     1050    $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst
     1051
     1052# Run depmod only is we have System.map and depmod is executable
     1053quiet_cmd_depmod = DEPMOD  $(KERNELRELEASE)
     1054      cmd_depmod = if [ -r System.map -a -x $(DEPMOD) ]; then \
     1055                      $(DEPMOD) -ae -F System.map             \
     1056                      $(if $(strip $(INSTALL_MOD_PATH)),      \
     1057              -b $(INSTALL_MOD_PATH) -r)              \
     1058              $(KERNELRELEASE);                       \
     1059                   fi
     1060
     1061PHONY += _emodinst_post
     1062_emodinst_post: _emodinst_
     1063    $(call cmd,depmod)
     1064
     1065clean-dirs := $(addprefix _clean_,$(KBUILD_EXTMOD))
     1066
     1067PHONY += $(clean-dirs) clean
     1068$(clean-dirs):
     1069    $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
     1070
     1071clean:  rm-dirs := $(MODVERDIR)
     1072clean: $(clean-dirs)
     1073    $(call cmd,rmdirs)
     1074    @find $(KBUILD_EXTMOD) $(RCS_FIND_IGNORE) \
     1075        \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
     1076        -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
     1077        -type f -print | xargs rm -f
    1331078
    1341079help:
    135     @echo 'Cleaning:'
    136     @echo '  clean          - delete temporary files created by build'
    137     @echo '  distclean      - delete all non-source files (including .config)'
    138     @echo
    139     @echo 'Build:'
    140     @echo '  all            - Executable and documentation'
    141     @echo '  busybox        - the swiss-army executable'
    142     @echo '  doc            - docs/BusyBox.{txt,html,1}'
    143     @echo '  html           - create html-based cross-reference'
    144     @echo
    145     @echo 'Configuration:'
    146     @echo '  allnoconfig        - disable all symbols in .config'
    147     @echo '  allyesconfig       - enable all symbols in .config (see defconfig)'
    148     @echo '  allbareconfig      - enable all applets without any sub-features'
    149     @echo '  config     - text based configurator (of last resort)'
    150     @echo '  defconfig      - set .config to largest generic configuration'
    151     @echo '  menuconfig     - interactive curses-based configurator'
    152     @echo '  oldconfig      - resolve any unresolved symbols in .config'
    153     @echo '  hosttools          - build sed for the host.'
    154     @echo '               You can use these commands if the commands on the host'
    155     @echo '               is unusable. Afterwards use it like:'
    156     @echo '           make SED="$(top_builddir)/sed"'
    157     @echo
    158     @echo 'Installation:'
    159     @echo '  install        - install busybox into $(PREFIX)'
    160     @echo '  uninstall'
    161     @echo
    162     @echo 'Development:'
    163     @echo '  baseline       - create busybox_old for bloatcheck.'
    164     @echo '  bloatcheck     - show size difference between old and new versions'
    165     @echo '  check          - run the test suite for all applets'
    166     @echo '  checkhelp      - check for missing help-entries in Config.in'
    167     @echo '  randconfig     - generate a random configuration'
    168     @echo '  release        - create a distribution tarball'
    169     @echo '  sizes          - show size of all enabled busybox symbols'
    170     @echo '  objsizes       - show size of each .o object built'
    171     @echo
    172 
    173 
    174 include $(top_srcdir)/Rules.mak
    175 
    176 ifneq ($(strip $(HAVE_DOT_CONFIG)),y)
    177 
    178 # Default target if none was requested explicitly
    179 all: menuconfig
    180 
    181 # warn if no configuration exists and we are asked to build a non-config target
    182 .config:
    183     @echo ""
    184     @echo "No $(top_builddir)/$@ found!"
    185     @echo "Please refer to 'make  help', section Configuration."
    186     @echo ""
    187     @exit 1
    188 
    189 # configuration
     1080    @echo  '  Building external modules.'
     1081    @echo  '  Syntax: make -C path/to/kernel/src M=$$PWD target'
     1082    @echo  ''
     1083    @echo  '  modules         - default target, build the module(s)'
     1084    @echo  '  modules_install - install the module'
     1085    @echo  '  clean           - remove generated files in module directory only'
     1086    @echo  ''
     1087
     1088# Dummies...
     1089PHONY += prepare scripts
     1090prepare: ;
     1091scripts: ;
     1092endif # KBUILD_EXTMOD
     1093
     1094# Generate tags for editors
    1901095# ---------------------------------------------------------------------------
    1911096
    192 scripts/config/conf: scripts/config/Makefile
    193     $(Q)$(MAKE) -C scripts/config conf
    194     -@if [ ! -f .config ] ; then \
    195         touch .config; \
    196     fi
    197 
    198 scripts/config/mconf: scripts/config/Makefile
    199     $(Q)$(MAKE) -C scripts/config ncurses conf mconf
    200     -@if [ ! -f .config ] ; then \
    201         touch .config; \
    202     fi
    203 
    204 menuconfig: scripts/config/mconf
    205     @[ -f .config ] || $(MAKE) $(MAKEFLAGS) defconfig
    206     @./scripts/config/mconf $(CONFIG_CONFIG_IN)
    207 
    208 config: scripts/config/conf
    209     @./scripts/config/conf $(CONFIG_CONFIG_IN)
    210 
    211 oldconfig: scripts/config/conf
    212     @./scripts/config/conf -o $(CONFIG_CONFIG_IN)
    213 
    214 randconfig: scripts/config/conf
    215     @./scripts/config/conf -r $(CONFIG_CONFIG_IN)
    216 
    217 allyesconfig: scripts/config/conf
    218     @./scripts/config/conf -y $(CONFIG_CONFIG_IN) > /dev/null
    219     @$(SED) -i -r -e "s/^(USING_CROSS_COMPILER)=.*/# \1 is not set/" .config
    220     @./scripts/config/conf -o $(CONFIG_CONFIG_IN) > /dev/null
    221 
    222 allnoconfig: scripts/config/conf
    223     @./scripts/config/conf -n $(CONFIG_CONFIG_IN) > /dev/null
    224 
    225 # defconfig is allyesconfig minus any features that are specialized enough
    226 # or cause enough behavior change that the user really should switch them on
    227 # manually if that's what they want.  Sort of "maximum sane config".
    228 
    229 defconfig: scripts/config/conf
    230     @./scripts/config/conf -y $(CONFIG_CONFIG_IN) > /dev/null
    231     @$(SED) -i -r -e "s/^(USING_CROSS_COMPILER|CONFIG_(DEBUG.*|STATIC|SELINUX|BUILD_(AT_ONCE|LIBBUSYBOX)|FEATURE_(DEVFS|FULL_LIBBUSYBOX|SHARED_BUSYBOX|MTAB_SUPPORT|CLEAN_UP|UDHCP_DEBUG)|INSTALL_NO_USR))=.*/# \1 is not set/" .config
    232     @./scripts/config/conf -o $(CONFIG_CONFIG_IN) > /dev/null
    233 
    234 
    235 allbareconfig: scripts/config/conf
    236     @./scripts/config/conf -y $(CONFIG_CONFIG_IN) > /dev/null
    237     @$(SED) -i -r -e "s/^(USING_CROSS_COMPILER|CONFIG_(DEBUG|STATIC|SELINUX|DEVFSD|NC_GAPING_SECURITY_HOLE|BUILD_AT_ONCE)).*/# \1 is not set/" .config
    238     @$(SED) -i -e "/FEATURE/s/=.*//;/^[^#]/s/.*FEATURE.*/# \0 is not set/;" .config
    239     @echo "CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y" >> .config
    240     @yes n | ./scripts/config/conf -o $(CONFIG_CONFIG_IN) > /dev/null
    241 
    242 hosttools:
    243     $(Q)cp .config .config.bak || noold=yea
    244     $(Q)$(MAKE) CC="$(HOSTCC)" CFLAGS="$(HOSTCFLAGS) $(INCS)" allnoconfig
    245     $(Q)mv .config .config.in
    246     $(Q)(grep -v CONFIG_SED .config.in ; \
    247      echo "CONFIG_SED=y" ; ) > .config
    248     $(Q)$(MAKE) CC="$(HOSTCC)" CFLAGS="$(HOSTCFLAGS) $(INCS)" oldconfig include/bb_config.h
    249     $(Q)$(MAKE) CC="$(HOSTCC)" CFLAGS="$(HOSTCFLAGS) $(INCS)" busybox
    250     $(Q)[ -f .config.bak ] && mv .config.bak .config || rm .config
    251     mv busybox sed
    252     @echo "Now do: $(MAKE) SED=$(top_builddir)/sed <target>"
    253 
    254 else # ifneq ($(strip $(HAVE_DOT_CONFIG)),y)
    255 
    256 all: busybox busybox.links doc
    257 
    258 # In this section, we need .config
    259 -include $(top_builddir)/.config.cmd
    260 include $(patsubst %,%/Makefile.in, $(SRC_DIRS))
    261 
    262 endif # ifneq ($(strip $(HAVE_DOT_CONFIG)),y)
    263 
    264 -include $(top_builddir)/.config
    265 -include $(top_builddir)/.depend
    266 
    267 
    268 ifeq ($(strip $(CONFIG_BUILD_AT_ONCE)),y)
    269 libraries-y:=
    270 # Which parts of the internal libs are requested?
    271 # Per default we only want what was actually selected.
    272 # -a denotes all while -y denotes the selected ones.
    273 ifeq ($(strip $(CONFIG_FEATURE_FULL_LIBBUSYBOX)),y)
    274 LIBRARY_DEFINE:=$(LIBRARY_DEFINE-a)
    275 LIBRARY_SRC   :=$(LIBRARY_SRC-a)
    276 else # CONFIG_FEATURE_FULL_LIBBUSYBOX
    277 LIBRARY_DEFINE:=$(LIBRARY_DEFINE-y)
    278 LIBRARY_SRC   :=$(LIBRARY_SRC-y)
    279 endif # CONFIG_FEATURE_FULL_LIBBUSYBOX
    280 APPLET_SRC:=$(APPLET_SRC-y)
    281 APPLETS_DEFINE:=$(APPLETS_DEFINE-y)
    282 else  # CONFIG_BUILD_AT_ONCE
    283 # no --combine, build archives out of the individual .o
    284 # This was the old way the binary was built.
    285 libbusybox-obj:=archival/libunarchive/libunarchive.a \
    286     networking/libiproute/libiproute.a \
    287     libpwdgrp/libpwdgrp.a \
    288     coreutils/libcoreutils/libcoreutils.a \
    289     libbb/libbb.a
    290 libbusybox-obj:=$(patsubst %,$(top_builddir)/%,$(libbusybox-obj))
    291 
    292 ifeq ($(strip $(CONFIG_FEATURE_SHARED_BUSYBOX)),y)
    293 # linking against libbusybox, so don't build the .a already contained in the .so
    294 libraries-y:=$(filter-out $(libbusybox-obj),$(libraries-y))
    295 endif # CONFIG_FEATURE_SHARED_BUSYBOX
    296 endif # CONFIG_BUILD_AT_ONCE
    297 
    298 
    299 ifeq ($(strip $(CONFIG_BUILD_LIBBUSYBOX)),y)
    300 LD_LIBBUSYBOX:=libbusybox.so
    301 LIBBUSYBOX_SONAME:=$(LD_LIBBUSYBOX).$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL_VERSION)
    302 DO_INSTALL_LIBS:=$(LD_LIBBUSYBOX) \
    303     $(LD_LIBBUSYBOX).$(MAJOR_VERSION) \
    304     $(LD_LIBBUSYBOX).$(MAJOR_VERSION).$(MINOR_VERSION)
    305 endif # CONFIG_BUILD_LIBBUSYBOX
    306 
    307 ifeq ($(strip $(CONFIG_BUILD_AT_ONCE)),y)
    308 ifneq ($(strip $(CONFIG_FEATURE_SHARED_BUSYBOX)),y)
    309 # --combine but not linking against libbusybox, so compile all
    310 BUSYBOX_SRC   := $(LIBRARY_SRC)
    311 BUSYBOX_DEFINE:= $(LIBRARY_DEFINE)
    312 endif # !CONFIG_FEATURE_SHARED_BUSYBOX
    313 $(LIBBUSYBOX_SONAME): $(LIBRARY_SRC)
    314 else # CONFIG_BUILD_AT_ONCE
    315 $(LIBBUSYBOX_SONAME): $(libbusybox-obj)
    316 endif # CONFIG_BUILD_AT_ONCE
    317 
    318 ifeq ($(strip $(CONFIG_FEATURE_SHARED_BUSYBOX)),y)
    319 LDBUSYBOX:=-L$(top_builddir) -lbusybox
    320 endif
    321 
    322 ifeq ($(strip $(CONFIG_BUILD_LIBBUSYBOX)),y)
    323 $(LIBBUSYBOX_SONAME):
    324 ifndef MAJOR_VERSION
    325     $(error MAJOR_VERSION needed for $@ is not defined)
    326 endif
    327     $(do_link.so) \
    328     -Wl,-soname=$(LD_LIBBUSYBOX).$(MAJOR_VERSION) \
    329     -Wl,-z,combreloc
    330     @rm -f $(DO_INSTALL_LIBS)
    331     @for i in $(DO_INSTALL_LIBS); do ln -s $(@) $$i ; done
    332     $(do_strip)
    333 
    334 endif # ifeq ($(strip $(CONFIG_BUILD_LIBBUSYBOX)),y)
    335 
    336 busybox_unstripped: .depend $(LIBBUSYBOX_SONAME) $(BUSYBOX_SRC) $(APPLET_SRC) $(libraries-y)
    337     $(do_link)
    338 
    339 busybox: busybox_unstripped
    340     $(Q)cp busybox_unstripped busybox
    341     $(do_strip)
    342 
    343 %.bflt: %_unstripped
    344     $(do_elf2flt)
    345 
    346 busybox.links: $(top_srcdir)/applets/busybox.mkll include/bb_config.h $(top_srcdir)/include/applets.h
    347     $(Q)-$(SHELL) $^ >$@
    348 
    349 install: $(top_srcdir)/applets/install.sh busybox busybox.links
    350     $(Q)DO_INSTALL_LIBS="$(strip $(LIBBUSYBOX_SONAME) $(DO_INSTALL_LIBS))" \
    351         $(SHELL) $< $(PREFIX) $(INSTALL_OPTS)
    352 ifeq ($(strip $(CONFIG_FEATURE_SUID)),y)
    353     @echo
    354     @echo
    355     @echo --------------------------------------------------
    356     @echo You will probably need to make your busybox binary
    357     @echo setuid root to ensure all configured applets will
    358     @echo work properly.
    359     @echo --------------------------------------------------
    360     @echo
    361 endif
    362 
    363 uninstall: busybox.links
    364     rm -f $(PREFIX)/bin/busybox
    365     for i in `cat busybox.links` ; do rm -f $(PREFIX)$$i; done
    366 ifneq ($(strip $(DO_INSTALL_LIBS)),n)
    367     for i in $(LIBBUSYBOX_SONAME) $(DO_INSTALL_LIBS); do \
    368         rm -f $(PREFIX)$$i; \
    369     done
    370 endif
    371 
    372 check test: busybox
    373     bindir=$(top_builddir) srcdir=$(top_srcdir)/testsuite SED="$(SED)" \
    374     $(SHELL) $(top_srcdir)/testsuite/runtest $(CHECK_VERBOSE)
    375 
    376 checkhelp:
    377     $(Q)$(top_srcdir)/scripts/checkhelp.awk \
    378         $(wildcard $(patsubst %,%/Config.in,$(SRC_DIRS) ./))
    379 
    380 sizes: busybox_unstripped
    381     $(NM) --size-sort $(<)
    382 
    383 bloatcheck: busybox_old busybox_unstripped
    384     @$(top_srcdir)/scripts/bloat-o-meter busybox_old busybox_unstripped
    385 
    386 baseline: busybox_unstripped
    387     @mv busybox_unstripped busybox_old
    388 
    389 objsizes: busybox_unstripped
    390     $(SHELL) $(top_srcdir)/scripts/objsizes
    391 
    392 # Documentation Targets
    393 doc: docs/busybox.pod docs/BusyBox.txt docs/BusyBox.1 docs/BusyBox.html
    394 
    395 docs/busybox.pod : $(top_srcdir)/docs/busybox_header.pod $(top_srcdir)/include/usage.h $(top_srcdir)/docs/busybox_footer.pod $(top_srcdir)/docs/autodocifier.pl
    396     $(disp_doc)
    397     $(Q)-mkdir -p docs
    398     $(Q)-( cat $(top_srcdir)/docs/busybox_header.pod ; \
    399         $(top_srcdir)/docs/autodocifier.pl $(top_srcdir)/include/usage.h ; \
    400         cat $(top_srcdir)/docs/busybox_footer.pod ; ) > docs/busybox.pod
    401 
    402 docs/BusyBox.txt: docs/busybox.pod
    403     $(disp_doc)
    404     $(Q)-mkdir -p docs
    405     $(Q)-pod2text $< > $@
    406 
    407 docs/BusyBox.1: docs/busybox.pod
    408     $(disp_doc)
    409     $(Q)-mkdir -p docs
    410     $(Q)-pod2man --center=BusyBox --release="version $(VERSION)" \
    411         $< > $@
    412 
    413 docs/BusyBox.html: docs/busybox.net/BusyBox.html
    414     $(disp_doc)
    415     $(Q)-mkdir -p docs
    416     $(Q)-rm -f docs/BusyBox.html
    417     $(Q)-cp docs/busybox.net/BusyBox.html docs/BusyBox.html
    418 
    419 docs/busybox.net/BusyBox.html: docs/busybox.pod
    420     $(Q)-mkdir -p docs/busybox.net
    421     $(Q)-pod2html --noindex $< > \
    422         docs/busybox.net/BusyBox.html
    423     $(Q)-rm -f pod2htm*
    424 
    425 # The nifty new dependency stuff
    426 scripts/bb_mkdep: $(top_srcdir)/scripts/bb_mkdep.c
    427     $(do_link.h)
    428 
    429 DEP_INCLUDES := include/bb_config.h
    430 
    431 ifeq ($(strip $(CONFIG_BBCONFIG)),y)
    432 DEP_INCLUDES += include/bbconfigopts.h
    433 
    434 include/bbconfigopts.h: .config $(top_srcdir)/scripts/config/mkconfigs
    435     $(disp_gen)
    436     $(Q)$(top_srcdir)/scripts/config/mkconfigs > $@
    437 endif
    438 
    439 ifeq ($(strip $(CONFIG_FEATURE_COMPRESS_USAGE)),y)
    440 USAGE_BIN:=scripts/usage
    441 $(USAGE_BIN): $(top_srcdir)/scripts/usage.c .config \
    442         $(top_srcdir)/include/usage.h
    443     $(do_link.h)
    444 
    445 DEP_INCLUDES += include/usage_compressed.h
    446 
    447 include/usage_compressed.h: .config $(USAGE_BIN) \
    448         $(top_srcdir)/scripts/usage_compressed
    449     $(Q)SED="$(SED)" $(SHELL) $(top_srcdir)/scripts/usage_compressed \
    450     "$(top_builddir)/scripts" > $@
    451 endif # CONFIG_FEATURE_COMPRESS_USAGE
    452 
    453 # workaround alleged bug in make-3.80, make-3.81
    454 .NOTPARALLEL: .depend
    455 
    456 depend dep: .depend
    457 .depend: scripts/bb_mkdep $(USAGE_BIN) $(DEP_INCLUDES)
    458     $(disp_gen)
    459     $(Q)rm -f .depend
    460     $(Q)mkdir -p include/config
    461     $(Q)scripts/bb_mkdep -I $(top_srcdir)/include $(top_srcdir) > $@.tmp
    462     $(Q)mv $@.tmp $@
    463 
    464 include/bb_config.h: .config
    465     @if [ ! -x $(top_builddir)/scripts/config/conf ] ; then \
    466         $(MAKE) -C scripts/config conf; \
    467     fi;
    468     @$(top_builddir)/scripts/config/conf -o $(CONFIG_CONFIG_IN)
    469 
    470 clean:
    471     - $(MAKE) -C scripts/config $@
    472     - rm -f docs/busybox.dvi docs/busybox.ps \
    473         docs/busybox.pod docs/busybox.net/busybox.html \
    474         docs/busybox pod2htm* *.gdb *.elf *~ core .*config.log \
    475         docs/BusyBox.txt docs/BusyBox.1 docs/BusyBox.html \
    476         docs/busybox.net/BusyBox.html busybox.links \
    477         libbusybox.so* \
    478         .config.old busybox busybox_unstripped \
    479         include/usage_compressed.h scripts/usage
    480     - rm -r -f _install testsuite/links
    481     - find . -name .\*.flags -o -name \*.o  -o -name \*.om -o -name \*.syn \
    482         -o -name \*.os -o -name \*.osm -o -name \*.a | xargs rm -f
    483 
    484 distclean: clean
    485     rm -f scripts/bb_mkdep scripts/usage
    486     rm -r -f include/config include/config.h $(DEP_INCLUDES)
    487     find . -name .depend'*' -print0 | xargs -0 rm -f
    488     rm -f .hdepend
    489     rm -f .config .config.old .config.cmd
    490 
    491 release: distclean #doc
    492     cd ..; \
    493     rm -r -f $(PROG)-$(VERSION); \
    494     cp -a busybox $(PROG)-$(VERSION); \
    495     \
    496     find $(PROG)-$(VERSION)/ -type d \
    497         -name .svn \
    498         -print \
    499         -exec rm -r -f {} \; ; \
    500     \
    501     find $(PROG)-$(VERSION)/ -type f \
    502         -name .\#* \
    503         -print \
    504         -exec rm -f {} \; ; \
    505     \
    506     tar -cvzf $(PROG)-$(VERSION).tar.gz $(PROG)-$(VERSION)/;
    507 
    508 tags:
    509     ctags -R .
    510 
    511 # documentation, cross-reference
    512 # Modern distributions already ship synopsis packages (e.g. debian)
    513 # If you have an old distribution go to http://synopsis.fresco.org/
    514 syn_tgt := $(wildcard $(patsubst %,%/*.c,$(SRC_DIRS)))
    515 syn     := $(patsubst %.c, %.syn, $(syn_tgt))
    516 
    517 %.syn: %.c
    518     synopsis -p C -l Comments.SSDFilter,Comments.Previous $(INCS) -Wp,verbose,debug,preprocess,cppflags="'$(CFLAGS) $(EXTRA_CFLAGS) $(LDFLAGS) $(PROG_CFLAGS) $(PROG_LDFLAGS) $(CFLAGS_COMBINE) $(APPLETS_DEFINE) $(BUSYBOX_DEFINE)'" -o $@ $<
    519 html: $(syn)
    520     synopsis -f HTML -Wf,title="'BusyBox Documentation'" -o $@ $^
    521 
    522 
    523 endif # ifeq ($(skip-makefile),)
    524 
     1097#We want __srctree to totally vanish out when KBUILD_OUTPUT is not set
     1098#(which is the most common case IMHO) to avoid unneeded clutter in the big tags file.
     1099#Adding $(srctree) adds about 20M on i386 to the size of the output file!
     1100
     1101ifeq ($(src),$(obj))
     1102__srctree =
     1103else
     1104__srctree = $(srctree)/
     1105endif
     1106
     1107ifeq ($(ALLSOURCE_ARCHS),)
     1108ifeq ($(ARCH),um)
     1109ALLINCLUDE_ARCHS := $(ARCH) $(SUBARCH)
     1110else
     1111ALLINCLUDE_ARCHS := $(ARCH)
     1112endif
     1113else
     1114#Allow user to specify only ALLSOURCE_PATHS on the command line, keeping existing behaviour.
     1115ALLINCLUDE_ARCHS := $(ALLSOURCE_ARCHS)
     1116endif
     1117
     1118ALLSOURCE_ARCHS := $(ARCH)
     1119
     1120define all-sources
     1121    ( find $(__srctree) $(RCS_FIND_IGNORE) \
     1122           \( -name include -o -name arch \) -prune -o \
     1123           -name '*.[chS]' -print; \
     1124      for ARCH in $(ALLSOURCE_ARCHS) ; do \
     1125           find $(__srctree)arch/$${ARCH} $(RCS_FIND_IGNORE) \
     1126                -name '*.[chS]' -print; \
     1127      done ; \
     1128      find $(__srctree)security/selinux/include $(RCS_FIND_IGNORE) \
     1129           -name '*.[chS]' -print; \
     1130      find $(__srctree)include $(RCS_FIND_IGNORE) \
     1131           \( -name config -o -name 'asm-*' \) -prune \
     1132           -o -name '*.[chS]' -print; \
     1133      for ARCH in $(ALLINCLUDE_ARCHS) ; do \
     1134           find $(__srctree)include/asm-$${ARCH} $(RCS_FIND_IGNORE) \
     1135                -name '*.[chS]' -print; \
     1136      done ; \
     1137      find $(__srctree)include/asm-generic $(RCS_FIND_IGNORE) \
     1138           -name '*.[chS]' -print )
     1139endef
     1140
     1141quiet_cmd_cscope-file = FILELST cscope.files
     1142      cmd_cscope-file = (echo \-k; echo \-q; $(all-sources)) > cscope.files
     1143
     1144quiet_cmd_cscope = MAKE    cscope.out
     1145      cmd_cscope = cscope -b
     1146
     1147cscope: FORCE
     1148    $(call cmd,cscope-file)
     1149    $(call cmd,cscope)
     1150
     1151quiet_cmd_TAGS = MAKE   $@
     1152define cmd_TAGS
     1153    rm -f $@; \
     1154    ETAGSF=`etags --version | grep -i exuberant >/dev/null &&     \
     1155                echo "-I __initdata,__exitdata,__acquires,__releases  \
     1156                      -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL              \
     1157                      --extra=+f --c-kinds=+px"`;                     \
     1158                $(all-sources) | xargs etags $$ETAGSF -a
     1159endef
     1160
     1161TAGS: FORCE
     1162    $(call cmd,TAGS)
     1163
     1164
     1165quiet_cmd_tags = MAKE   $@
     1166define cmd_tags
     1167    rm -f $@; \
     1168    CTAGSF=`ctags --version | grep -i exuberant >/dev/null &&     \
     1169                echo "-I __initdata,__exitdata,__acquires,__releases  \
     1170                      -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL              \
     1171                      --extra=+f --c-kinds=+px"`;                     \
     1172                $(all-sources) | xargs ctags $$CTAGSF -a
     1173endef
     1174
     1175tags: FORCE
     1176    $(call cmd,tags)
     1177
     1178
     1179# Scripts to check various things for consistency
     1180# ---------------------------------------------------------------------------
     1181
     1182includecheck:
     1183    find * $(RCS_FIND_IGNORE) \
     1184        -name '*.[hcS]' -type f -print | sort \
     1185        | xargs $(PERL) -w scripts/checkincludes.pl
     1186
     1187versioncheck:
     1188    find * $(RCS_FIND_IGNORE) \
     1189        -name '*.[hcS]' -type f -print | sort \
     1190        | xargs $(PERL) -w scripts/checkversion.pl
     1191
     1192namespacecheck:
     1193    $(PERL) $(srctree)/scripts/namespace.pl
     1194
     1195endif #ifeq ($(config-targets),1)
     1196endif #ifeq ($(mixed-targets),1)
     1197
     1198PHONY += checkstack
     1199checkstack:
     1200    $(OBJDUMP) -d busybox $$(find . -name '*.ko') | \
     1201    $(PERL) $(src)/scripts/checkstack.pl $(ARCH)
     1202
     1203kernelrelease:
     1204    $(if $(wildcard .kernelrelease), $(Q)echo $(KERNELRELEASE), \
     1205    $(error kernelrelease not valid - run 'make *config' to update it))
     1206kernelversion:
     1207    @echo $(KERNELVERSION)
     1208
     1209# Single targets
     1210# ---------------------------------------------------------------------------
     1211# Single targets are compatible with:
     1212# - build whith mixed source and output
     1213# - build with separate output dir 'make O=...'
     1214# - external modules
     1215#
     1216#  target-dir => where to store outputfile
     1217#  build-dir  => directory in kernel source tree to use
     1218
     1219ifeq ($(KBUILD_EXTMOD),)
     1220        build-dir  = $(patsubst %/,%,$(dir $@))
     1221        target-dir = $(dir $@)
     1222else
     1223        zap-slash=$(filter-out .,$(patsubst %/,%,$(dir $@)))
     1224        build-dir  = $(KBUILD_EXTMOD)$(if $(zap-slash),/$(zap-slash))
     1225        target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))
     1226endif
     1227
     1228%.s: %.c prepare scripts FORCE
     1229    $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
     1230%.i: %.c prepare scripts FORCE
     1231    $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
     1232%.o: %.c prepare scripts FORCE
     1233    $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
     1234%.lst: %.c prepare scripts FORCE
     1235    $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
     1236%.s: %.S prepare scripts FORCE
     1237    $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
     1238%.o: %.S prepare scripts FORCE
     1239    $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
     1240
     1241# Modules
     1242/ %/: prepare scripts FORCE
     1243    $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
     1244    $(build)=$(build-dir)
     1245%.ko: prepare scripts FORCE
     1246    $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1)   \
     1247    $(build)=$(build-dir) $(@:.ko=.o)
     1248    $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
     1249
     1250# FIXME Should go into a make.lib or something
     1251# ===========================================================================
     1252
     1253quiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN   $(wildcard $(rm-dirs)))
     1254      cmd_rmdirs = rm -rf $(rm-dirs)
     1255
     1256quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN   $(wildcard $(rm-files)))
     1257      cmd_rmfiles = rm -f $(rm-files)
     1258
     1259
     1260a_flags = -Wp,-MD,$(depfile) $(AFLAGS) $(AFLAGS_KERNEL) \
     1261      $(NOSTDINC_FLAGS) $(CPPFLAGS) \
     1262      $(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(*F).o)
     1263
     1264quiet_cmd_as_o_S = AS      $@
     1265cmd_as_o_S       = $(CC) $(a_flags) -c -o $@ $<
     1266
     1267# read all saved command lines
     1268
     1269targets := $(wildcard $(sort $(targets)))
     1270cmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
     1271
     1272ifneq ($(cmd_files),)
     1273  $(cmd_files): ;   # Do not try to update included dependency files
     1274  include $(cmd_files)
     1275endif
     1276
     1277# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=dir
     1278# Usage:
     1279# $(Q)$(MAKE) $(clean)=dir
     1280clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj
     1281
     1282endif   # skip-makefile
     1283
     1284PHONY += FORCE
     1285FORCE:
     1286
     1287-include $(srctree)/Makefile.custom
     1288
     1289# Declare the contents of the .PHONY variable as phony.  We keep that
     1290# information in a variable se we can use it in if_changed and friends.
     1291.PHONY: $(PHONY)
Note: See TracChangeset for help on using the changeset viewer.