source: MondoRescue/branches/3.3/mindi-busybox/Makefile.flags@ 3734

Last change on this file since 3734 was 3621, checked in by Bruno Cornec, 10 years ago

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

File size: 6.8 KB
Line 
1# ==========================================================================
2# Build system
3# ==========================================================================
4
5BB_VER = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
6export BB_VER
7SKIP_STRIP ?= n
8
9# -std=gnu99 needed for [U]LLONG_MAX on some systems
10CPPFLAGS += $(call cc-option,-std=gnu99,)
11
12CPPFLAGS += \
13 -Iinclude -Ilibbb \
14 $(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include -I$(srctree)/libbb) \
15 -include include/autoconf.h \
16 -D_GNU_SOURCE -DNDEBUG \
17 $(if $(CONFIG_LFS),-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64) \
18 -D"BB_VER=KBUILD_STR($(BB_VER))" -DBB_BT=AUTOCONF_TIMESTAMP
19
20CFLAGS += $(call cc-option,-Wall,)
21CFLAGS += $(call cc-option,-Wshadow,)
22CFLAGS += $(call cc-option,-Wwrite-strings,)
23CFLAGS += $(call cc-option,-Wundef,)
24CFLAGS += $(call cc-option,-Wstrict-prototypes,)
25CFLAGS += $(call cc-option,-Wunused -Wunused-parameter,)
26CFLAGS += $(call cc-option,-Wunused-function -Wunused-value,)
27CFLAGS += $(call cc-option,-Wmissing-prototypes -Wmissing-declarations,)
28CFLAGS += $(call cc-option,-Wno-format-security,)
29# warn about C99 declaration after statement
30CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
31# If you want to add more -Wsomething above, make sure that it is
32# still possible to build bbox without warnings.
33
34ifeq ($(CONFIG_WERROR),y)
35CFLAGS += $(call cc-option,-Werror,)
36## TODO:
37## gcc version 4.4.0 20090506 (Red Hat 4.4.0-4) (GCC) is a PITA:
38## const char *ptr; ... off_t v = *(off_t*)ptr; -> BOOM
39## and no easy way to convince it to shut the hell up.
40## We have a lot of such things all over the place.
41## Classic *(off_t*)(void*)ptr does not work,
42## and I am unwilling to do crazy gcc specific ({ void *ppp = ...; })
43## stuff in macros. This would obfuscate the code too much.
44## Maybe try __attribute__((__may_alias__))?
45#CFLAGS += $(call cc-ifversion, -eq, 0404, -fno-strict-aliasing)
46endif
47# gcc 3.x emits bogus "old style proto" warning on find.c:alloc_action()
48CFLAGS += $(call cc-ifversion, -ge, 0400, -Wold-style-definition)
49
50CFLAGS += $(call cc-option,-fno-builtin-strlen -finline-limit=0 -fomit-frame-pointer -ffunction-sections -fdata-sections,)
51# -fno-guess-branch-probability: prohibit pseudo-random guessing
52# of branch probabilities (hopefully makes bloatcheck more stable):
53CFLAGS += $(call cc-option,-fno-guess-branch-probability,)
54CFLAGS += $(call cc-option,-funsigned-char -static-libgcc,)
55CFLAGS += $(call cc-option,-falign-functions=1 -falign-jumps=1 -falign-labels=1 -falign-loops=1,)
56# Defeat .eh_frame bloat (gcc 4.6.3 x86-32 defconfig: 20% smaller busybox binary):
57CFLAGS += $(call cc-option,-fno-unwind-tables,)
58CFLAGS += $(call cc-option,-fno-asynchronous-unwind-tables,)
59# No automatic printf->puts,putchar conversions
60# (try disabling this and comparing assembly, it's instructive)
61CFLAGS += $(call cc-option,-fno-builtin-printf,)
62
63# FIXME: These warnings are at least partially to be concerned about and should
64# be fixed..
65#CFLAGS += $(call cc-option,-Wconversion,)
66
67ifneq ($(CONFIG_DEBUG),y)
68CFLAGS += $(call cc-option,-Os,$(call cc-option,-O2,))
69else
70CFLAGS += $(call cc-option,-g,)
71#CFLAGS += "-D_FORTIFY_SOURCE=2"
72ifeq ($(CONFIG_DEBUG_PESSIMIZE),y)
73CFLAGS += $(call cc-option,-O0,)
74else
75CFLAGS += $(call cc-option,-Os,$(call cc-option,-O2,))
76endif
77endif
78ifeq ($(CONFIG_DEBUG_SANITIZE),y)
79CFLAGS += $(call cc-option,-fsanitize=address,)
80CFLAGS += $(call cc-option,-fsanitize=leak,)
81CFLAGS += $(call cc-option,-fsanitize=undefined,)
82endif
83
84# If arch/$(ARCH)/Makefile did not override it (with, say, -fPIC)...
85ARCH_FPIC ?= -fpic
86ARCH_FPIE ?= -fpie
87ARCH_PIE ?= -pie
88
89# Usage: $(eval $(call pkg_check_modules,VARIABLE-PREFIX,MODULES))
90define pkg_check_modules
91$(1)_CFLAGS := $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags $(2))
92$(1)_LIBS := $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs $(2))
93endef
94
95ifeq ($(CONFIG_BUILD_LIBBUSYBOX),y)
96# on i386: 14% smaller libbusybox.so
97# (code itself is 9% bigger, we save on relocs/PLT/GOT)
98CFLAGS += $(ARCH_FPIC)
99# and another 4% reduction of libbusybox.so:
100# (external entry points must be marked EXTERNALLY_VISIBLE)
101CFLAGS += $(call cc-option,-fvisibility=hidden)
102endif
103
104ifeq ($(CONFIG_STATIC),y)
105CFLAGS_busybox += -static
106PKG_CONFIG_FLAGS += --static
107endif
108
109ifeq ($(CONFIG_PIE),y)
110CFLAGS_busybox += $(ARCH_PIE)
111CFLAGS += $(ARCH_FPIE)
112endif
113
114ifneq ($(CONFIG_EXTRA_CFLAGS),)
115CFLAGS += $(strip $(subst ",,$(CONFIG_EXTRA_CFLAGS)))
116#"))
117endif
118
119# Note: both "" (string consisting of two quote chars) and empty string
120# are possible, and should be skipped below.
121ifneq ($(subst "",,$(CONFIG_SYSROOT)),)
122CFLAGS += --sysroot=$(CONFIG_SYSROOT)
123export SYSROOT=$(CONFIG_SYSROOT)
124endif
125
126# Android has no separate crypt library
127# gcc-4.2.1 fails if we try to feed C source on stdin:
128# echo 'int main(void){return 0;}' | $(CC) $(CFLAGS) -lcrypt -o /dev/null -xc -
129# fall back to using a temp file:
130CRYPT_AVAILABLE := $(shell echo 'int main(void){return 0;}' >crypttest.c; $(CC) $(CFLAGS) -lcrypt -o /dev/null crypttest.c >/dev/null 2>&1 && echo "y"; rm crypttest.c)
131ifeq ($(CRYPT_AVAILABLE),y)
132LDLIBS += m crypt
133else
134LDLIBS += m
135endif
136
137# libpam may use libpthread, libdl and/or libaudit.
138# On some platforms that requires an explicit -lpthread, -ldl, -laudit.
139# However, on *other platforms* it fails when some of those flags
140# given needlessly. On some systems, crypt needs pthread.
141#
142# I even had a system where a runtime test for pthread
143# (similar to CRYPT_AVAILABLE test above) was not reliable.
144#
145# Do not propagate this mess by adding libraries to CONFIG_PAM/CRYPT_AVAILABLE blocks.
146# Add libraries you need to CONFIG_EXTRA_LDLIBS instead.
147
148ifeq ($(CONFIG_PAM),y)
149LDLIBS += pam pam_misc
150endif
151
152ifeq ($(CONFIG_SELINUX),y)
153SELINUX_PC_MODULES = libselinux libsepol
154$(eval $(call pkg_check_modules,SELINUX,$(SELINUX_PC_MODULES)))
155CPPFLAGS += $(SELINUX_CFLAGS)
156LDLIBS += $(if $(SELINUX_LIBS),$(SELINUX_LIBS:-l%=%),$(SELINUX_PC_MODULES:lib%=%))
157endif
158
159ifeq ($(CONFIG_EFENCE),y)
160LDLIBS += efence
161endif
162
163ifeq ($(CONFIG_DMALLOC),y)
164LDLIBS += dmalloc
165endif
166
167# If a flat binary should be built, CFLAGS_busybox="-elf2flt"
168# env var should be set for make invocation.
169# Here we check whether CFLAGS_busybox indeed contains that flag.
170# (For historical reasons, we also check LDFLAGS, which doesn't
171# seem to be entirely correct variable to put "-elf2flt" into).
172W_ELF2FLT = -elf2flt
173ifneq (,$(findstring $(W_ELF2FLT),$(LDFLAGS) $(CFLAGS_busybox)))
174SKIP_STRIP = y
175endif
176
177ifneq ($(CONFIG_EXTRA_LDFLAGS),)
178LDFLAGS += $(strip $(subst ",,$(CONFIG_EXTRA_LDFLAGS)))
179#"))
180endif
181
182ifneq ($(CONFIG_EXTRA_LDLIBS),)
183LDLIBS += $(strip $(subst ",,$(CONFIG_EXTRA_LDLIBS)))
184#"))
185endif
186
187# Busybox is a stack-fatty so make sure we increase default size
188# TODO: use "make stksizes" to find & fix big stack users
189# (we stole scripts/checkstack.pl from the kernel... thanks guys!)
190# Reduced from 20k to 16k in 1.9.0.
191FLTFLAGS += -s 16000
Note: See TracBrowser for help on using the repository browser.