| xf.li | bdd93d5 | 2023-05-12 07:10:14 -0700 | [diff] [blame] | 1 | # Copyright (C) 1991-2016 Free Software Foundation, Inc. | 
|  | 2 | # This file is part of the GNU C Library. | 
|  | 3 |  | 
|  | 4 | # The GNU C Library is free software; you can redistribute it and/or | 
|  | 5 | # modify it under the terms of the GNU Lesser General Public | 
|  | 6 | # License as published by the Free Software Foundation; either | 
|  | 7 | # version 2.1 of the License, or (at your option) any later version. | 
|  | 8 |  | 
|  | 9 | # The GNU C Library is distributed in the hope that it will be useful, | 
|  | 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | 12 | # Lesser General Public License for more details. | 
|  | 13 |  | 
|  | 14 | # You should have received a copy of the GNU Lesser General Public | 
|  | 15 | # License along with the GNU C Library; if not, see | 
|  | 16 | # <http://www.gnu.org/licenses/>. | 
|  | 17 |  | 
|  | 18 | # | 
|  | 19 | #	Makefile for malloc routines | 
|  | 20 | # | 
|  | 21 | subdir	:= malloc | 
|  | 22 |  | 
|  | 23 | include ../Makeconfig | 
|  | 24 |  | 
|  | 25 | dist-headers := malloc.h | 
|  | 26 | headers := $(dist-headers) obstack.h mcheck.h | 
|  | 27 | tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \ | 
|  | 28 | tst-mallocstate tst-mcheck tst-mallocfork tst-trim1 \ | 
|  | 29 | tst-malloc-usable tst-realloc tst-posix_memalign \ | 
|  | 30 | tst-pvalloc tst-memalign tst-mallopt tst-scratch_buffer \ | 
|  | 31 | tst-malloc-backtrace tst-malloc-thread-exit \ | 
|  | 32 | tst-malloc-thread-fail | 
|  | 33 | test-srcs = tst-mtrace | 
|  | 34 |  | 
|  | 35 | routines = malloc morecore mcheck mtrace obstack \ | 
|  | 36 | scratch_buffer_grow scratch_buffer_grow_preserve \ | 
|  | 37 | scratch_buffer_set_array_size | 
|  | 38 |  | 
|  | 39 | install-lib := libmcheck.a | 
|  | 40 | non-lib.a := libmcheck.a | 
|  | 41 |  | 
|  | 42 | # Additional library. | 
|  | 43 | extra-libs = libmemusage | 
|  | 44 | extra-libs-others = $(extra-libs) | 
|  | 45 |  | 
|  | 46 | libmemusage-routines = memusage | 
|  | 47 | libmemusage-inhibit-o = $(filter-out .os,$(object-suffixes)) | 
|  | 48 |  | 
|  | 49 | $(objpfx)tst-malloc-backtrace: $(common-objpfx)nptl/libpthread.so \ | 
|  | 50 | $(common-objpfx)nptl/libpthread_nonshared.a | 
|  | 51 | $(objpfx)tst-malloc-thread-exit: $(common-objpfx)nptl/libpthread.so \ | 
|  | 52 | $(common-objpfx)nptl/libpthread_nonshared.a | 
|  | 53 | $(objpfx)tst-malloc-thread-fail: $(common-objpfx)nptl/libpthread.so \ | 
|  | 54 | $(common-objpfx)nptl/libpthread_nonshared.a | 
|  | 55 |  | 
|  | 56 | # These should be removed by `make clean'. | 
|  | 57 | extra-objs = mcheck-init.o libmcheck.a | 
|  | 58 |  | 
|  | 59 | # Include the cleanup handler. | 
|  | 60 | aux := set-freeres thread-freeres | 
|  | 61 |  | 
|  | 62 | # The Perl script to analyze the output of the mtrace functions. | 
|  | 63 | ifneq ($(PERL),no) | 
|  | 64 | install-bin-script = mtrace | 
|  | 65 | generated += mtrace | 
|  | 66 |  | 
|  | 67 | # The Perl script will print addresses and to do this nicely we must know | 
|  | 68 | # whether we are on a 32 or 64 bit machine. | 
|  | 69 | ifneq ($(findstring wordsize-32,$(config-sysdirs)),) | 
|  | 70 | address-width=10 | 
|  | 71 | else | 
|  | 72 | address-width=18 | 
|  | 73 | endif | 
|  | 74 | endif | 
|  | 75 |  | 
|  | 76 | # Unless we get a test for the availability of libgd which also works | 
|  | 77 | # for cross-compiling we disable the memusagestat generation in this | 
|  | 78 | # situation. | 
|  | 79 | ifneq ($(cross-compiling),yes) | 
|  | 80 | # If the gd library is available we build the `memusagestat' program. | 
|  | 81 | ifneq ($(LIBGD),no) | 
|  | 82 | others: $(objpfx)memusage | 
|  | 83 | install-bin = memusagestat | 
|  | 84 | install-bin-script += memusage | 
|  | 85 | generated += memusagestat memusage | 
|  | 86 | extra-objs += memusagestat.o | 
|  | 87 |  | 
|  | 88 | # The configure.ac check for libgd and its headers did not use $SYSINCLUDES. | 
|  | 89 | # The directory specified by --with-headers usually contains only the basic | 
|  | 90 | # kernel interface headers, not something like libgd.  So the simplest thing | 
|  | 91 | # is to presume that the standard system headers will be ok for this file. | 
|  | 92 | $(objpfx)memusagestat.o: sysincludes = # nothing | 
|  | 93 | endif | 
|  | 94 | endif | 
|  | 95 |  | 
|  | 96 | # Another goal which can be used to override the configure decision. | 
|  | 97 | .PHONY: do-memusagestat | 
|  | 98 | do-memusagestat: $(objpfx)memusagestat | 
|  | 99 |  | 
|  | 100 | memusagestat-modules = memusagestat | 
|  | 101 |  | 
|  | 102 | cpp-srcs-left := $(memusagestat-modules) | 
|  | 103 | lib := memusagestat | 
|  | 104 | include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) | 
|  | 105 |  | 
|  | 106 | $(objpfx)memusagestat: $(memusagestat-modules:%=$(objpfx)%.o) | 
|  | 107 | $(LINK.o) -o $@ $^ $(libgd-LDFLAGS) -lgd -lpng -lz -lm | 
|  | 108 |  | 
|  | 109 | ifeq ($(run-built-tests),yes) | 
|  | 110 | ifeq (yes,$(build-shared)) | 
|  | 111 | ifneq ($(PERL),no) | 
|  | 112 | tests-special += $(objpfx)tst-mtrace.out | 
|  | 113 | endif | 
|  | 114 | endif | 
|  | 115 | endif | 
|  | 116 |  | 
|  | 117 | include ../Rules | 
|  | 118 |  | 
|  | 119 | CFLAGS-mcheck-init.c = $(PIC-ccflag) | 
|  | 120 | CFLAGS-obstack.c = $(uses-callbacks) | 
|  | 121 |  | 
|  | 122 | $(objpfx)libmcheck.a: $(objpfx)mcheck-init.o | 
|  | 123 | -rm -f $@ | 
|  | 124 | $(patsubst %/,cd % &&,$(objpfx)) \ | 
|  | 125 | $(LN_S) $(<F) $(@F) | 
|  | 126 |  | 
|  | 127 | lib: $(objpfx)libmcheck.a | 
|  | 128 |  | 
|  | 129 | ifeq ($(run-built-tests),yes) | 
|  | 130 | ifeq (yes,$(build-shared)) | 
|  | 131 | ifneq ($(PERL),no) | 
|  | 132 | $(objpfx)tst-mtrace.out: tst-mtrace.sh $(objpfx)tst-mtrace | 
|  | 133 | $(SHELL) $< $(common-objpfx) '$(test-program-prefix-before-env)' \ | 
|  | 134 | '$(run-program-env)' '$(test-program-prefix-after-env)' ; \ | 
|  | 135 | $(evaluate-test) | 
|  | 136 | endif | 
|  | 137 | endif | 
|  | 138 | endif | 
|  | 139 |  | 
|  | 140 | tst-mcheck-ENV = MALLOC_CHECK_=3 | 
|  | 141 | tst-malloc-usable-ENV = MALLOC_CHECK_=3 | 
|  | 142 |  | 
|  | 143 | # Uncomment this for test releases.  For public releases it is too expensive. | 
|  | 144 | #CPPFLAGS-malloc.o += -DMALLOC_DEBUG=1 | 
|  | 145 |  | 
|  | 146 | sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,') | 
|  | 147 |  | 
|  | 148 | $(objpfx)mtrace: mtrace.pl | 
|  | 149 | rm -f $@.new | 
|  | 150 | sed -e 's|@PERL@|$(PERL)|' -e 's|@XXX@|$(address-width)|' \ | 
|  | 151 | -e 's|@VERSION@|$(version)|' \ | 
|  | 152 | -e 's|@PKGVERSION@|$(PKGVERSION)|' \ | 
|  | 153 | -e 's|@REPORT_BUGS_TO@|$(REPORT_BUGS_TO)|' $^ > $@.new \ | 
|  | 154 | && rm -f $@ && mv $@.new $@ && chmod +x $@ | 
|  | 155 |  | 
|  | 156 | $(objpfx)memusage: memusage.sh | 
|  | 157 | rm -f $@.new | 
|  | 158 | sed -e 's|@BASH@|$(BASH)|' -e 's|@VERSION@|$(version)|' \ | 
|  | 159 | -e 's|@SLIBDIR@|$(sLIBdir)|' -e 's|@BINDIR@|$(bindir)|' \ | 
|  | 160 | -e 's|@PKGVERSION@|$(PKGVERSION)|' \ | 
|  | 161 | -e 's|@REPORT_BUGS_TO@|$(REPORT_BUGS_TO)|' $^ > $@.new \ | 
|  | 162 | && rm -f $@ && mv $@.new $@ && chmod +x $@ | 
|  | 163 |  | 
|  | 164 |  | 
|  | 165 | # The implementation uses `dlsym' | 
|  | 166 | $(objpfx)libmemusage.so: $(libdl) | 
|  | 167 |  | 
|  | 168 | # Extra dependencies | 
|  | 169 | $(foreach o,$(all-object-suffixes),$(objpfx)malloc$(o)): arena.c hooks.c |