X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=test%2FRules.mak;h=805a3498de5e77c193bfe8d2a6ffaef54b9627bb;hb=bff3a664e6a2a367bf159c3089df1fe6f093bfb1;hp=df00cae563dc8c174014def64130121e31846144;hpb=0ec5f81305ea56973fbd6a1333cfbb28ea8a475b;p=uclinux-h8%2FuClibc.git diff --git a/test/Rules.mak b/test/Rules.mak index df00cae56..805a3498d 100644 --- a/test/Rules.mak +++ b/test/Rules.mak @@ -1,90 +1,158 @@ -# Rules.make for uClibc test apps. +# Rules.mak for uClibc test subdirs # -# Copyright (C) 2001 by Lineo, inc. +# Copyright (C) 2000-2006 Erik Andersen # +# 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 -# --include $(TESTDIR)../.config -include $(TESTDIR)Config +.SUFFIXES: + +top_builddir ?= ../ +abs_top_builddir ?= $(shell cd $(top_builddir); pwd)/ + +TESTDIR=$(top_builddir)test/ +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 := $(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_PATH := $(top_builddir)lib +endif +else +UCLIBC_PATH := $(RUNTIME_PREFIX)$(MULTILIB_DIR) +endif #-------------------------------------------------------- -# Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc. +# Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc. LC_ALL:= C 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/m68k.*/m68k/' \ - -e 's/ppc/powerpc/g' \ - -e 's/v850.*/v850/g' \ - -e 's/sh[234]/sh/' \ - -e 's/mips-.*/mips/' \ - -e 's/mipsel-.*/mipsel/' \ - -e 's/cris.*/cris/' \ - ) + -e 's/i.86/i386/' \ + -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'. +ifneq ($(KERNEL_HEADERS),) +ifeq ($(patsubst /%,/,$(KERNEL_HEADERS)),/) +# Absolute path in KERNEL_HEADERS +KERNEL_INCLUDES += -I$(KERNEL_HEADERS) +else +# Relative path in KERNEL_HEADERS +KERNEL_INCLUDES += -I$(top_builddir)$(KERNEL_HEADERS) +endif +endif -CROSS=../$(TESTDIR)extra/gcc-uClibc/$(TARGET_ARCH)-uclibc- -CC= $(CROSS)gcc -STRIPTOOL=strip -LDD=../$(TESTDIR)ldso/util/ldd +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) -# Select the compiler needed to build binaries for your development system -HOSTCC=gcc -HOSTCFLAGS=-O2 -Wall +$(eval $(call check-gcc-var,-Wno-missing-field-initializers)) +CFLAGS += $(CFLAG_-Wno-missing-field-initializers) +# Can't add $(OPTIMIZATION) here, it may be target-specific. +# Just adding -Os for now. +HOST_CFLAGS += $(XCOMMON_CFLAGS) -Os $(XWARNINGS) -std=gnu99 -#-------------------------------------------------------- -# Check if 'ls -sh' works or not -LSFLAGS = -l - -# 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 -OPTIMIZATION+=$(call check_gcc,-Os,-O2) -# Override optimization settings when debugging -ifeq ($(DODEBUG),true) -OPTIMIZATION=-O0 -endif - -XWARNINGS=$(subst ",, $(strip $(WARNINGS))) -Wstrict-prototypes -XARCH_CFLAGS=$(subst ",, $(strip $(ARCH_CFLAGS))) -CFLAGS=--uclibc-use-build-dir $(XWARNINGS) $(OPTIMIZATION) $(XARCH_CFLAGS) -GLIBC_CFLAGS+=$(XWARNINGS) $(OPTIMIZATION) -LDFLAGS=--uclibc-use-build-dir - -ifeq ($(DODEBUG),true) - CFLAGS+=-g - GLIBC_CFLAGS+=-g - LDFLAGS = -g -Wl,-warn-common - GLIBC_LDFLAGS =-g -Wl,-warn-common - STRIPTOOL =true -Since_we_are_debugging +LDFLAGS := $(CPU_LDFLAGS-y) -Wl,-z,now +ifeq ($(DODEBUG),y) + CFLAGS += -g + HOST_CFLAGS += -g + LDFLAGS += -Wl,-g + HOST_LDFLAGS += -Wl,-g else - LDFLAGS =-s -Wl,-warn-common - GLIBC_LDFLAGS =-s -Wl,-warn-common - STRIP = $(STRIPTOOL) --remove-section=.note --remove-section=.comment $(PROG) + LDFLAGS += -Wl,-s + HOST_LDFLAGS += -Wl,-s +endif + +ifneq ($(HAVE_SHARED),y) + LDFLAGS += -Wl,-static -static-libgcc +endif + +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_PATH)/$(UCLIBC_LDSO) endif -ifneq ($(DODYNAMIC),true) - LDFLAGS +=-static - GLIBC_LDFLAGS +=-static +ifeq ($(LDSO_GNU_HASH_SUPPORT),y) +# Check for binutils support is done on root Rules.mak +LDFLAGS += $(CFLAG_-Wl--hash-style=gnu) endif + + +ifneq ($(findstring -s,$(MAKEFLAGS)),) +DISP := sil +Q := @ +SCAT := -@true +else +ifneq ($(V)$(VERBOSE),) +DISP := ver +Q := +SCAT := cat +else +DISP := pur +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))/ $(@:.exe=) +sil_showclean = +sil_showdiff = true +sil_showlink = true +sil_showtest = true +ver_showclean = +ver_showdiff = true echo +ver_showlink = true echo +ver_showtest = printf "\n$(banner)\nTEST $(notdir $(CURDIR))/ $(@:.exe=)\n$(banner)\n" +do_showclean = $($(DISP)_showclean) +do_showdiff = $($(DISP)_showdiff) +do_showlink = $($(DISP)_showlink) +do_showtest = $($(DISP)_showtest) +showclean = @$(do_showclean) +showdiff = @$(do_showdiff) +showlink = @$(do_showlink) +showtest = @$(do_showtest)