X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=Rules;h=cb4e1fb76738ad06ef4dd47ae92d9a2c3d01ec0f;hb=7f00375e07b12dac02aa350327a3336a8b840460;hp=8d4f51fa797b836703c5484fdeecc3c053ee1c4d;hpb=924840c54244fe16223c42a91c36ca976784043b;p=platform%2Fupstream%2Fglibc.git diff --git a/Rules b/Rules index 8d4f51f..cb4e1fb 100644 --- a/Rules +++ b/Rules @@ -1,20 +1,19 @@ -# Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc. +# Copyright (C) 1991-2015 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or (at your option) any later version. +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. # The GNU C Library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Library General Public License for more details. +# Lesser General Public License for more details. -# You should have received a copy of the GNU Library General Public -# License along with the GNU C Library; see the file COPYING.LIB. If -# not, write to the Free Software Foundation, Inc., 675 Mass Ave, -# Cambridge, MA 02139, USA. +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# . # # Rules for making a subdirectory in the GNU C library. @@ -26,11 +25,12 @@ endif all: # Don't let the default goal come from Makeconfig. -include ../Makeconfig +include $(firstword $(..) ../)Makeconfig ifndef subdir Each subdirectory makefile must define the `subdir' variable. endif +# This ` unconfuses emacs. # This is benign and useless in GNU make before 3.63. export subdir := $(subdir) @@ -38,8 +38,15 @@ export subdir := $(subdir) .PHONY: all all: objs lib others +ifeq ($(build-programs),yes) others: $(addprefix $(objpfx),$(extra-objs) \ - $(install-lib) $(install-bin) $(install-sbin)) + $(install-lib) \ + $(install-bin) $(install-bin-script) \ + $(install-rootsbin) $(install-sbin)) +else +others: $(addprefix $(objpfx),$(extra-objs) \ + $(install-lib)) +endif ifneq "$(findstring env,$(origin headers))" "" headers := @@ -53,13 +60,10 @@ ifneq "$(findstring env,$(origin common-generated))" "" common-generated := endif -ifeq "$(strip $(headers))" "" -ifneq "$(wildcard $(subdir).h)" "" -override headers := $(subdir).h -endif -endif +# See below. This must be set before Makerules processes it. +before-compile += $(common-objpfx)bits/stdio_lim.h -include ../Makerules +include $(..)Makerules .PHONY: subdir_lib subdir_lib: lib-noranlib @@ -70,83 +74,159 @@ dep-dummy-lib = $(common-objpfx)dummy.o define make-dummy-lib $(AR) cr$(verbose) $@ $< endef + $(common-objpfx)dummy.c: rm -f $@ - echo 'void __dummy__ () { }' > $@ -$(common-objpfx)empty.c: - cp -f /dev/null $@ -common-generated := $(common-generated) dummy.o dummy.c empty.c empty.o + (echo 'extern void __dummy__ (void);'; \ + echo 'void __dummy__ (void) { }') > $@ +common-generated += dummy.o dummy.c -# This makes all the auxilliary and test programs. +# This makes all the auxiliary and test programs. + +.PHONY: others tests bench -.PHONY: others tests -others: $(addprefix $(objpfx),$(others) $(extra-objs)) -ifeq ($(cross-compiling),yes) -tests: $(addprefix $(objpfx),$(tests)) +ifeq ($(build-programs),yes) +others: $(addprefix $(objpfx),$(others) $(sysdep-others) $(extra-objs)) +else +others: $(addprefix $(objpfx),$(extra-objs)) +endif +ifeq ($(run-built-tests),no) +tests: $(addprefix $(objpfx),$(tests) $(test-srcs)) $(tests-special) +xtests: tests $(xtests-special) else -tests: $(tests:%=$(objpfx)%.out) +tests: $(tests:%=$(objpfx)%.out) $(tests-special) +xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-special) endif -ifneq "$(strip $(others) $(tests))" "" -$(addprefix $(objpfx),$(others) $(tests)): %: %.o \ - $(sort $(filter $(common-objpfx)libc%,$(link-libc))) +tests-special-notdir = $(patsubst $(objpfx)%, %, $(tests-special)) +xtests-special-notdir = $(patsubst $(objpfx)%, %, $(xtests-special)) +tests: + $(..)scripts/merge-test-results.sh -s $(objpfx) $(subdir) \ + $(sort $(tests) $(tests-special-notdir:.out=)) \ + > $(objpfx)subdir-tests.sum +xtests: + $(..)scripts/merge-test-results.sh -s $(objpfx) $(subdir) \ + $(sort $(xtests) $(xtests-special-notdir:.out=)) \ + > $(objpfx)subdir-xtests.sum + +ifeq ($(build-programs),yes) +binaries-all-notests = $(others) $(sysdep-others) +binaries-all-tests = $(tests) $(xtests) $(test-srcs) +binaries-all = $(binaries-all-notests) $(binaries-all-tests) +binaries-static-notests = $(others-static) +binaries-static-tests = $(tests-static) $(xtests-static) +binaries-static = $(binaries-static-notests) $(binaries-static-tests) +ifeq (yesyes,$(have-fpie)$(build-shared)) +binaries-pie-tests = $(tests-pie) $(xtests-pie) +binaries-pie-notests = $(others-pie) +else +binaries-pie-tests = +binaries-pie-notests = +endif +else +binaries-all-notests = +binaries-all-tests = $(tests) $(xtests) $(test-srcs) +binaries-all = $(binaries-all-tests) +binaries-static-notests = +binaries-static-tests = +binaries-static = +binaries-pie-tests = +binaries-pie-notests = +endif + +binaries-pie = $(binaries-pie-tests) $(binaries-pie-notests) +binaries-shared-tests = $(filter-out $(binaries-pie) $(binaries-static), \ + $(binaries-all-tests)) +binaries-shared-notests = $(filter-out $(binaries-pie) $(binaries-static), \ + $(binaries-all-notests)) + +ifneq "$(strip $(binaries-shared-notests))" "" +$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \ + $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ + $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) $(+link) endif -ifneq "$(strip $(tests))" "" +ifneq "$(strip $(binaries-shared-tests))" "" +$(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \ + $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ + $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) + $(+link-tests) +endif + +ifneq "$(strip $(binaries-pie-tests))" "" +$(addprefix $(objpfx),$(binaries-pie-tests)): %: %.o \ + $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ + $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) + $(+link-pie-tests) +endif + +ifneq "$(strip $(binaries-pie-notests))" "" +$(addprefix $(objpfx),$(binaries-pie-notests)): %: %.o \ + $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ + $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) + $(+link-pie) +endif + +ifneq "$(strip $(binaries-static-notests))" "" +$(addprefix $(objpfx),$(binaries-static-notests)): %: %.o \ + $(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \ + $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) + $(+link-static) +endif + +ifneq "$(strip $(binaries-static-tests))" "" +$(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \ + $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \ + $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) + $(+link-static-tests) +endif + +ifneq "$(strip $(tests) $(xtests) $(test-srcs))" "" # These are the implicit rules for making test outputs # from the test programs and whatever input files are present. -$(objpfx)%.out: %.args $(objpfx)% %.input - $($*-ENV) $(built-program-cmd) `cat $(word 1,$^)` < $(word 3,$^) > $@ -$(objpfx)%.out: %.args $(objpfx)% - $($*-ENV) $(built-program-cmd) `cat $(word 1,$^)` > $@ + +make-test-out = $(test-wrapper-env) \ + $(run-program-env) \ + $($*-ENV) $(host-test-program-cmd) $($*-ARGS) $(objpfx)%.out: %.input $(objpfx)% - $($*-ENV) $(built-program-cmd) < $(word 1,$^) > $@ + $(make-test-out) > $@ < $(word 1,$^); \ + $(evaluate-test) $(objpfx)%.out: /dev/null $(objpfx)% # Make it 2nd arg for canned sequence. - $($*-ENV) $(built-program-cmd) > $@ + $(make-test-out) > $@; \ + $(evaluate-test) + endif # tests + .PHONY: distclean realclean subdir_distclean subdir_realclean \ - subdir_clean subdir_mostlyclean + subdir_clean subdir_mostlyclean subdir_testclean subdir_mostlyclean: mostlyclean subdir_clean: clean subdir_distclean: distclean subdir_realclean: realclean +subdir_testclean: do-tests-clean realclean: distclean distclean: clean -.PHONY: subdir_echo-headers -subdir_echo-headers: echo-headers - -.PHONY: subdir_echo-distinfo -subdir_echo-distinfo: - @echo $(addprefix +header+,$(headers)) \ - $(addprefix +nodist+,$(generated) $(common-generated) $(dont_distribute)) - # We want to install everything except the library itself, but update all # our portions of the library because the parent make will install it later # (likewise the stubs file). .PHONY: subdir_install subdir_install: install-no-libc.a lib-noranlib stubs -.PHONY: subdir_TAGS subdir_dist -subdir_TAGS: TAGS -subdir_dist: dist +.PHONY: subdir_objs subdir_stubs +subdir_objs: objs +subdir_stubs: stubs -# Convenient target to update all the generated source files. -.PHONY: generated -generated: $(addprefix $(objpfx),$(generated)) -generated: $(addprefix $(common-objpfx),$(common-generated)) +# Target required by the Hurd to ensure that all the MiG-generated +# headers are in place before building a subdirectory. +.PHONY: before-compile +before-compile: $(before-compile) -ifndef libc.so-version -# Undefine this because it can't work when we libc.so is unversioned. -static-only-routines = -endif +$(common-objpfx)dummy.o: $(common-objpfx)dummy.c $(before-compile); + $(compile-command.c) -ifdef static-only-routines -# These routines are to be omitted from the shared library object, -# so we replace the PIC objects for them with the empty object file. -$(static-only-routines:%=$(objpfx)%.so): %.so: $(common-objpfx)empty.o - rm -f $@ - ln $< $@ -endif +# Local Variables: +# mode: makefile +# End: