1 # Rules.make for uClibc
3 # Copyright (C) 2000-2008 Erik Andersen <andersen@uclibc.org>
5 # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
9 # FOO = bar -- recursively expanded variable. Value is remebered verbatim.
10 # If it contains references to other variables, these references
11 # are expanded whenever this variable is _substituted_.
12 # FOO := bar -- simply expanded variable. Right hand is expanded when
13 # the variable is _defined_. Therefore faster than =.
14 # FOO ?= bar -- set a value only if it is not already set
15 # (behaves as =, not :=).
16 # FOO += bar -- append; if FOO is not defined, acts like = (not :=).
19 # check for proper make version
20 ifneq ($(findstring x3.7
,x
$(MAKE_VERSION
)),)
21 $(error Your make is too old
$(MAKE_VERSION
). Go
get at least
3.80)
24 #-----------------------------------------------------------
25 # This file contains rules which are shared between multiple
26 # Makefiles. All normal configuration options live in the
27 # file named ".config". Don't mess with this file unless
28 # you know what you are doing.
31 #-----------------------------------------------------------
32 # If you are running a cross compiler, you will want to set
33 # 'CROSS' to something more interesting ... Target
34 # architecture is determined by asking the CC compiler what
35 # arch it compiles things for, so unless your compiler is
36 # broken, you should not need to specify TARGET_ARCH.
38 # Most people will set this stuff on the command line, i.e.
39 # make CROSS=arm-linux-
40 # will build uClibc for 'arm'.
49 OBJDUMP
= $(CROSS
)objdump
50 STRIPTOOL
= $(CROSS
)strip
59 STRIP_FLAGS ?
= -x
-R .note
-R .comment
61 ## unused? if yes, remove after 0.9.31
62 ## UNIFDEF := $(top_builddir)extra/scripts/unifdef
64 # Select the compiler needed to build binaries for your development system
66 BUILD_CFLAGS
= -Os
-Wall
68 #---------------------------------------------------------
69 # Nothing beyond this point should ever be touched by mere
70 # mortals. Unless you hang out with the gods, you should
71 # probably leave all this stuff alone.
74 qstrip
= $(strip $(subst ",,$(1)))
77 # Pull in the user's uClibc configuration
78 ifeq ($(filter $(noconfig_targets
),$(MAKECMDGOALS
)),)
79 -include $(top_builddir
).config
81 TARGET_ARCH
:=$(call qstrip
,$(TARGET_ARCH
))
82 ifeq ($(TARGET_ARCH
),)
83 ARCH ?
= $(shell uname
-m |
$(SED
) -e s
/i
.86/i386
/ \
84 -e s
/sun.
*/sparc
/ -e s
/sparc.
*/sparc
/ \
85 -e s
/arm.
*/arm
/ -e s
/sa110
/arm
/ \
87 -e s
/s390x
/s390
/ -e s
/parisc.
*/hppa
/ \
88 -e s
/ppc.
*/powerpc
/ -e s
/mips.
*/mips
/ \
89 -e s
/xtensa.
*/xtensa
/ )
95 # Make certain these contain a final "/", but no "//"s.
96 TARGET_SUBARCH
:=$(call qstrip
,$(shell grep
-s
'^TARGET_SUBARCH' $(top_builddir
)/.config |
$(SED
) -e
's/^TARGET_SUBARCH=//'))
97 TARGET_SUBARCH
:=$(call qstrip
,$(TARGET_SUBARCH
))
98 RUNTIME_PREFIX
:=$(strip $(subst //,/, $(subst ,/, $(call qstrip
,$(RUNTIME_PREFIX
)))))
99 DEVEL_PREFIX
:=$(strip $(subst //,/, $(subst ,/, $(call qstrip
,$(DEVEL_PREFIX
)))))
100 MULTILIB_DIR
:=$(strip $(subst //,/, $(subst ,/, $(call qstrip
,$(MULTILIB_DIR
)))))
101 KERNEL_HEADERS
:=$(strip $(subst //,/, $(subst ,/, $(call qstrip
,$(KERNEL_HEADERS
)))))
102 export RUNTIME_PREFIX DEVEL_PREFIX KERNEL_HEADERS MULTILIB_DIR
105 # Now config hard core
110 VERSION
:= $(MAJOR_VERSION
).
$(MINOR_VERSION
).
$(SUBLEVEL
)
111 ABI_VERSION
:= $(MAJOR_VERSION
)
112 ifneq ($(EXTRAVERSION
),)
113 VERSION
:= $(VERSION
)$(EXTRAVERSION
)
115 # Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc.
117 export MAJOR_VERSION MINOR_VERSION SUBLEVEL VERSION ABI_VERSION LC_ALL
120 SHARED_LIBNAME
:= $(LIBC
).so.
$(ABI_VERSION
)
121 UBACKTRACE_DSO
:= libubacktrace.so.
$(MAJOR_VERSION
)
122 ifneq ($(findstring $(TARGET_ARCH
) , hppa64 ia64 mips64 powerpc64 s390x sparc64 x86_64
),)
123 UCLIBC_LDSO_NAME
:= ld64-uClibc
124 ARCH_NATIVE_BIT
:= 64
126 UCLIBC_LDSO_NAME
:= ld-uClibc
127 ARCH_NATIVE_BIT
:= 32
129 UCLIBC_LDSO
:= $(UCLIBC_LDSO_NAME
).so.
$(ABI_VERSION
)
130 NONSHARED_LIBNAME
:= uclibc_nonshared.a
131 libc
:= $(top_builddir
)lib
/$(SHARED_LIBNAME
)
132 libc.depend
:= $(top_builddir
)lib
/$(SHARED_LIBNAME
:.
$(ABI_VERSION
)=)
133 ifneq ($(ARCH_HAS_NO_SHARED
),y
)
134 libdl.depend
:= $(top_builddir
)lib
/libdl.so
136 ifneq ($(HAS_NO_THREADS
),y
)
137 libpthread.depend
:= $(top_builddir
)lib
/libpthread.so
139 interp
:= $(top_builddir
)lib
/interp.os
140 ldso
:= $(top_builddir
)lib
/$(UCLIBC_LDSO
)
141 headers_dep
:= $(top_builddir
)include/bits
/sysnum.h
142 sub_headers
:= $(headers_dep
)
144 #LIBS :=$(interp) -L$(top_builddir)lib -lc
145 LIBS
:= $(interp
) -L
$(top_builddir
)lib
$(libc
:.
$(ABI_VERSION
)=)
147 # Make sure DESTDIR and PREFIX can be used to install
148 # PREFIX is a uClibcism while DESTDIR is a common GNUism
153 ifneq ($(HAVE_SHARED
),y
)
163 CROSS
=$(call qstrip
,$(CROSS_COMPILER_PREFIX
))
166 # A nifty macro to make testing gcc features easier
168 if
$(CC
) $(1) -S
-o
/dev
/null
-xc
/dev
/null
> /dev
/null
2>&1; \
169 then echo
"$(1)"; else echo
"$(2)"; fi
)
171 if
$(CC
) -Wa
,$(1) -Wa
,-Z
-c
-o
/dev
/null
-xassembler
/dev
/null
> /dev
/null
2>&1; \
172 then echo
"-Wa,$(1)"; fi
)
174 if
$(LD
) $(1) -o
/dev
/null
-b binary
/dev
/null
> /dev
/null
2>&1; \
175 then echo
"$(1)"; fi
)
180 # Flags in OPTIMIZATION are used only for non-debug builds
183 # Use '-Os' optimization if available, else use -O2, allow Config to override
184 OPTIMIZATION
+=$(call check_gcc
,-Os
,-O2
)
185 # Use the gcc 3.4 -funit-at-a-time optimization when available
186 OPTIMIZATION
+=$(call check_gcc
,-funit-at-a-time
,)
187 # shrinks code by about 0.1%
188 OPTIMIZATION
+=$(call check_gcc
,-fmerge-all-constants
)
190 GCC_MAJOR_VER?
=$(shell $(CC
) -dumpversion | cut
-d .
-f
1)
191 #GCC_MINOR_VER?=$(shell $(CC) -dumpversion | cut -d . -f 2)
193 ifeq ($(GCC_MAJOR_VER
),4)
194 # shrinks code, results are from 4.0.2
196 OPTIMIZATION
+=$(call check_gcc
,-fno-tree-loop-optimize
,)
198 OPTIMIZATION
+=$(call check_gcc
,-fno-tree-dominator-opts
,)
200 OPTIMIZATION
+=$(call check_gcc
,-fno-strength-reduce
,)
204 # CPU_CFLAGS-y contain options which are not warnings,
205 # not include or library paths, and not optimizations.
207 # Why -funsigned-char: I hunted a bug related to incorrect
208 # sign extension of 'char' type for 10 hours straight. Not fun.
209 CPU_CFLAGS-y
:= -funsigned-char
-fno-builtin
211 CPU_CFLAGS-y
+= $(call check_gcc
,-fno-asm
,)
214 ifeq ($(UCLIBC_HAS_SOFT_FLOAT
),y
)
215 # If -msoft-float isn't supported, we want an error anyway.
216 # Hmm... might need to revisit this for arm since it has 2 different
217 # soft float encodings.
218 ifneq ($(TARGET_ARCH
),nios
)
219 ifneq ($(TARGET_ARCH
),nios2
)
220 ifneq ($(TARGET_ARCH
),sh
)
221 CPU_CFLAGS-y
+= -msoft-float
225 ifeq ($(TARGET_ARCH
),arm
)
226 # No longer needed with current toolchains, but leave it here for now.
227 # If anyone is actually still using gcc 2.95 (say), they can uncomment it.
228 # LDADD_LIBFLOAT=-lfloat
232 CPU_CFLAGS-y
+= $(call check_gcc
,-std
=gnu99
,)
234 CPU_CFLAGS-
$(UCLIBC_FORMAT_SHARED_FLAT
) += -mid-shared-library
235 CPU_CFLAGS-
$(UCLIBC_FORMAT_FLAT_SEP_DATA
) += -msep-data
237 CPU_LDFLAGS-
$(ARCH_LITTLE_ENDIAN
) += -Wl
,-EL
238 CPU_LDFLAGS-
$(ARCH_BIG_ENDIAN
) += -Wl
,-EB
241 PICFLAG-
$(UCLIBC_FORMAT_FDPIC_ELF
) := -mfdpic
242 PICFLAG
:= $(PICFLAG-y
)
245 # Some nice CPU specific optimizations
246 ifeq ($(TARGET_ARCH
),i386
)
247 OPTIMIZATION
+=$(call check_gcc
,-fomit-frame-pointer
,)
249 ifeq ($(CONFIG_386
)$(CONFIG_486
)$(CONFIG_586
)$(CONFIG_586MMX
),y
)
250 # Non-SSE capable processor.
251 # NB: this may make SSE insns segfault!
252 # -O1 -march=pentium3, -Os -msse etc are known to be affected.
253 # See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13685
254 # -m32 is needed if host is 64-bit
255 OPTIMIZATION
+=$(call check_gcc
,-m32
-mpreferred-stack-boundary
=2,)
257 OPTIMIZATION
+=$(call check_gcc
,-mpreferred-stack-boundary
=4,)
260 # Choice of alignment (please document why!)
261 # -falign-labels: in-line labels
262 # (reachable by normal code flow, aligning will insert nops
263 # which will be executed - may even make things slower)
264 # -falign-jumps: reachable only by a jump
265 # Generic: no alignment at all (smallest code)
266 GCC_FALIGN
=$(call check_gcc
,-falign-functions
=1 -falign-jumps
=1 -falign-labels
=1 -falign-loops
=1,-malign-jumps
=1 -malign-loops
=1)
267 ifeq ($(CONFIG_K7
),y
)
268 # Align functions to four bytes, use default for jumps and loops (why?)
269 GCC_FALIGN
=$(call check_gcc
,-falign-functions
=4 -falign-labels
=1,-malign-functions
=4)
271 ifeq ($(CONFIG_CRUSOE
),y
)
272 # Use compiler's default for functions, jumps and loops (why?)
273 GCC_FALIGN
=$(call check_gcc
,-falign-functions
=0 -falign-labels
=1,-malign-functions
=0)
275 ifeq ($(CONFIG_CYRIXIII
),y
)
276 # Use compiler's default for functions, jumps and loops (why?)
277 GCC_FALIGN
=$(call check_gcc
,-falign-functions
=0 -falign-labels
=1,-malign-functions
=0)
279 OPTIMIZATION
+=$(GCC_FALIGN
)
281 # Putting each function and data object into its own section
282 # allows for kbytes of less text if users link against static uclibc
283 # using ld --gc-sections.
284 # ld 2.18 can't do that (yet?) for shared libraries, so we itself
285 # do not use --gc-sections at shared lib link time.
286 # However, in combination with sections being sorted by alignment
287 # it does result in much reduced padding:
288 # text data bss dec hex
289 # 235319 1472 5992 242783 3b45f old.so
290 # 234104 1472 5980 241556 3af94 new.so
291 # Without -ffunction-sections, all functions will get aligned
292 # to 4 byte boundary by as/ld. This is arguably a bug in as.
293 # It specifies 4 byte align for .text even if not told to do so:
294 # Idx Name Size VMA LMA File off Algn
295 # 0 .text xxxxxxxx 00000000 00000000 xxxxxxxx 2**2 <===!
296 CPU_CFLAGS-y
+= $(call check_gcc
,-ffunction-sections
-fdata-sections
,)
297 ifneq ($(call check_ld
,--sort-common
),)
298 CPU_LDFLAGS-y
+= -Wl
,--sort-common
300 ifneq ($(call check_ld
,--sort-section alignment
),)
301 CPU_LDFLAGS-y
+= -Wl
,--sort-section
,alignment
306 CPU_CFLAGS-
$(CONFIG_386
)+=-march
=i386
307 CPU_CFLAGS-
$(CONFIG_486
)+=-march
=i486
308 CPU_CFLAGS-
$(CONFIG_ELAN
)+=-march
=i486
309 CPU_CFLAGS-
$(CONFIG_586
)+=-march
=i586
310 CPU_CFLAGS-
$(CONFIG_586MMX
)+=$(call check_gcc
,-march
=pentium-mmx
,-march
=i586
)
311 CPU_CFLAGS-
$(CONFIG_686
)+=-march
=i686
312 CPU_CFLAGS-
$(CONFIG_PENTIUMII
)+=$(call check_gcc
,-march
=pentium2
,-march
=i686
)
313 CPU_CFLAGS-
$(CONFIG_PENTIUMIII
)+=$(call check_gcc
,-march
=pentium3
,-march
=i686
)
314 CPU_CFLAGS-
$(CONFIG_PENTIUM4
)+=$(call check_gcc
,-march
=pentium4
,-march
=i686
)
315 CPU_CFLAGS-
$(CONFIG_K6
)+=$(call check_gcc
,-march
=k6
,-march
=i586
)
316 CPU_CFLAGS-
$(CONFIG_K7
)+=$(call check_gcc
,-march
=athlon
,-march
=i686
)
317 CPU_CFLAGS-
$(CONFIG_CRUSOE
)+=-march
=i686
318 CPU_CFLAGS-
$(CONFIG_WINCHIPC6
)+=$(call check_gcc
,-march
=winchip-c6
,-march
=i586
)
319 CPU_CFLAGS-
$(CONFIG_WINCHIP2
)+=$(call check_gcc
,-march
=winchip2
,-march
=i586
)
320 CPU_CFLAGS-
$(CONFIG_CYRIXIII
)+=$(call check_gcc
,-march
=c3
,-march
=i486
)
321 CPU_CFLAGS-
$(CONFIG_NEHEMIAH
)+=$(call check_gcc
,-march
=c3-2
,-march
=i686
)
324 ifeq ($(TARGET_ARCH
),sparc
)
325 CPU_CFLAGS-
$(CONFIG_SPARC_V7
)+=-mcpu
=v7
326 CPU_CFLAGS-
$(CONFIG_SPARC_V8
)+=-mcpu
=v8
327 CPU_CFLAGS-
$(CONFIG_SPARC_V9
)+=-mcpu
=v9
328 CPU_CFLAGS-
$(CONFIG_SPARC_V9B
)+=$(call check_gcc
,-mcpu
=v9b
,-mcpu
=ultrasparc
)
331 ifeq ($(TARGET_ARCH
),arm
)
332 OPTIMIZATION
+=-fstrict-aliasing
333 CPU_CFLAGS-
$(ARCH_LITTLE_ENDIAN
)+=-mlittle-endian
334 CPU_CFLAGS-
$(ARCH_BIG_ENDIAN
)+=-mbig-endian
335 CPU_CFLAGS-
$(CONFIG_GENERIC_ARM
)+=
336 CPU_CFLAGS-
$(CONFIG_ARM610
)+=-mtune
=arm610
-march
=armv3
337 CPU_CFLAGS-
$(CONFIG_ARM710
)+=-mtune
=arm710
-march
=armv3
338 CPU_CFLAGS-
$(CONFIG_ARM7TDMI
)+=-mtune
=arm7tdmi
-march
=armv4t
339 CPU_CFLAGS-
$(CONFIG_ARM720T
)+=-mtune
=arm7tdmi
-march
=armv4t
340 CPU_CFLAGS-
$(CONFIG_ARM920T
)+=-mtune
=arm9tdmi
-march
=armv4t
341 CPU_CFLAGS-
$(CONFIG_ARM922T
)+=-mtune
=arm9tdmi
-march
=armv4t
342 CPU_CFLAGS-
$(CONFIG_ARM926T
)+=-mtune
=arm9e
-march
=armv5te
343 CPU_CFLAGS-
$(CONFIG_ARM10T
)+=-mtune
=arm10tdmi
-march
=armv5t
344 CPU_CFLAGS-
$(CONFIG_ARM1136JF_S
)+=-mtune
=arm1136jf-s
-march
=armv6
345 CPU_CFLAGS-
$(CONFIG_ARM1176JZ_S
)+=-mtune
=arm1176jz-s
-march
=armv6
346 CPU_CFLAGS-
$(CONFIG_ARM1176JZF_S
)+=-mtune
=arm1176jzf-s
-march
=armv6
347 CPU_CFLAGS-
$(CONFIG_ARM_SA110
)+=-mtune
=strongarm110
-march
=armv4
348 CPU_CFLAGS-
$(CONFIG_ARM_SA1100
)+=-mtune
=strongarm1100
-march
=armv4
349 CPU_CFLAGS-
$(CONFIG_ARM_XSCALE
)+=$(call check_gcc
,-mtune
=xscale
,-mtune
=strongarm110
)
350 CPU_CFLAGS-
$(CONFIG_ARM_XSCALE
)+=-march
=armv5te
-Wa
,-mcpu
=xscale
351 CPU_CFLAGS-
$(CONFIG_ARM_IWMMXT
)+=-march
=iwmmxt
-Wa
,-mcpu
=iwmmxt
-mabi
=iwmmxt
352 CPU_CFLAGS-
$(CONFIG_ARM_CORTEX_M3
)+=-mcpu
=cortex-m3
-mthumb
353 CPU_CFLAGS-
$(CONFIG_ARM_CORTEX_M1
)+=-mcpu
=cortex-m1
-mthumb
356 ifeq ($(TARGET_ARCH
),mips
)
357 OPTIMIZATION
+=-mno-split-addresses
358 CPU_CFLAGS-
$(CONFIG_MIPS_ISA_1
)+=-mips1
359 CPU_CFLAGS-
$(CONFIG_MIPS_ISA_2
)+=-mips2
-mtune
=mips2
360 CPU_CFLAGS-
$(CONFIG_MIPS_ISA_3
)+=-mips3
-mtune
=mips3
361 CPU_CFLAGS-
$(CONFIG_MIPS_ISA_4
)+=-mips4
-mtune
=mips4
362 CPU_CFLAGS-
$(CONFIG_MIPS_ISA_MIPS32
)+=-mips32
-mtune
=mips32
363 CPU_CFLAGS-
$(CONFIG_MIPS_ISA_MIPS32R2
)+=-march
=mips32r2
-mtune
=mips32r2
364 CPU_CFLAGS-
$(CONFIG_MIPS_ISA_MIPS64
)+=-mips64
-mtune
=mips32
365 ifeq ($(strip $(ARCH_BIG_ENDIAN
)),y
)
366 CPU_LDFLAGS-
$(CONFIG_MIPS_N64_ABI
)+=-Wl
,-melf64btsmip
367 CPU_LDFLAGS-
$(CONFIG_MIPS_O32_ABI
)+=-Wl
,-melf32btsmip
369 ifeq ($(strip $(ARCH_LITTLE_ENDIAN
)),y
)
370 CPU_LDFLAGS-
$(CONFIG_MIPS_N64_ABI
)+=-Wl
,-melf64ltsmip
371 CPU_LDFLAGS-
$(CONFIG_MIPS_O32_ABI
)+=-Wl
,-melf32ltsmip
373 CPU_CFLAGS-
$(CONFIG_MIPS_N64_ABI
)+=-mabi
=64
374 CPU_CFLAGS-
$(CONFIG_MIPS_O32_ABI
)+=-mabi
=32
375 CPU_CFLAGS-
$(CONFIG_MIPS_N32_ABI
)+=-mabi
=n32
378 ifeq ($(TARGET_ARCH
),nios
)
379 OPTIMIZATION
+=-funaligned-struct-hack
380 CPU_LDFLAGS-y
+=-Wl
,-m32
381 CPU_CFLAGS-y
+=-Wl
,-m32
384 ifeq ($(TARGET_ARCH
),sh
)
385 OPTIMIZATION
+=-fstrict-aliasing
386 OPTIMIZATION
+= $(call check_gcc
,-mprefergot
,)
387 CPU_CFLAGS-
$(ARCH_LITTLE_ENDIAN
)+=-ml
388 CPU_CFLAGS-
$(ARCH_BIG_ENDIAN
)+=-mb
389 CPU_CFLAGS-
$(CONFIG_SH2
)+=-m2
390 CPU_CFLAGS-
$(CONFIG_SH3
)+=-m3
391 ifeq ($(UCLIBC_HAS_FPU
),y
)
392 CPU_CFLAGS-
$(CONFIG_SH2A
)+=-m2a
393 CPU_CFLAGS-
$(CONFIG_SH4
)+=-m4
395 CPU_CFLAGS-
$(CONFIG_SH2A
)+=-m2a-nofpu
396 CPU_CFLAGS-
$(CONFIG_SH4
)+=-m4-nofpu
400 ifeq ($(TARGET_ARCH
),sh64
)
401 OPTIMIZATION
+=-fstrict-aliasing
402 CPU_CFLAGS-
$(ARCH_LITTLE_ENDIAN
):=-ml
403 CPU_CFLAGS-
$(ARCH_BIG_ENDIAN
):=-mb
404 CPU_CFLAGS-
$(CONFIG_SH5
)+=-m5-32media
407 ifeq ($(TARGET_ARCH
),h8300
)
409 CPU_LDFLAGS-
$(CONFIG_H8300H
)+= -Wl
,-ms8300h
410 CPU_LDFLAGS-
$(CONFIG_H8S
) += -Wl
,-ms8300s
411 CPU_CFLAGS-
$(CONFIG_H8300H
) += -mh
-mint32
412 CPU_CFLAGS-
$(CONFIG_H8S
) += -ms
-mint32
415 ifeq ($(TARGET_ARCH
),i960
)
416 OPTIMIZATION
+=-mh
-mint32
#-fsigned-char
419 ifeq ($(TARGET_ARCH
),e1
)
420 OPTIMIZATION
+=-mgnu-param
423 ifeq ($(TARGET_ARCH
),cris
)
424 CPU_LDFLAGS-
$(CONFIG_CRIS
)+=-Wl
,-mcrislinux
425 CPU_LDFLAGS-
$(CONFIG_CRISV32
)+=-Wl
,-mcrislinux
426 CPU_CFLAGS-
$(CONFIG_CRIS
)+=-mlinux
431 ifeq ($(TARGET_ARCH
),m68k
)
432 # -fPIC is only supported for 68020 and above. It is not supported
433 # for 68000, 68010, or Coldfire.
438 ifeq ($(TARGET_ARCH
),powerpc
)
439 # PowerPC can hold 8192 entries in its GOT with -fpic which is more than
440 # enough. Therefore use -fpic which will reduce code size and generates
444 PPC_HAS_REL16
:=$(shell echo
-e
"\t.text\n\taddis 11,30,_GLOBAL_OFFSET_TABLE_-.@ha" |
$(CC
) -c
-x assembler
-o
/dev
/null
- 2> /dev
/null
&& echo
-n y || echo
-n n
)
445 CPU_CFLAGS-
$(PPC_HAS_REL16
)+= -DHAVE_ASM_PPC_REL16
446 CPU_CFLAGS-
$(CONFIG_E500
) += "-D__NO_MATH_INLINES"
450 ifeq ($(TARGET_ARCH
),bfin
)
452 ifeq ($(UCLIBC_FORMAT_FDPIC_ELF
),y
)
453 CPU_CFLAGS-y
:=-mfdpic
454 CPU_LDFLAGS-y
+= -Wl
,-melf32bfinfd
458 ifeq ($(UCLIBC_FORMAT_SHARED_FLAT
),y
)
459 PICFLAG
:= -mleaf-id-shared-library
463 ifeq ($(TARGET_ARCH
),frv
)
464 CPU_LDFLAGS-
$(CONFIG_FRV
)+=-Wl
,-melf32frvfd
465 # Using -pie causes the program to have an interpreter, which is
466 # forbidden, so we must make do with -shared. Unfortunately,
467 # -shared by itself would get us global function descriptors
468 # and calls through PLTs, dynamic resolution of symbols, etc,
469 # which would break as well, but -Bsymbolic comes to the rescue.
470 export LDPIEFLAG
:=-shared
-Wl
,-Bsymbolic
474 ifeq ($(strip $(TARGET_ARCH
)),avr32
)
475 CPU_CFLAGS-
$(CONFIG_AVR32_AP7
) += -march
=ap
476 CPU_CFLAGS-
$(CONFIG_LINKRELAX
) += -mrelax
477 CPU_LDFLAGS-
$(CONFIG_LINKRELAX
) += --relax
480 ifeq ($(TARGET_ARCH
),i960
)
484 ifeq ($(TARGET_ARCH
),v850
)
488 # Keep the check_gcc from being needlessly executed
490 export PIEFLAG
:=$(call check_gcc
,$(PIEFLAG_NAME
),$(PICFLAG
))
492 # We need to keep track of both the CC PIE flag (above) as
493 # well as the LD PIE flag (below) because we can't rely on
494 # gcc passing -pie if we used -fPIE. We need to directly use -pie
495 # instead of -Wl,-pie as gcc picks up the wrong startfile/endfile
497 export LDPIEFLAG
:=$(shell $(LD
) --help
2>/dev
/null | grep
-q
-- -pie
&& echo
"-pie")
500 # Check for --as-needed support in linker
501 ifndef LD_FLAG_ASNEEDED
502 _LD_FLAG_ASNEEDED
:=$(shell $(LD
) --help
2>/dev
/null | grep
-- --as-needed
)
503 ifneq ($(_LD_FLAG_ASNEEDED
),)
504 export LD_FLAG_ASNEEDED
:=--as-needed
507 ifndef LD_FLAG_NO_ASNEEDED
508 ifdef LD_FLAG_ASNEEDED
509 export LD_FLAG_NO_ASNEEDED
:=--no-as-needed
512 ifndef CC_FLAG_ASNEEDED
513 ifdef LD_FLAG_ASNEEDED
514 export CC_FLAG_ASNEEDED
:=-Wl
,$(LD_FLAG_ASNEEDED
)
517 ifndef CC_FLAG_NO_ASNEEDED
518 ifdef LD_FLAG_NO_ASNEEDED
519 export CC_FLAG_NO_ASNEEDED
:=-Wl
,$(LD_FLAG_NO_ASNEEDED
)
522 link.asneeded
= $(if
$(and
$(CC_FLAG_ASNEEDED
),$(CC_FLAG_NO_ASNEEDED
)),$(CC_FLAG_ASNEEDED
) $(1) $(CC_FLAG_NO_ASNEEDED
))
524 # Check for AS_NEEDED support in linker script (binutils>=2.16.1 has it)
526 export ASNEEDED
:=$(shell $(LD
) --help
2>/dev
/null | grep
-q
-- --as-needed
&& echo
"AS_NEEDED ( $(UCLIBC_LDSO) )" || echo
"$(UCLIBC_LDSO)")
527 ifeq ($(UCLIBC_HAS_BACKTRACE
),y
)
528 # Only used in installed libc.so linker script
529 UBACKTRACE_FULL_NAME
:= $(RUNTIME_PREFIX
)lib
/$(UBACKTRACE_DSO
)
530 export UBACKTRACE_ASNEEDED
:=$(shell $(LD
) --help
2>/dev
/null | grep
-q
-- --as-needed
&& echo
"AS_NEEDED ( $(UBACKTRACE_FULL_NAME) )" || echo
"$(UBACKTRACE_FULL_NAME)")
532 export UBACKTRACE_ASNEEDED
:=""
536 # Add a bunch of extra pedantic annoyingly strict checks
537 XWARNINGS
=$(call qstrip
,$(WARNINGS
))
538 XWARNINGS
+=$(foreach w
,\
539 -Wstrict-prototypes \
540 -fno-strict-aliasing \
541 , $(call check_gcc
,$(w
),))
542 ifeq ($(EXTRA_WARNINGS
),y
)
543 XWARNINGS
+=$(foreach w
,\
546 -Wmissing-format-attribute \
547 -Wmissing-prototypes \
548 -Wmissing-declarations \
551 -Wold-style-declaration \
552 -Wold-style-definition \
555 , $(call check_gcc
,$(w
),))
556 # Works only w/ gcc-3.4 and up, can't be checked for gcc-3.x w/ check_gcc()
557 #XWARNINGS+=-Wdeclaration-after-statement
559 CPU_CFLAGS
=$(call qstrip
,$(CPU_CFLAGS-y
))
561 SSP_DISABLE_FLAGS ?
= $(call check_gcc
,-fno-stack-protector
,)
562 ifeq ($(UCLIBC_BUILD_SSP
),y
)
563 SSP_CFLAGS
:= $(call check_gcc
,-fno-stack-protector-all
,)
564 SSP_CFLAGS
+= $(call check_gcc
,-fstack-protector
,)
565 SSP_ALL_CFLAGS ?
= $(call check_gcc
,-fstack-protector-all
,)
567 SSP_CFLAGS
:= $(SSP_DISABLE_FLAGS
)
570 NOSTDLIB_CFLAGS
:=$(call check_gcc
,-nostdlib
,)
572 # Collect all CFLAGS components
573 CFLAGS
:= -include $(top_srcdir
)include/libc-symbols.h \
574 $(XWARNINGS
) $(CPU_CFLAGS
) $(SSP_CFLAGS
) \
575 -nostdinc
-I
$(top_builddir
)include -I
$(top_srcdir
)include -I. \
576 -I
$(top_srcdir
)libc
/sysdeps
/linux \
577 -I
$(top_srcdir
)libc
/sysdeps
/linux
/$(TARGET_ARCH
)
578 ifneq ($(strip $(UCLIBC_EXTRA_CFLAGS
)),"")
579 CFLAGS
+= $(call qstrip
,$(UCLIBC_EXTRA_CFLAGS
))
582 # We need this to be checked within libc-symbols.h
583 ifneq ($(HAVE_SHARED
),y
)
587 LDFLAG_WARN_ONCE
:=$(if
$(call check_ld
,--warn-once
),-Wl
$(comma
)--warn-once
)
588 LDFLAG_SORT_COMMON
:=$(if
$(call check_ld
,--sort-common
),-Wl
$(comma
)--sort-common
)
589 LDFLAG_DISCARD_ALL
:=$(if
$(call check_ld
,--discard-all
),-Wl
$(comma
)--discard-all
)
590 LDFLAGS_NOSTRIP
:=$(CPU_LDFLAGS-y
) -shared \
591 -Wl
,--warn-common
$(LDFLAG_WARN_ONCE
) -Wl
,-z
,combreloc
592 # binutils-2.16.1 warns about ignored sections, 2.16.91.0.3 and newer are ok
593 #LDFLAGS_NOSTRIP+=$(call check_ld,--gc-sections)
595 ifeq ($(UCLIBC_BUILD_RELRO
),y
)
596 LDFLAGS_NOSTRIP
+=-Wl
,-z
,relro
599 ifeq ($(UCLIBC_BUILD_NOW
),y
)
600 LDFLAGS_NOSTRIP
+=-Wl
,-z
,now
603 ifeq ($(LDSO_GNU_HASH_SUPPORT
),y
)
604 # Be sure that binutils support it
605 LDFLAGS_GNUHASH
:=$(call check_ld
,--hash-style
=gnu
)
606 ifeq ($(LDFLAGS_GNUHASH
),)
607 ifneq ($(filter-out $(clean_targets
) install_headers headers-y
,$(MAKECMDGOALS
)),)
608 $(error Your binutils do not support
--hash-style option
, while you want to use it
)
611 LDFLAGS_NOSTRIP
+= -Wl
,$(LDFLAGS_GNUHASH
)
615 LDFLAGS
:=$(LDFLAGS_NOSTRIP
) -Wl
,-z
,defs
617 CFLAGS
+= -O0
-g3
-DDEBUG
619 CFLAGS
+= $(OPTIMIZATION
)
624 STRIPTOOL
:= true
-Stripping_disabled
628 # we try to compile all sources at once into an object (IMA), but
629 # gcc-3.3.x does not support it
630 # gcc-3.4.x supports it, but does not need and support --combine. though fails on many sources
631 # gcc-4.0.x supports it, supports the --combine flag, but does not need it
632 # gcc-4.1(200506xx) supports it, but needs the --combine flag, else libs are useless
633 ifeq ($(GCC_MAJOR_VER
),3)
636 CFLAGS
+=$(call check_gcc
,--combine
,)
642 ifneq ($(strip $(UCLIBC_EXTRA_LDFLAGS
)),"")
643 LDFLAGS
+= $(call qstrip
,$(UCLIBC_EXTRA_LDFLAGS
))
646 ifeq ($(UCLIBC_HAS_THREADS
),y
)
647 ifeq ($(UCLIBC_HAS_THREADS_NATIVE
),y
)
649 CFLAGS
+= -DHAVE_FORCED_UNWIND
651 ifeq ($(LINUXTHREADS_OLD
),y
)
652 PTNAME
:= linuxthreads.old
654 PTNAME
:= linuxthreads
657 PTDIR
:= libpthread
/$(PTNAME
)
658 # set up system dependencies include dirs (NOTE: order matters!)
659 ifeq ($(UCLIBC_HAS_THREADS_NATIVE
),y
)
660 PTINC
:= -I
$(top_builddir
)$(PTDIR
) \
661 -I
$(top_srcdir
)$(PTDIR
) \
662 $(if
$(TARGET_ARCH
),-I
$(top_srcdir
)$(PTDIR
)/sysdeps
/unix
/sysv
/linux
/$(TARGET_ARCH
)/$(TARGET_SUBARCH
)) \
663 -I
$(top_srcdir
)$(PTDIR
)/sysdeps
/unix
/sysv
/linux
/$(TARGET_ARCH
) \
664 -I
$(top_builddir
)$(PTDIR
)/sysdeps
/$(TARGET_ARCH
) \
665 -I
$(top_srcdir
)$(PTDIR
)/sysdeps
/$(TARGET_ARCH
) \
666 -I
$(top_builddir
)$(PTDIR
)/sysdeps
/unix
/sysv
/linux \
667 -I
$(top_srcdir
)$(PTDIR
)/sysdeps
/unix
/sysv
/linux \
668 -I
$(top_srcdir
)$(PTDIR
)/sysdeps
/pthread \
669 -I
$(top_srcdir
)$(PTDIR
)/sysdeps
/pthread
/bits \
670 -I
$(top_srcdir
)$(PTDIR
)/sysdeps
/generic \
671 -I
$(top_srcdir
)ldso
/ldso
/$(TARGET_ARCH
) \
672 -I
$(top_srcdir
)ldso
/include
674 # Test for TLS if NPTL support was selected.
676 GCC_HAS_TLS
=$(shell \
677 echo
"extern __thread int foo;" |
$(CC
) -o
/dev
/null
-S
-xc
- 2>&1)
678 ifneq ($(GCC_HAS_TLS
),)
681 @echo
"#### Your compiler does not support TLS and you are trying to build uClibc";
682 @echo
"#### with NPTL support. Upgrade your binutils and gcc to versions which";
683 @echo
"#### support TLS for your architecture. Do not contact uClibc maintainers";
684 @echo
"#### about this problem.";
686 @echo
"#### Exiting...";
692 -I
$(top_srcdir
)$(PTDIR
)/sysdeps
/unix
/sysv
/linux
/$(TARGET_ARCH
) \
693 -I
$(top_srcdir
)$(PTDIR
)/sysdeps
/$(TARGET_ARCH
) \
694 -I
$(top_srcdir
)$(PTDIR
)/sysdeps
/unix
/sysv
/linux \
695 -I
$(top_srcdir
)$(PTDIR
)/sysdeps
/pthread \
696 -I
$(top_srcdir
)$(PTDIR
) \
697 -I
$(top_srcdir
)libpthread
704 CFLAGS
+= -I
$(top_srcdir
)libc
/sysdeps
/linux
/common
705 CFLAGS
+= -I
$(KERNEL_HEADERS
)
707 #CFLAGS += -iwithprefix include-fixed -iwithprefix include
708 CC_IPREFIX
:= $(shell $(CC
) --print-file-name
=include)
709 CC_INC
:= -isystem
$(dir $(CC_IPREFIX
))include-fixed
-isystem
$(CC_IPREFIX
)
712 ifneq ($(DOASSERTS
),y
)
716 ifeq ($(SYMBOL_PREFIX
),_
)
717 CFLAGS
+=-D__UCLIBC_UNDERSCORES__
720 # Keep the check_as from being needlessly executed
721 ifndef ASFLAGS_NOEXEC
722 ifeq ($(UCLIBC_BUILD_NOEXECSTACK
),y
)
723 export ASFLAGS_NOEXEC
:= $(call check_as
,--noexecstack
)
725 export ASFLAGS_NOEXEC
:=
728 ASFLAGS
= $(ASFLAGS_NOEXEC
)
730 LIBGCC_CFLAGS ?
= $(CFLAGS
) $(CPU_CFLAGS-y
)
731 LIBGCC
:=$(shell $(CC
) $(LIBGCC_CFLAGS
) -print-libgcc-file-name
)
732 LIBGCC_DIR
:=$(dir $(LIBGCC
))
734 # moved from libpthread/linuxthreads
735 ifeq ($(UCLIBC_CTOR_DTOR
),y
)
736 SHARED_START_FILES
:=$(top_builddir
)lib
/crti.o
$(LIBGCC_DIR
)crtbeginS.o
737 SHARED_END_FILES
:=$(LIBGCC_DIR
)crtendS.o
$(top_builddir
)lib
/crtn.o
740 LOCAL_INSTALL_PATH
:= install_dir