X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=test%2FRules.mak;h=805a3498de5e77c193bfe8d2a6ffaef54b9627bb;hb=bff3a664e6a2a367bf159c3089df1fe6f093bfb1;hp=ac210a72ed1fdbead94661e68439b362a365eeef;hpb=d81e53c5fa66c5accc0d436e58c36fd62f7fee0c;p=uclinux-h8%2FuClibc.git diff --git a/test/Rules.mak b/test/Rules.mak index ac210a72e..805a3498d 100644 --- a/test/Rules.mak +++ b/test/Rules.mak @@ -5,23 +5,37 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -# -# Note: This does not read the top level Rules.mak file -# +.SUFFIXES: top_builddir ?= ../ +abs_top_builddir ?= $(shell cd $(top_builddir); pwd)/ TESTDIR=$(top_builddir)test/ -include $(top_builddir)/Rules.mak -ifndef TEST_INSTALLED_UCLIBC +include $(top_srcdir)Rules.mak +ifeq ($(filter $(clean_targets) CLEAN_%,$(MAKECMDGOALS)),) +ifeq ($(HAVE_DOT_CONFIG),) +$(error no HAVE_DOT_CONFIG, failed to read .config) +endif +endif + ifdef UCLIBC_LDSO ifeq (,$(findstring /,$(UCLIBC_LDSO))) -UCLIBC_LDSO := $(top_builddir)lib/$(UCLIBC_LDSO) +UCLIBC_LDSO := $(UCLIBC_LDSO) +else +UCLIBC_LDSO := $(notdir $(UCLIBC_LDSO)) +endif +else +UCLIBC_LDSO := $(notdir $(firstword $(wildcard $(top_builddir)lib/ld*))) endif +ifndef TEST_INSTALLED_UCLIBC +ifeq ($(LDSO_SAFE_RUNPATH),y) +UCLIBC_PATH := $(abs_top_builddir)lib else -UCLIBC_LDSO := $(firstword $(wildcard $(top_builddir)lib/ld*)) +UCLIBC_PATH := $(top_builddir)lib endif +else +UCLIBC_PATH := $(RUNTIME_PREFIX)$(MULTILIB_DIR) endif #-------------------------------------------------------- # Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc. @@ -31,86 +45,78 @@ export LC_ALL ifeq ($(strip $(TARGET_ARCH)),) TARGET_ARCH:=$(shell $(CC) -dumpmachine | sed -e s'/-.*//' \ -e 's/i.86/i386/' \ - -e 's/sparc.*/sparc/' \ - -e 's/arm.*/arm/g' \ + -e 's/sun.*/sparc/' -e 's/sparc.*/sparc/' \ + -e 's/sa110/arm/' -e 's/arm.*/arm/g' \ -e 's/m68k.*/m68k/' \ + -e 's/parisc.*/hppa/' \ -e 's/ppc/powerpc/g' \ -e 's/v850.*/v850/g' \ -e 's/sh[234]/sh/' \ -e 's/mips.*/mips/' \ -e 's/cris.*/cris/' \ + -e 's/xtensa.*/xtensa/' \ ) endif export TARGET_ARCH +RM_R = $(Q)$(RM) -r +LN_S = $(Q)$(LN) -fs -#-------------------------------------------------------- -# If you are running a cross compiler, you will want to set 'CROSS' -# to something more interesting... Target architecture is determined -# by asking the CC compiler what arch it compiles things for, so unless -# your compiler is broken, you should not need to specify TARGET_ARCH -# -# Most people will set this stuff on the command line, i.e. -# make CROSS=mipsel-linux- -# will build uClibc for 'mipsel'. - -CROSS = $(subst ",, $(strip $(CROSS_COMPILER_PREFIX))) -CC = $(CROSS)gcc -RM = rm -f - -# Select the compiler needed to build binaries for your development system -HOSTCC = gcc - - -#-------------------------------------------------------- -# A nifty macro to make testing gcc features easier -check_gcc=$(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \ - then echo "$(1)"; else echo "$(2)"; fi) - -# use '-Os' optimization if available, else use -O2, allow Config to override -# Override optimization settings when debugging -ifeq ($(DODEBUG),y) -OPTIMIZATION = -O0 +ifneq ($(KERNEL_HEADERS),) +ifeq ($(patsubst /%,/,$(KERNEL_HEADERS)),/) +# Absolute path in KERNEL_HEADERS +KERNEL_INCLUDES += -I$(KERNEL_HEADERS) else -OPTIMIZATION += $(call check_gcc,-Os,-O2) +# Relative path in KERNEL_HEADERS +KERNEL_INCLUDES += -I$(top_builddir)$(KERNEL_HEADERS) endif +endif + +XCOMMON_CFLAGS := -I$(top_builddir)test -D_GNU_SOURCE +XWARNINGS += $(CFLAG_-Wstrict-prototypes) +CFLAGS := -nostdinc -I$(top_builddir)$(LOCAL_INSTALL_PATH)/usr/include +CFLAGS += $(XCOMMON_CFLAGS) $(KERNEL_INCLUDES) $(CC_INC) +CFLAGS += $(OPTIMIZATION) $(CPU_CFLAGS) $(XWARNINGS) -XWARNINGS := $(subst ",, $(strip $(WARNINGS))) -Wstrict-prototypes -XARCH_CFLAGS := $(subst ",, $(strip $(ARCH_CFLAGS))) $(CPU_CFLAGS) -XCOMMON_CFLAGS := -D_GNU_SOURCE -I$(top_builddir)test -CFLAGS += $(XWARNINGS) $(OPTIMIZATION) $(XCOMMON_CFLAGS) $(XARCH_CFLAGS) -I$(top_builddir)include $(PTINC) -HOST_CFLAGS += $(XWARNINGS) $(OPTIMIZATION) $(XCOMMON_CFLAGS) +$(eval $(call check-gcc-var,-Wno-missing-field-initializers)) +CFLAGS += $(CFLAG_-Wno-missing-field-initializers) -LDFLAGS := $(CPU_LDFLAGS) +# Can't add $(OPTIMIZATION) here, it may be target-specific. +# Just adding -Os for now. +HOST_CFLAGS += $(XCOMMON_CFLAGS) -Os $(XWARNINGS) -std=gnu99 + +LDFLAGS := $(CPU_LDFLAGS-y) -Wl,-z,now ifeq ($(DODEBUG),y) CFLAGS += -g HOST_CFLAGS += -g - LDFLAGS += -g - HOST_LDFLAGS += -g + LDFLAGS += -Wl,-g + HOST_LDFLAGS += -Wl,-g else - LDFLAGS += -s - HOST_LDFLAGS += -s + LDFLAGS += -Wl,-s + HOST_LDFLAGS += -Wl,-s endif -ifneq ($(strip $(HAVE_SHARED)),y) - LDFLAGS += -static - HOST_LDFLAGS += -static +ifneq ($(HAVE_SHARED),y) + LDFLAGS += -Wl,-static -static-libgcc endif -LDFLAGS += -B$(top_builddir)lib -Wl,-rpath,$(top_builddir)lib -Wl,-rpath-link,$(top_builddir)lib -UCLIBC_LDSO_ABSPATH=$(shell pwd) -ifdef TEST_INSTALLED_UCLIBC -LDFLAGS += -Wl,-rpath,./ -UCLIBC_LDSO_ABSPATH=/lib + +ifndef TEST_INSTALLED_UCLIBC +LDFLAGS += -B$(UCLIBC_PATH) -Wl,-rpath,$(UCLIBC_PATH):$(shell pwd) -Wl,-rpath-link,$(UCLIBC_PATH):$(shell pwd) +else +LDFLAGS += -Wl,-rpath,$(shell pwd) endif ifeq ($(findstring -static,$(LDFLAGS)),) - LDFLAGS += -Wl,--dynamic-linker,$(UCLIBC_LDSO_ABSPATH)/$(UCLIBC_LDSO) +LDFLAGS += -Wl,--dynamic-linker,$(UCLIBC_PATH)/$(UCLIBC_LDSO) endif +ifeq ($(LDSO_GNU_HASH_SUPPORT),y) +# Check for binutils support is done on root Rules.mak +LDFLAGS += $(CFLAG_-Wl--hash-style=gnu) +endif -# Filter output -MAKEFLAGS += --no-print-directory -ifneq ($(findstring s,$(MAKEFLAGS)),) + +ifneq ($(findstring -s,$(MAKEFLAGS)),) DISP := sil Q := @ SCAT := -@true @@ -125,12 +131,15 @@ Q := @ SCAT := -@true endif endif +ifneq ($(Q),) +MAKEFLAGS += --no-print-directory +endif banner := --------------------------------- pur_showclean = echo " "CLEAN $(notdir $(CURDIR)) pur_showdiff = echo " "TEST_DIFF $(notdir $(CURDIR))/ pur_showlink = echo " "TEST_LINK $(notdir $(CURDIR))/ $@ -pur_showtest = echo " "TEST_EXEC $(notdir $(CURDIR))/ $(patsubst %.exe,%,$@) +pur_showtest = echo " "TEST_EXEC $(notdir $(CURDIR))/ $(@:.exe=) sil_showclean = sil_showdiff = true sil_showlink = true @@ -138,7 +147,7 @@ sil_showtest = true ver_showclean = ver_showdiff = true echo ver_showlink = true echo -ver_showtest = printf "\n$(banner)\nTEST $(notdir $(PWD))/ $(patsubst %.exe,%,$@)\n$(banner)\n" +ver_showtest = printf "\n$(banner)\nTEST $(notdir $(CURDIR))/ $(@:.exe=)\n$(banner)\n" do_showclean = $($(DISP)_showclean) do_showdiff = $($(DISP)_showdiff) do_showlink = $($(DISP)_showlink)