X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=Rules.mak;h=12eb92d68cbbf29461e5fd6495b10d87401a2b9f;hb=da738bcee47f9e2423bcc66f379e0c5e44c62b78;hp=0577b8d19f826540947e22f4b8c467b09fc466c2;hpb=15870aba4909395d3922acb81dba0ebdcc4361a0;p=uclinux-h8%2FuClibc.git diff --git a/Rules.mak b/Rules.mak index 0577b8d19..12eb92d68 100644 --- a/Rules.mak +++ b/Rules.mak @@ -1,7 +1,7 @@ # Rules.make for uClibc # # Copyright (C) 2000 by Lineo, inc. -# Copyright (C) 2000-2005 Erik Andersen +# Copyright (C) 2000-2006 Erik Andersen # # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # @@ -36,18 +36,35 @@ STRIPTOOL = $(CROSS)strip INSTALL = install LN = ln RM = rm -f +TAR = tar STRIP_FLAGS ?= -x -R .note -R .comment # Select the compiler needed to build binaries for your development system HOSTCC = gcc -HOSTCFLAGS = -O2 -Wall +BUILD_CFLAGS = -O2 -Wall #--------------------------------------------------------- # Nothing beyond this point should ever be touched by mere # mortals. Unless you hang out with the gods, you should # probably leave all this stuff alone. + +# Pull in the user's uClibc configuration +ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),) +-include $(top_builddir).config +endif + +# Make certain these contain a final "/", but no "//"s. +TARGET_ARCH:=$(shell grep -s '^TARGET_ARCH' $(top_builddir)/.config | sed -e 's/^TARGET_ARCH=//' -e 's/"//g') +TARGET_ARCH:=$(strip $(subst ",, $(strip $(TARGET_ARCH)))) +RUNTIME_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(RUNTIME_PREFIX)))))) +DEVEL_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(DEVEL_PREFIX)))))) +KERNEL_SOURCE:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(KERNEL_SOURCE)))))) +export RUNTIME_PREFIX DEVEL_PREFIX KERNEL_SOURCE + + +# Now config hard core MAJOR_VERSION := 0 MINOR_VERSION := 9 SUBLEVEL := 28 @@ -58,13 +75,19 @@ export MAJOR_VERSION MINOR_VERSION SUBLEVEL VERSION LC_ALL LIBC := libc SHARED_MAJORNAME := $(LIBC).so.$(MAJOR_VERSION) -UCLIBC_LDSO := ld-uClibc.so.$(MAJOR_VERSION) +UCLIBC_LDSO_NAME := ld-uClibc +ifeq ($(TARGET_ARCH),x86_64) +UCLIBC_LDSO_NAME := ld64-uClibc +endif +UCLIBC_LDSO := $(UCLIBC_LDSO_NAME).so.$(MAJOR_VERSION) NONSHARED_LIBNAME := uclibc_nonshared.a -libc := $(TOPDIR)lib/$(LIBC).so -interp := $(TOPDIR)libc/misc/internals/interp.os +libc := $(top_builddir)lib/$(SHARED_MAJORNAME) +interp := $(top_builddir)lib/interp.os +ldso := $(top_builddir)lib/$(UCLIBC_LDSO) +headers_dep := $(top_builddir)include/bits/sysnum.h -#LIBS :=$(interp) -L$(TOPDIR)lib -lc -LIBS := $(interp) -L$(TOPDIR)lib $(libc) +#LIBS :=$(interp) -L$(top_builddir)lib -lc +LIBS := $(interp) -L$(top_builddir)lib $(libc:.$(MAJOR_VERSION)=) # Make sure DESTDIR and PREFIX can be used to install # PREFIX is a uClibcism while DESTDIR is a common GNUism @@ -72,9 +95,10 @@ ifndef PREFIX PREFIX = $(DESTDIR) endif -# Pull in the user's uClibc configuration -ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),) --include $(TOPDIR).config +ifneq ($(HAVE_SHARED),y) +libc := +interp := +ldso := endif ifndef CROSS @@ -100,14 +124,6 @@ SECHO=-@false SHELL_SET_X=set +x endif -# Make certain these contain a final "/", but no "//"s. -TARGET_ARCH:=$(shell grep -s ^TARGET_ARCH $(TOPDIR)/.config | sed -e 's/^TARGET_ARCH=//' -e 's/"//g') -TARGET_ARCH:=$(strip $(subst ",, $(strip $(TARGET_ARCH)))) -RUNTIME_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(RUNTIME_PREFIX)))))) -DEVEL_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(DEVEL_PREFIX)))))) -KERNEL_SOURCE:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(KERNEL_SOURCE)))))) -export RUNTIME_PREFIX DEVEL_PREFIX KERNEL_SOURCE - ARFLAGS:=cr OPTIMIZATION:= @@ -152,6 +168,7 @@ ifeq ($(TARGET_ARCH),arm) CPU_CFLAGS-$(CONFIG_GENERIC_ARM)+= CPU_CFLAGS-$(CONFIG_ARM610)+=-mtune=arm610 -march=armv3 CPU_CFLAGS-$(CONFIG_ARM710)+=-mtune=arm710 -march=armv3 + CPU_CFLAGS-$(CONFIG_ARM7TDMI)+=-mtune=arm7tdmi -march=armv4 CPU_CFLAGS-$(CONFIG_ARM720T)+=-mtune=arm7tdmi -march=armv4 CPU_CFLAGS-$(CONFIG_ARM920T)+=-mtune=arm9tdmi -march=armv4 CPU_CFLAGS-$(CONFIG_ARM922T)+=-mtune=arm9tdmi -march=armv4 @@ -164,6 +181,8 @@ ifeq ($(TARGET_ARCH),arm) endif ifeq ($(TARGET_ARCH),mips) + CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL + CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB CPU_CFLAGS-$(CONFIG_MIPS_ISA_1)+=-mips1 CPU_CFLAGS-$(CONFIG_MIPS_ISA_2)+=-mips2 -mtune=mips2 CPU_CFLAGS-$(CONFIG_MIPS_ISA_3)+=-mips3 -mtune=mips3 @@ -172,6 +191,11 @@ ifeq ($(TARGET_ARCH),mips) CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS64)+=-mips64 -mtune=mips32 endif +ifeq ($(TARGET_ARCH),nios) + CPU_LDFLAGS-y+=-m32 + CPU_CFLAGS-y+=-m32 +endif + ifeq ($(TARGET_ARCH),sh) OPTIMIZATION+=-fstrict-aliasing OPTIMIZATION+= $(call check_gcc,-mprefergot,) @@ -202,8 +226,8 @@ endif ifeq ($(TARGET_ARCH),h8300) CPU_LDFLAGS-$(CONFIG_H8300H)+= -ms8300h CPU_LDFLAGS-$(CONFIG_H8S) += -ms8300s - CPU_CFLAGS-$(CONFIG_H8300H) += -mh -mint32 -fsigned-char - CPU_CFLAGS-$(CONFIG_H8S) += -ms -mint32 -fsigned-char + CPU_CFLAGS-$(CONFIG_H8300H) += -mh -mint32 + CPU_CFLAGS-$(CONFIG_H8S) += -ms -mint32 endif ifeq ($(TARGET_ARCH),cris) @@ -221,6 +245,12 @@ ifeq ($(TARGET_ARCH),powerpc) PIEFLAG_NAME:=-fpie endif +ifeq ($(TARGET_ARCH),bfin) + # This should also work, but why bother ? ;) + #PICFLAG:=-fPIC -mid-shared-library + PICFLAG:=-fpic +endif + ifeq ($(TARGET_ARCH),frv) CPU_LDFLAGS-$(CONFIG_FRV)+=-melf32frvfd CPU_CFLAGS-$(CONFIG_FRV)+=-mfdpic @@ -268,16 +298,39 @@ OPTIMIZATION+=$(call check_gcc,-funit-at-a-time,) # Add a bunch of extra pedantic annoyingly strict checks XWARNINGS=$(subst ",, $(strip $(WARNINGS))) -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing +ifeq ($(EXTRA_WARNINGS),y) +XWARNINGS+=-Wnested-externs -Wshadow -Wmissing-noreturn -Wmissing-format-attribute -Wformat=2 +XWARNINGS+=-Wmissing-prototypes -Wmissing-declarations +# works only w/ gcc-3.4 and up, can't be checked for gcc-3.x w/ check_gcc() +#XWARNINGS+=-Wdeclaration-after-statement +endif XARCH_CFLAGS=$(subst ",, $(strip $(ARCH_CFLAGS))) CPU_CFLAGS=$(subst ",, $(strip $(CPU_CFLAGS-y))) +SSP_DISABLE_FLAGS ?= $(call check_gcc,-fno-stack-protector,) +ifeq ($(UCLIBC_BUILD_SSP),y) +SSP_CFLAGS := $(call check_gcc,-fno-stack-protector-all,) +SSP_CFLAGS += $(call check_gcc,-fstack-protector,) +SSP_ALL_CFLAGS ?= $(call check_gcc,-fstack-protector-all,) +else +SSP_CFLAGS := $(SSP_DISABLE_FLAGS) +endif + +# Some nice CFLAGS to work with +CFLAGS := -include $(top_builddir)include/libc-symbols.h \ + $(XWARNINGS) $(CPU_CFLAGS) $(SSP_CFLAGS) \ + -fno-builtin -nostdinc -I$(top_builddir)include -I. + LDADD_LIBFLOAT= ifeq ($(UCLIBC_HAS_SOFT_FLOAT),y) -# Add -msoft-float to the CPU_FLAGS since ldso and libdl ignore CFLAGS. # If -msoft-float isn't supported, we want an error anyway. # Hmm... might need to revisit this for arm since it has 2 different # soft float encodings. - CPU_CFLAGS += -msoft-float +ifneq ($(TARGET_ARCH),nios) +ifneq ($(TARGET_ARCH),nios2) +CFLAGS += -msoft-float +endif +endif ifeq ($(TARGET_ARCH),arm) # No longer needed with current toolchains, but leave it here for now. # If anyone is actually still using gcc 2.95 (say), they can uncomment it. @@ -285,18 +338,16 @@ ifeq ($(TARGET_ARCH),arm) endif endif -SSP_DISABLE_FLAGS?=$(call check_gcc,-fno-stack-protector,) -ifeq ($(UCLIBC_BUILD_SSP),y) -SSP_CFLAGS:=$(call check_gcc,-fno-stack-protector-all,) -SSP_CFLAGS+=$(call check_gcc,-fstack-protector,) -SSP_ALL_CFLAGS?=$(call check_gcc,-fstack-protector-all,) -else -SSP_CFLAGS:=$(SSP_DISABLE_FLAGS) +# Make sure "char" behavior is the same everywhere +CFLAGS += -fsigned-char + +# We need this to be checked within libc-symbols.h +ifneq ($(HAVE_SHARED),y) +CFLAGS += -DSTATIC endif -# Some nice CFLAGS to work with -CFLAGS:=$(XWARNINGS) $(CPU_CFLAGS) $(SSP_CFLAGS) \ - -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)include -I. +# only i386 is known to work if compile.S gets -D__ASSEMBLER__ +#CFLAGS += $(call check_gcc,-std=c99,) LDFLAGS_NOSTRIP:=$(CPU_LDFLAGS-y) -shared --warn-common --warn-once -z combreloc @@ -344,16 +395,19 @@ else PTNAME := linuxthreads endif endif -PTDIR := $(TOPDIR)libpthread/$(PTNAME) +PTDIR := $(top_builddir)libpthread/$(PTNAME) # set up system dependencies include dirs (NOTE: order matters!) ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) -PTINC:= -I$(PTDIR)/compat \ +PTINC:= -I$(PTDIR) \ + -I$(PTDIR)/compat \ -I$(PTDIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH) \ -I$(PTDIR)/sysdeps/$(TARGET_ARCH) \ -I$(PTDIR)/sysdeps/unix/sysv/linux \ -I$(PTDIR)/sysdeps/pthread \ -I$(PTDIR)/sysdeps/pthread/bits \ -I$(PTDIR)/sysdeps/generic \ + -I$(top_srcdir)ldso/ldso/$(TARGET_ARCH) \ + -I$(top_srcdir)ldso/include \ -include $(PTDIR)/compat/libc-symbols.h # # Test for TLS if NPTL support was selected. @@ -373,10 +427,18 @@ gcc_tls_test_fail: @exit 1; endif else -PTINC:= -I$(PTDIR)/sysdeps/$(TARGET_ARCH) \ - -I$(PTDIR)/sysdeps/pthread +PTINC := \ + -I$(PTDIR)/sysdeps/unix/sysv/linux/$(TARGET_ARCH) \ + -I$(PTDIR)/sysdeps/$(TARGET_ARCH) \ + -I$(PTDIR)/sysdeps/unix/sysv/linux \ + -I$(PTDIR)/sysdeps/pthread \ + -I$(PTDIR) \ + -I$(top_builddir)libpthread endif CFLAGS+=$(PTINC) +else + PTNAME := + PTINC := endif # Sigh, some stupid versions of gcc can't seem to cope with '-iwithprefix include' @@ -407,6 +469,12 @@ LIBGCC_CFLAGS ?= $(CFLAGS) $(CPU_CFLAGS-y) LIBGCC:=$(shell $(CC) $(LIBGCC_CFLAGS) -print-libgcc-file-name) LIBGCC_DIR:=$(dir $(LIBGCC)) +# moved from libpthread/linuxthreads +ifeq ($(UCLIBC_CTOR_DTOR),y) +SHARED_START_FILES:=$(top_builddir)lib/crti.o $(LIBGCC_DIR)crtbeginS.o +SHARED_END_FILES:=$(LIBGCC_DIR)crtendS.o $(top_builddir)lib/crtn.o +endif + ######################################## # # uClinux shared lib support