]>
Commit | Line | Data |
---|---|---|
2c8e931c | 1 | # Rules.make for uClibc |
af1112c8 | 2 | # |
5a653498 | 3 | # Copyright (C) 2000 by Lineo, inc. |
58bd16ab | 4 | # Copyright (C) 2000-2002 Erik Andersen <[email protected]> |
af1112c8 EA |
5 | # |
6 | # This program is free software; you can redistribute it and/or modify it under | |
7 | # the terms of the GNU Library General Public License as published by the Free | |
8 | # Software Foundation; either version 2 of the License, or (at your option) any | |
9 | # later version. | |
10 | # | |
11 | # This program is distributed in the hope that it will be useful, but WITHOUT | |
12 | # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
91102e0d | 13 | # FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more |
af1112c8 EA |
14 | # details. |
15 | # | |
4d45bcff EA |
16 | # You should have received a copy of the GNU Library General Public License |
17 | # along with this program; if not, write to the Free Software Foundation, Inc., | |
18 | # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
af1112c8 | 19 | |
f149abb8 | 20 | |
5f9dfa09 MF |
21 | #----------------------------------------------------------- |
22 | # This file contains rules which are shared between multiple | |
23 | # Makefiles. All normal configuration options live in the | |
24 | # file named ".config". Don't mess with this file unless | |
25 | # you know what you are doing. | |
f149abb8 EA |
26 | |
27 | ||
5f9dfa09 MF |
28 | #----------------------------------------------------------- |
29 | # If you are running a cross compiler, you will want to set | |
30 | # 'CROSS' to something more interesting ... Target | |
31 | # architecture is determined by asking the CC compiler what | |
32 | # arch it compiles things for, so unless your compiler is | |
33 | # broken, you should not need to specify TARGET_ARCH. | |
f149abb8 EA |
34 | # |
35 | # Most people will set this stuff on the command line, i.e. | |
f21f7c41 EA |
36 | # make CROSS=arm-linux- |
37 | # will build uClibc for 'arm'. | |
f149abb8 | 38 | |
b2eb218f | 39 | ifndef CROSS |
c92bcb00 | 40 | CROSS= |
b2eb218f | 41 | endif |
5f9dfa09 MF |
42 | CC = $(CROSS)gcc |
43 | AR = $(CROSS)ar | |
44 | LD = $(CROSS)ld | |
45 | NM = $(CROSS)nm | |
46 | RANLIB = $(CROSS)ranlib | |
47 | STRIPTOOL = $(CROSS)strip | |
6737908f | 48 | |
5f9dfa09 MF |
49 | INSTALL = install |
50 | LN = ln | |
51 | RM = rm -f | |
49f0dd0f | 52 | |
6737908f | 53 | # Select the compiler needed to build binaries for your development system |
5f9dfa09 MF |
54 | HOSTCC = gcc |
55 | HOSTCFLAGS = -O2 -Wall | |
6737908f | 56 | |
af1112c8 | 57 | |
5f9dfa09 MF |
58 | #--------------------------------------------------------- |
59 | # Nothing beyond this point should ever be touched by mere | |
60 | # mortals. Unless you hang out with the gods, you should | |
61 | # probably leave all this stuff alone. | |
62 | MAJOR_VERSION := 0 | |
63 | MINOR_VERSION := 9 | |
64 | SUBLEVEL := 27 | |
65 | VERSION := $(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL) | |
2c84741c | 66 | # Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc. |
5f9dfa09 | 67 | LC_ALL := C |
f5636fb2 | 68 | export MAJOR_VERSION MINOR_VERSION SUBLEVEL VERSION LC_ALL |
58bd16ab | 69 | |
58bd16ab | 70 | SHARED_FULLNAME:=libuClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so |
5739992b EA |
71 | SHARED_MAJORNAME:=libc.so.$(MAJOR_VERSION) |
72 | UCLIBC_LDSO:=ld-uClibc.so.$(MAJOR_VERSION) | |
6737908f EA |
73 | LIBNAME:=libc.a |
74 | LIBC:=$(TOPDIR)libc/$(LIBNAME) | |
c75d8083 | 75 | |
129b1d71 MF |
76 | # Make sure DESTDIR and PREFIX can be used to install |
77 | # PREFIX is a uClibcism while DESTDIR is a common GNUism | |
78 | ifndef PREFIX | |
79 | PREFIX = $(DESTDIR) | |
80 | endif | |
81 | ||
6737908f EA |
82 | # Pull in the user's uClibc configuration |
83 | ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),) | |
6737908f EA |
84 | -include $(TOPDIR).config |
85 | endif | |
86 | ||
05827f4c | 87 | ifndef CROSS |
ce23f5cd | 88 | CROSS=$(subst ",, $(strip $(CROSS_COMPILER_PREFIX))) |
05827f4c MF |
89 | endif |
90 | ||
efe79476 EA |
91 | # A nifty macro to make testing gcc features easier |
92 | check_gcc=$(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \ | |
93 | then echo "$(1)"; else echo "$(2)"; fi) | |
94 | ||
f8a3fa02 | 95 | # Make certain these contain a final "/", but no "//"s. |
52214b70 | 96 | TARGET_ARCH:=$(strip $(subst ",, $(strip $(TARGET_ARCH)))) |
f8a3fa02 EA |
97 | RUNTIME_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(RUNTIME_PREFIX)))))) |
98 | DEVEL_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(DEVEL_PREFIX)))))) | |
99 | export RUNTIME_PREFIX DEVEL_PREFIX | |
aa966844 EA |
100 | |
101 | ARFLAGS:=r | |
102 | ||
efe79476 | 103 | OPTIMIZATION:= |
783a979b | 104 | PICFLAG:=-fPIC |
f8e6aa06 | 105 | |
46a413e1 JT |
106 | PIEFLAG:=$(call check_gcc,-fPIE,) |
107 | ifeq ($(strip $(PIEFLAG)),-fPIE) | |
f8e6aa06 | 108 | LDPIEFLAG:=$(shell $(LD) --help | grep -q pie && echo "-Wl,-pie") |
46a413e1 | 109 | endif |
4efa075c | 110 | |
0c6405c1 | 111 | # Some nice CPU specific optimizations |
06d634ea | 112 | ifeq ($(strip $(TARGET_ARCH)),i386) |
efe79476 | 113 | OPTIMIZATION+=$(call check_gcc,-mpreferred-stack-boundary=2,) |
0c6405c1 | 114 | OPTIMIZATION+=$(call check_gcc,-falign-jumps=0 -falign-loops=0,-malign-jumps=0 -malign-loops=0) |
6a2d1ca4 EA |
115 | CPU_CFLAGS-$(CONFIG_386)+=-march=i386 |
116 | CPU_CFLAGS-$(CONFIG_486)+=-march=i486 | |
bbab258a | 117 | CPU_CFLAGS-$(CONFIG_ELAN)+=-march=i486 |
6a2d1ca4 EA |
118 | CPU_CFLAGS-$(CONFIG_586)+=-march=i586 |
119 | CPU_CFLAGS-$(CONFIG_586MMX)+=$(call check_gcc,-march=pentium-mmx,-march=i586) | |
120 | CPU_CFLAGS-$(CONFIG_686)+=-march=i686 | |
bbab258a | 121 | CPU_CFLAGS-$(CONFIG_PENTIUMII)+=$(call check_gcc,-march=pentium2,-march=i686) |
6a2d1ca4 EA |
122 | CPU_CFLAGS-$(CONFIG_PENTIUMIII)+=$(call check_gcc,-march=pentium3,-march=i686) |
123 | CPU_CFLAGS-$(CONFIG_PENTIUM4)+=$(call check_gcc,-march=pentium4,-march=i686) | |
124 | CPU_CFLAGS-$(CONFIG_K6)+=$(call check_gcc,-march=k6,-march=i586) | |
125 | CPU_CFLAGS-$(CONFIG_K7)+=$(call check_gcc,-march=athlon,-malign-functions=4 -march=i686) | |
126 | CPU_CFLAGS-$(CONFIG_CRUSOE)+=-march=i686 -malign-functions=0 -malign-jumps=0 -malign-loops=0 | |
127 | CPU_CFLAGS-$(CONFIG_WINCHIPC6)+=$(call check_gcc,-march=winchip-c6,-march=i586) | |
128 | CPU_CFLAGS-$(CONFIG_WINCHIP2)+=$(call check_gcc,-march=winchip2,-march=i586) | |
bbab258a EA |
129 | CPU_CFLAGS-$(CONFIG_CYRIXIII)+=$(call check_gcc,-march=c3,-march=i486) -malign-functions=0 -malign-jumps=0 -malign-loops=0 |
130 | CPU_CFLAGS-$(CONFIG_NEHEMIAH)+=$(call check_gcc,-march=c3-2,-march=i686) | |
06d634ea | 131 | endif |
0c6405c1 EA |
132 | |
133 | ifeq ($(strip $(TARGET_ARCH)),arm) | |
134 | OPTIMIZATION+=-fstrict-aliasing | |
6a2d1ca4 EA |
135 | CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL |
136 | CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB | |
137 | CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-mlittle-endian | |
138 | CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mbig-endian | |
139 | CPU_CFLAGS-$(CONFIG_GENERIC_ARM)+= | |
140 | CPU_CFLAGS-$(CONFIG_ARM610)+=-mtune=arm610 -march=armv3 | |
141 | CPU_CFLAGS-$(CONFIG_ARM710)+=-mtune=arm710 -march=armv3 | |
2c84741c | 142 | CPU_CFLAGS-$(CONFIG_ARM720T)+=-mtune=arm7tdmi -march=armv4 |
6a2d1ca4 EA |
143 | CPU_CFLAGS-$(CONFIG_ARM920T)+=-mtune=arm9tdmi -march=armv4 |
144 | CPU_CFLAGS-$(CONFIG_ARM922T)+=-mtune=arm9tdmi -march=armv4 | |
145 | CPU_CFLAGS-$(CONFIG_ARM926T)+=-mtune=arm9tdmi -march=armv4 | |
146 | CPU_CFLAGS-$(CONFIG_ARM_SA110)+=-mtune=strongarm110 -march=armv4 | |
147 | CPU_CFLAGS-$(CONFIG_ARM_SA1100)+=-mtune=strongarm1100 -march=armv4 | |
da19a2df EA |
148 | CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=$(call check_gcc,-mtune=xscale,-mtune=strongarm110) |
149 | CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=-march=armv4 -Wa,-mcpu=xscale | |
0c6405c1 EA |
150 | endif |
151 | ||
f6552f74 MNI |
152 | ifeq ($(strip $(TARGET_ARCH)),mips) |
153 | CPU_CFLAGS-$(CONFIG_MIPS_ISA_1)+=-mips1 | |
154 | CPU_CFLAGS-$(CONFIG_MIPS_ISA_2)+=-mips2 -mtune=mips2 | |
155 | CPU_CFLAGS-$(CONFIG_MIPS_ISA_3)+=-mips3 -mtune=mips3 | |
156 | CPU_CFLAGS-$(CONFIG_MIPS_ISA_4)+=-mips4 -mtune=mips4 | |
157 | CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS32)+=-mips32 -mtune=mips32 | |
158 | CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS64)+=-mips64 -mtune=mips32 | |
159 | endif | |
160 | ||
d1990393 | 161 | ifeq ($(strip $(TARGET_ARCH)),sh) |
0c6405c1 | 162 | OPTIMIZATION+=-fstrict-aliasing |
f149abb8 | 163 | OPTIMIZATION+= $(call check_gcc,-mprefergot,) |
6a2d1ca4 EA |
164 | CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL |
165 | CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB | |
166 | CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-ml | |
167 | CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mb | |
168 | CPU_CFLAGS-$(CONFIG_SH2)+=-m2 | |
169 | CPU_CFLAGS-$(CONFIG_SH3)+=-m3 | |
170 | CPU_CFLAGS-$(CONFIG_SH4)+=-m4 | |
533d76fb EA |
171 | endif |
172 | ||
173 | ifeq ($(strip $(TARGET_ARCH)),sh64) | |
174 | OPTIMIZATION+=-fstrict-aliasing | |
6a2d1ca4 EA |
175 | CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN):=-EL |
176 | CPU_LDFLAGS-$(ARCH_BIG_ENDIAN):=-EB | |
177 | CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN):=-ml | |
178 | CPU_CFLAGS-$(ARCH_BIG_ENDIAN):=-mb | |
179 | CPU_CFLAGS-$(CONFIG_SH5)+=-m5-32media | |
5a2610fb | 180 | endif |
163df9f2 | 181 | |
de2abcca | 182 | ifeq ($(strip $(TARGET_ARCH)),h8300) |
6a2d1ca4 EA |
183 | CPU_LDFLAGS-$(CONFIG_H8300H)+= -ms8300h |
184 | CPU_LDFLAGS-$(CONFIG_H8S) += -ms8300s | |
dd7edf2e DM |
185 | CPU_CFLAGS-$(CONFIG_H8300H) += -mh -mint32 -fsigned-char |
186 | CPU_CFLAGS-$(CONFIG_H8S) += -ms -mint32 -fsigned-char | |
de2abcca EA |
187 | endif |
188 | ||
afb1cd9b | 189 | ifeq ($(strip $(TARGET_ARCH)),cris) |
6a2d1ca4 EA |
190 | CPU_LDFLAGS-$(CONFIG_CRIS)+=-mcrislinux |
191 | CPU_CFLAGS-$(CONFIG_CRIS)+=-mlinux | |
783a979b | 192 | PICFLAG:=-fpic |
46a413e1 | 193 | PIEFLAG:=$(call check_gcc,-fpie,) |
783a979b JT |
194 | endif |
195 | ||
196 | ifeq ($(strip $(TARGET_ARCH)),powerpc) | |
197 | # PowerPC can hold 8192 entries in its GOT with -fpic which is more than | |
198 | # enough. Therefore use -fpic which will reduce code size and generates | |
199 | # faster code. | |
200 | PICFLAG:=-fpic | |
5941632e | 201 | PIEFLAG:=$(call check_gcc,-fpie,) |
afb1cd9b TA |
202 | endif |
203 | ||
baa67289 EA |
204 | ifeq ($(strip $(TARGET_ARCH)),frv) |
205 | CPU_LDFLAGS-$(CONFIG_FRV)+=-melf32frvfd | |
206 | CPU_CFLAGS-$(CONFIG_FRV)+=-mfdpic | |
207 | PICFLAG=-fPIC -DPIC | |
baa67289 EA |
208 | # Using -pie causes the program to have an interpreter, which is |
209 | # forbidden, so we must make do with -shared. Unfortunately, | |
210 | # -shared by itself would get us global function descriptors | |
211 | # and calls through PLTs, dynamic resolution of symbols, etc, | |
212 | # which would break as well, but -Bsymbolic comes to the rescue. | |
213 | LDPIEFLAG=-shared -Bsymbolic | |
214 | UCLIBC_LDSO=ld.so.1 | |
215 | endif | |
216 | ||
1b44e1b2 | 217 | # Use '-Os' optimization if available, else use -O2, allow Config to override |
956574dc | 218 | OPTIMIZATION+=$(call check_gcc,-Os,-O2) |
1b44e1b2 EA |
219 | # Use the gcc 3.4 -funit-at-a-time optimization when available |
220 | OPTIMIZATION+=$(call check_gcc,-funit-at-a-time,) | |
bddae88b EA |
221 | |
222 | ||
aa966844 | 223 | # Add a bunch of extra pedantic annoyingly strict checks |
b340985b EA |
224 | XWARNINGS=$(subst ",, $(strip $(WARNINGS))) -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing |
225 | XARCH_CFLAGS=$(subst ",, $(strip $(ARCH_CFLAGS))) | |
c52c2a24 | 226 | CPU_CFLAGS=$(subst ",, $(strip $(CPU_CFLAGS-y))) |
53d8027c MNI |
227 | |
228 | LDADD_LIBFLOAT= | |
229 | ifeq ($(strip $(UCLIBC_HAS_SOFT_FLOAT)),y) | |
230 | # Add -msoft-float to the CPU_FLAGS since ldso and libdl ignore CFLAGS. | |
231 | # If -msoft-float isn't supported, we want an error anyway. | |
3c44c596 MNI |
232 | # Hmm... might need to revisit this for arm since it has 2 different |
233 | # soft float encodings. | |
53d8027c MNI |
234 | CPU_CFLAGS += -msoft-float |
235 | ifeq ($(strip $(TARGET_ARCH)),arm) | |
3c44c596 MNI |
236 | # No longer needed with current toolchains, but leave it here for now. |
237 | # If anyone is actually still using gcc 2.95 (say), they can uncomment it. | |
238 | # LDADD_LIBFLOAT=-lfloat | |
53d8027c MNI |
239 | endif |
240 | endif | |
241 | ||
e320e67f | 242 | ifneq ($(UCLIBC_BUILD_PIE),y) |
46a413e1 JT |
243 | PIEFLAG= |
244 | LDPIEFLAG= | |
245 | endif | |
246 | ||
3d831a7c | 247 | SSP_DISABLE_FLAGS=$(call check_gcc,-fno-stack-protector,) |
433ccbdd | 248 | ifeq ($(UCLIBC_BUILD_SSP),y) |
9d7a22d3 MNI |
249 | SSP_CFLAGS=$(call check_gcc,-fno-stack-protector-all,) |
250 | SSP_CFLAGS+=$(call check_gcc,-fstack-protector,) | |
3d831a7c EA |
251 | SSP_ALL_CFLAGS=$(call check_gcc,-fstack-protector-all,) |
252 | else | |
253 | SSP_CFLAGS=$(SSP_DISABLE_FLAGS) | |
9d7a22d3 MNI |
254 | endif |
255 | ||
e75a596e | 256 | # Some nice CFLAGS to work with |
9d7a22d3 | 257 | CFLAGS=$(XWARNINGS) $(OPTIMIZATION) $(XARCH_CFLAGS) $(CPU_CFLAGS) $(SSP_CFLAGS) \ |
b340985b | 258 | -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)include -I. |
aa966844 | 259 | |
98fd3d6c | 260 | ifeq ($(DODEBUG),y) |
548a9b72 | 261 | #CFLAGS += -g3 |
3d831a7c EA |
262 | CFLAGS = $(XWARNINGS) -O0 -g3 $(CPU_CFLAGS) $(SSP_CFLAGS) \ |
263 | -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)include -I. | |
98fd3d6c EA |
264 | LDFLAGS:= $(CPU_LDFLAGS-y) -shared --warn-common --warn-once -z combreloc |
265 | STRIPTOOL:= true -Since_we_are_debugging | |
98fd3d6c EA |
266 | else |
267 | LDFLAGS := $(CPU_LDFLAGS-y) -s -shared --warn-common --warn-once -z combreloc | |
268 | endif | |
269 | ||
6ae64d25 EA |
270 | ifeq ($(UCLIBC_BUILD_RELRO),y) |
271 | LDFLAGS+=-z relro | |
272 | endif | |
273 | ||
274 | ifeq ($(UCLIBC_BUILD_NOW),y) | |
275 | LDFLAGS+=-z now | |
276 | endif | |
277 | ||
4775ec64 EA |
278 | # Sigh, some stupid versions of gcc can't seem to cope with '-iwithprefix include' |
279 | #CFLAGS+=-iwithprefix include | |
a56073a2 | 280 | CFLAGS+=-isystem $(shell $(CC) -print-file-name=include) |
4775ec64 | 281 | |
98fd3d6c | 282 | ifneq ($(DOASSERTS),y) |
0dd72555 MB |
283 | CFLAGS += -DNDEBUG |
284 | endif | |
c5207a55 | 285 | |
98fd3d6c | 286 | ifeq ($(HAVE_SHARED),y) |
98fd3d6c | 287 | ifeq ($(BUILD_UCLIBC_LDSO),y) |
99dd5f42 | 288 | LDSO:=$(TOPDIR)lib/$(UCLIBC_LDSO) |
f8a3fa02 | 289 | DYNAMIC_LINKER:=$(SHARED_LIB_LOADER_PREFIX)/$(UCLIBC_LDSO) |
5811a4e8 | 290 | else |
99dd5f42 | 291 | LDSO:=$(SYSTEM_LDSO) |
b6127d0d | 292 | DYNAMIC_LINKER:=/lib/$(strip $(subst ",, $(notdir $(SYSTEM_LDSO)))) |
99dd5f42 | 293 | endif |
eba708a6 | 294 | endif |
f72338a3 | 295 | |
7993e170 | 296 | CFLAGS_NOPIC:=$(CFLAGS) |
98fd3d6c | 297 | ifeq ($(DOPIC),y) |
ecbc93c3 | 298 | CFLAGS += $(PICFLAG) |
afb1cd9b TA |
299 | endif |
300 | ||
4a56d69f | 301 | ASFLAGS = $(CFLAGS) |
f8e6aa06 EA |
302 | ifeq ($(UCLIBC_BUILD_NOEXECSTACK),y) |
303 | check_as_noexecstack=$(shell if $(LD) --help | grep -q "z noexecstack"; then echo "-Wa,--noexecstack"; fi) | |
304 | ASFLAGS += $(check_as_noexecstack) | |
305 | endif | |
4a56d69f | 306 | |
881e6dca | 307 | LIBGCC_CFLAGS ?= $(CFLAGS) $(CPU_CFLAGS-y) |
f149abb8 EA |
308 | LIBGCC:=$(shell $(CC) $(LIBGCC_CFLAGS) -print-libgcc-file-name) |
309 | LIBGCC_DIR:=$(dir $(LIBGCC)) | |
310 | ||
b2eb218f DM |
311 | ######################################## |
312 | # | |
313 | # uClinux shared lib support | |
314 | # | |
315 | ||
dd7edf2e | 316 | ifeq ($(CONFIG_BINFMT_SHARED_FLAT),y) |
b2eb218f DM |
317 | # For the shared version of this, we specify no stack and its library ID |
318 | FLTFLAGS += -s 0 | |
319 | LIBID=1 | |
320 | export LIBID FLTFLAGS | |
321 | SHARED_TARGET = lib/libc | |
322 | endif | |
323 | ||
f8a3fa02 | 324 | TARGET_ARCH:=$(strip $(subst ",, $(strip $(TARGET_ARCH)))) |