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