1 # Rules.make for busybox
3 # Copyright (C) 1999-2005 by Erik Andersen <andersen@codepoet.org>
5 # Licensed under GPLv2, see the file LICENSE in this tarball for details.
8 # Pull in the user's busybox configuration
9 ifeq ($(filter $(noconfig_targets
),$(MAKECMDGOALS
)),)
10 -include $(top_builddir
)/.config
13 #--------------------------------------------------------
19 VERSION
:=$(MAJOR_VERSION
).
$(MINOR_VERSION
).
$(SUBLEVEL_VERSION
)$(EXTRAVERSION
)
20 BUILDTIME
:= $(shell TZ
=UTC date
-u
"+%Y.%m.%d-%H:%M%z")
23 #--------------------------------------------------------
24 # With a modern GNU make(1) (highly recommended, that's what all the
25 # developers use), all of the following configuration values can be
26 # overridden at the command line. For example:
27 # make CROSS=powerpc-linux- top_srcdir="$HOME/busybox" PREFIX=/mnt/app
28 #--------------------------------------------------------
30 # If you are running a cross compiler, you will want to set 'CROSS'
31 # to something more interesting... Target architecture is determined
32 # by asking the CC compiler what arch it compiles things for, so unless
33 # your compiler is broken, you should not need to specify TARGET_ARCH
34 CROSS
=$(subst ",, $(strip $(CROSS_COMPILER_PREFIX)))
42 # MAKEFILES = $(top_builddir)/.config
53 # What OS are you compiling busybox for? This allows you to include
54 # OS specific things, syscall overrides, etc.
57 # Select the compiler needed to build binaries for your development system
59 HOSTCFLAGS= -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
61 # Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc.
64 # If you want to add some simple compiler switches (like -march=i686),
65 # especially from the command line, use this instead of CFLAGS directly.
66 # For optimization overrides, it's better still to set OPTIMIZATION.
67 CFLAGS_EXTRA=$(subst ",, $(strip $(EXTRA_CFLAGS_OPTIONS
)))
69 # To compile vs some other alternative libc, you may need to use/adjust
70 # the following lines to meet your needs...
72 # If you are using Red Hat 6.x with the compatible RPMs (for developing under
73 # Red Hat 5.x and glibc 2.0) uncomment the following. Be sure to read about
74 # using the compatible RPMs (compat-*) at http://www.redhat.com !
75 #LIBCDIR:=/usr/i386-glibc20-linux
77 # For other libraries, you are on your own. But these may (or may not) help...
79 #LIBRARIES:=$(LIBCDIR)/lib/libc.a -lgcc
80 #CROSS_CFLAGS+=-nostdinc -I$(LIBCDIR)/include -I$(GCCINCDIR) -funsigned-char
81 #GCCINCDIR:=$(shell gcc -print-search-dirs | sed -ne "s/install: \(.*\)/\1include/gp")
83 WARNINGS
=-Wall
-Wstrict-prototypes
-Wshadow
84 CFLAGS
=-I
$(top_builddir
)/include -I
$(top_srcdir
)/include -I
$(srcdir)
88 # gcc centric. Perhaps fiddle with findstring gcc,$(CC) for the rest
89 # get the CC MAJOR/MINOR version
90 CC_MAJOR
:=$(shell printf
"%02d" $(shell echo __GNUC__ |
$(CC
) -E
-xc
- | tail
-n
1))
91 CC_MINOR
:=$(shell printf
"%02d" $(shell echo __GNUC_MINOR__ |
$(CC
) -E
-xc
- | tail
-n
1))
93 #--------------------------------------------------------
94 export VERSION BUILDTIME HOSTCC HOSTCFLAGS CROSS CC AR AS LD NM STRIP CPP
95 ifeq ($(strip $(TARGET_ARCH
)),)
96 TARGET_ARCH
:=$(shell $(CC
) -dumpmachine | sed
-e s
'/-.*//' \
98 -e
's/sparc.*/sparc/' \
100 -e
's/m68k.*/m68k/' \
101 -e
's/ppc/powerpc/g' \
102 -e
's/v850.*/v850/g' \
104 -e
's/mips-.*/mips/' \
105 -e
's/mipsel-.*/mipsel/' \
106 -e
's/cris.*/cris/' \
110 # A nifty macro to make testing gcc features easier
112 if
[ "$(1)" != "" ]; then \
113 if
$(CC
) $(1) -S
-o
/dev
/null
-xc
/dev
/null
> /dev
/null
2>&1; \
114 then echo
"$(1)"; else echo
"$(2)"; fi \
117 # Setup some shortcuts so that silent mode is silent like it should be
118 ifeq ($(subst s
,,$(MAKEFLAGS
)),$(MAKEFLAGS
))
119 export MAKE_IS_SILENT
=n
122 export MAKE_IS_SILENT
=y
126 CFLAGS
+=$(call check_gcc
,-funsigned-char
,)
128 #--------------------------------------------------------
129 # Arch specific compiler optimization stuff should go here.
130 # Unless you want to override the defaults, do not set anything
131 # for OPTIMIZATION...
133 # use '-Os' optimization if available, else use -O2
134 OPTIMIZATION
:=$(call check_gcc
,-Os
,-O2
)
136 # Some nice architecture specific optimizations
137 ifeq ($(strip $(TARGET_ARCH
)),arm
)
138 OPTIMIZATION
+=-fstrict-aliasing
140 ifeq ($(strip $(TARGET_ARCH
)),i386
)
141 OPTIMIZATION
+=$(call check_gcc
,-march
=i386
,)
142 OPTIMIZATION
+=$(call check_gcc
,-mpreferred-stack-boundary
=2,)
143 OPTIMIZATION
+=$(call check_gcc
,-falign-functions
=0 -falign-jumps
=0 -falign-loops
=0,\
144 -malign-functions
=0 -malign-jumps
=0 -malign-loops
=0)
146 OPTIMIZATIONS
:=$(OPTIMIZATION
) -fomit-frame-pointer
149 #--------------------------------------------------------
150 # If you're going to do a lot of builds with a non-vanilla configuration,
151 # it makes sense to adjust parameters above, so you can type "make"
152 # by itself, instead of following it by the same half-dozen overrides
153 # every time. The stuff below, on the other hand, is probably less
154 # prone to casual user adjustment.
157 ifeq ($(strip $(CONFIG_LFS
)),y
)
158 # For large file summit support
159 CFLAGS
+=-D_LARGEFILE_SOURCE
-D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS
=64
161 ifeq ($(strip $(CONFIG_DMALLOC
)),y
)
162 # For testing mem leaks with dmalloc
166 ifeq ($(strip $(CONFIG_EFENCE
)),y
)
170 ifeq ($(strip $(CONFIG_DEBUG
)),y
)
171 CFLAGS
+=$(WARNINGS
) -g
-D_GNU_SOURCE
172 LDFLAGS
+=-Wl
,-warn-common
173 STRIPCMD
:=/bin
/true
-Not_stripping_since_we_are_debugging
175 CFLAGS
+=$(WARNINGS
) $(OPTIMIZATIONS
) -D_GNU_SOURCE
-DNDEBUG
176 LDFLAGS
+= -Wl
,-warn-common
177 STRIPCMD
:=$(STRIP
) -s
--remove-section
=.note
--remove-section
=.comment
179 ifeq ($(strip $(CONFIG_STATIC
)),y
)
183 ifeq ($(strip $(CONFIG_SELINUX
)),y
)
184 LIBRARIES
+= -lselinux
187 ifeq ($(strip $(PREFIX
)),)
188 PREFIX
:=`pwd`/_install
191 # Additional complications due to support for pristine source dir.
192 # Include files in the build directory should take precedence over
193 # the copy in top_srcdir, both during the compilation phase and the
194 # shell script that finds the list of object files.
195 # Work in progress by <ldoolitt@recycle.lbl.gov>.
198 OBJECTS
:=$(APPLET_SOURCES
:.c
=.o
) busybox.o usage.o applets.o
199 CFLAGS
+= $(CROSS_CFLAGS
)
201 CFLAGS
+= -DINIT_SCRIPT
='"$(BB_INIT_SCRIPT)"'
204 # Put user-supplied flags at the end, where they
205 # have a chance of winning.
206 CFLAGS
+= $(CFLAGS_EXTRA
)
208 #------------------------------------------------------------
209 # Installation options
210 ifeq ($(strip $(CONFIG_INSTALL_APPLET_HARDLINKS
)),y
)
211 INSTALL_OPTS
=--hardlinks
213 ifeq ($(strip $(CONFIG_INSTALL_APPLET_SYMLINKS
)),y
)
214 INSTALL_OPTS
=--symlinks
216 ifeq ($(strip $(CONFIG_INSTALL_APPLET_DONT
)),y
)