mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
79520f4bd6
glibc's Makeconfig defines some variables such as $(libm) and $(libdl) for linking with libraries built by glibc, and nptl/Makeconfig (included by the toplevel Makeconfig) defines others such as $(shared-thread-library). In some places glibc's Makefiles use those variables when linking against the relevant libraries, but in other places they hardcode the location of the libraries in the build tree. This patch cleans up various places to use the variables that already exist (in the case of libm, replacing several duplicate definitions of a $(link-libm) variable in subdirectory Makefiles). (It's not necessarily exactly equivalent to what the existing code does - in particular, $(shared-thread-library) includes libpthread_nonshared, but is replacing places that just referred to libpthread.so. But I think that change is desirable on the general principle of linking things as close as possible to the way in which they would be linked with an installed library, unless there is a clear reason not to do so.) To support running tests with an installed copy of glibc without needing the full build tree from when that copy was built, I think it will be useful to use such variables more generally and systematically - every time the rules for building a test refer to some file from the build tree that's also installed by glibc, use a makefile variable so that the installed-testing case can point those variables to installed copies of the files. This patch just deals with straightforward cases where such variables already exist. It's quite possible some uses of $(shared-thread-library) should actually be a new $(thread-library) variable that's set appropriately in the --disable-shared case, if those uses would in fact work without shared libraries. I didn't change the status quo that those cases hardcode use of a shared library whether or not it's actually needed (but other uses such as $(libm) and $(libdl) would now get the static library if the shared library isn't built, when some previously hardcoded use of the shared library - if they actually need shared libraries, the test itself needs an enable-shared conditional anyway). Tested x86_64. * benchtests/Makefile ($(addprefix $(objpfx)bench-,$(bench-math))): Depend on $(libm), not $(common-objpfx)math/libm.so. ($(addprefix $(objpfx)bench-,$(bench-pthread))): Depend on $(shared-thread-library), not $(common-objpfx)nptl/libpthread.so. * elf/Makefile ($(objpfx)noload): Depend on $(libdl), not $(common-objpfx)dlfcn/libdl.so. ($(objpfx)tst-audit8): Depend on $(libm), not $(common-objpfx)math/libm.so. * malloc/Makefile ($(objpfx)libmemusage.so): Depend on $(libdl), not $(common-objpfx)dlfcn/libdl.so. * math/Makefile ($(addprefix $(objpfx),$(filter-out $(tests-static),$(tests)))): Depend on $(libm), not $(objpfx)libm.so. Do not condition on [$(build-shared) = yes]. ($(objpfx)test-fenv-tls): Depend on $(shared-thread-library), not $(common-objpfx)nptl/libpthread.so. * misc/Makefile ($(objpfx)tst-tsearch): Depend on $(libm), not $(common-objpfx)math/libm.so$(libm.so-version) or $(common-objpfx)math/libm.a depending on [$(build-shared) = yes]. * nptl/Makefile ($(objpfx)tst-unload): Depend on $(libdl), not $(common-objpfx)dlfcn/libdl.so. * setjmp/Makefile (link-libm): Remove variable. ($(objpfx)tst-setjmp-fp): Depend on $(libm), not $(link-libm). * stdio-common/Makefile (link-libm): Remove variable. ($(objpfx)tst-printf-round): Depend on $(libm), not $(link-libm). * stdlib/Makefile (link-libm): Remove variable. ($(objpfx)bug-getcontext): Depend on $(libm), not $(link-libm). ($(objpfx)tst-strtod-round): Likewise. ($(objpfx)tst-tininess): Likewise. ($(objpfx)tst-strtod-underflow): Likewise. ($(objpfx)tst-strtod6): Likewise. ($(objpfx)tst-tls-atexit): Depend on $(shared-thread-library) and $(libdl), not $(common-objpfx)nptl/libpthread.so and $(common-objpfx)dlfcn/libdl.so.
155 lines
4.6 KiB
Makefile
155 lines
4.6 KiB
Makefile
# Copyright (C) 1991-2014 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 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
|
|
# Lesser General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with the GNU C Library; if not, see
|
|
# <http://www.gnu.org/licenses/>.
|
|
|
|
#
|
|
# Makefile for malloc routines
|
|
#
|
|
subdir := malloc
|
|
|
|
include ../Makeconfig
|
|
|
|
dist-headers := malloc.h
|
|
headers := $(dist-headers) obstack.h mcheck.h
|
|
tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \
|
|
tst-mallocstate tst-mcheck tst-mallocfork tst-trim1 \
|
|
tst-malloc-usable tst-realloc tst-posix_memalign \
|
|
tst-pvalloc tst-memalign tst-mallopt
|
|
test-srcs = tst-mtrace
|
|
|
|
routines = malloc morecore mcheck mtrace obstack
|
|
|
|
install-lib := libmcheck.a
|
|
non-lib.a := libmcheck.a
|
|
|
|
# Additional library.
|
|
extra-libs = libmemusage
|
|
extra-libs-others = $(extra-libs)
|
|
|
|
libmemusage-routines = memusage
|
|
libmemusage-inhibit-o = $(filter-out .os,$(object-suffixes))
|
|
|
|
# These should be removed by `make clean'.
|
|
extra-objs = mcheck-init.o libmcheck.a
|
|
|
|
# Include the cleanup handler.
|
|
aux := set-freeres thread-freeres
|
|
|
|
CPPFLAGS-memusagestat = -DNOT_IN_libc
|
|
|
|
# The Perl script to analyze the output of the mtrace functions.
|
|
ifneq ($(PERL),no)
|
|
install-bin-script = mtrace
|
|
generated += mtrace
|
|
|
|
# The Perl script will print addresses and to do this nicely we must know
|
|
# whether we are on a 32 or 64 bit machine.
|
|
ifneq ($(findstring wordsize-32,$(config-sysdirs)),)
|
|
address-width=10
|
|
else
|
|
address-width=18
|
|
endif
|
|
endif
|
|
|
|
# Unless we get a test for the availability of libgd which also works
|
|
# for cross-compiling we disable the memusagestat generation in this
|
|
# situation.
|
|
ifneq ($(cross-compiling),yes)
|
|
# If the gd library is available we build the `memusagestat' program.
|
|
ifneq ($(LIBGD),no)
|
|
others: $(objpfx)memusage
|
|
install-bin = memusagestat
|
|
install-bin-script += memusage
|
|
generated += memusagestat memusage
|
|
extra-objs += memusagestat.o
|
|
|
|
# The configure.ac check for libgd and its headers did not use $SYSINCLUDES.
|
|
# The directory specified by --with-headers usually contains only the basic
|
|
# kernel interface headers, not something like libgd. So the simplest thing
|
|
# is to presume that the standard system headers will be ok for this file.
|
|
$(objpfx)memusagestat.o: sysincludes = # nothing
|
|
endif
|
|
endif
|
|
|
|
# Another goal which can be used to override the configure decision.
|
|
.PHONY: do-memusagestat
|
|
do-memusagestat: $(objpfx)memusagestat
|
|
|
|
memusagestat-modules = memusagestat
|
|
$(objpfx)memusagestat: $(memusagestat-modules:%=$(objpfx)%.o)
|
|
$(LINK.o) -o $@ $^ $(libgd-LDFLAGS) -lgd -lpng -lz -lm
|
|
|
|
ifeq ($(run-built-tests),yes)
|
|
ifeq (yes,$(build-shared))
|
|
ifneq ($(PERL),no)
|
|
tests-special += $(objpfx)tst-mtrace.out
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
include ../Rules
|
|
|
|
CFLAGS-mcheck-init.c = $(PIC-ccflag)
|
|
CFLAGS-obstack.c = $(uses-callbacks)
|
|
|
|
$(objpfx)libmcheck.a: $(objpfx)mcheck-init.o
|
|
-rm -f $@
|
|
$(patsubst %/,cd % &&,$(objpfx)) \
|
|
$(LN_S) $(<F) $(@F)
|
|
|
|
lib: $(objpfx)libmcheck.a
|
|
|
|
ifeq ($(run-built-tests),yes)
|
|
ifeq (yes,$(build-shared))
|
|
ifneq ($(PERL),no)
|
|
$(objpfx)tst-mtrace.out: tst-mtrace.sh $(objpfx)tst-mtrace
|
|
$(SHELL) $< $(common-objpfx) '$(test-program-prefix)'; \
|
|
$(evaluate-test)
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
tst-mcheck-ENV = MALLOC_CHECK_=3
|
|
tst-malloc-usable-ENV = MALLOC_CHECK_=3
|
|
|
|
# Uncomment this for test releases. For public releases it is too expensive.
|
|
#CPPFLAGS-malloc.o += -DMALLOC_DEBUG=1
|
|
|
|
sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,')
|
|
|
|
$(objpfx)mtrace: mtrace.pl
|
|
rm -f $@.new
|
|
sed -e 's|@PERL@|$(PERL)|' -e 's|@XXX@|$(address-width)|' \
|
|
-e 's|@VERSION@|$(version)|' \
|
|
-e 's|@PKGVERSION@|$(PKGVERSION)|' \
|
|
-e 's|@REPORT_BUGS_TO@|$(REPORT_BUGS_TO)|' $^ > $@.new \
|
|
&& rm -f $@ && mv $@.new $@ && chmod +x $@
|
|
|
|
$(objpfx)memusage: memusage.sh
|
|
rm -f $@.new
|
|
sed -e 's|@BASH@|$(BASH)|' -e 's|@VERSION@|$(version)|' \
|
|
-e 's|@SLIBDIR@|$(sLIBdir)|' -e 's|@BINDIR@|$(bindir)|' \
|
|
-e 's|@PKGVERSION@|$(PKGVERSION)|' \
|
|
-e 's|@REPORT_BUGS_TO@|$(REPORT_BUGS_TO)|' $^ > $@.new \
|
|
&& rm -f $@ && mv $@.new $@ && chmod +x $@
|
|
|
|
|
|
# The implementation uses `dlsym'
|
|
$(objpfx)libmemusage.so: $(libdl)
|
|
|
|
# Extra dependencies
|
|
$(foreach o,$(all-object-suffixes),$(objpfx)malloc$(o)): arena.c hooks.c
|