1 # Makefile for support library, used only at build and test time
2 # Copyright (C) 2016-2023 Free Software Foundation, Inc.
3 # This file is part of the GNU C Library.
5 # The GNU C Library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License, or (at your option) any later version.
10 # The GNU C Library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with the GNU C Library; if not, see
17 # <https://www.gnu.org/licenses/>.
23 extra-libs
:= libsupport
24 extra-libs-others
= $(extra-libs
)
25 extra-libs-noinstall
:= $(extra-libs
)
27 libsupport-routines
= \
40 resolv_response_context_duplicate \
41 resolv_response_context_free \
44 support-open-dev-null-range \
46 support-xfstat-time64 \
48 support-xstat-time64 \
51 support_capture_subprocess \
52 support_capture_subprocess_check \
55 support_copy_file_range \
56 support_create_timer \
57 support_descriptor_supports_holes \
59 support_enter_mount_namespace \
60 support_enter_network_namespace \
61 support_format_address_family \
62 support_format_addrinfo \
63 support_format_dns_packet \
64 support_format_herrno \
65 support_format_hostent \
66 support_format_netent \
67 support_isolate_in_subprocess \
68 support_mutex_pi_monotonic \
71 support_path_support_time64 \
73 support_process_state \
76 support_quote_blob_wide \
77 support_quote_string \
78 support_record_failure \
80 support_select_modifies_timeout \
81 support_select_normalizes_timeout \
82 support_set_small_thread_stack_size \
83 support_set_vma_name_supported \
84 support_shared_allocate \
85 support_small_stack_thread_attribute \
86 support_socket_so_timestamp_time64 \
88 support_stat_nanoseconds \
90 support_test_compare_blob \
91 support_test_compare_failure \
92 support_test_compare_string \
93 support_test_compare_string_wide \
95 support_test_verify_impl \
96 support_wait_for_thread_exit \
97 support_write_file_string \
101 timespec-add-time64 \
103 timespec-sub-time64 \
115 xclock_gettime_time64 \
117 xclock_settime_time64 \
153 xposix_spawn_file_actions_addclose \
154 xposix_spawn_file_actions_adddup2 \
155 xpthread_attr_destroy \
157 xpthread_attr_setaffinity_np \
158 xpthread_attr_setdetachstate \
159 xpthread_attr_setguardsize \
160 xpthread_attr_setstack \
161 xpthread_attr_setstacksize \
162 xpthread_barrier_destroy \
163 xpthread_barrier_init \
164 xpthread_barrier_wait \
165 xpthread_barrierattr_destroy \
166 xpthread_barrierattr_init \
167 xpthread_barrierattr_setpshared \
169 xpthread_check_return \
170 xpthread_cond_signal \
175 xpthread_key_create \
176 xpthread_key_delete \
178 xpthread_mutex_consistent \
179 xpthread_mutex_destroy \
180 xpthread_mutex_init \
181 xpthread_mutex_lock \
182 xpthread_mutex_unlock \
183 xpthread_mutexattr_destroy \
184 xpthread_mutexattr_init \
185 xpthread_mutexattr_setprotocol \
186 xpthread_mutexattr_setpshared \
187 xpthread_mutexattr_setrobust \
188 xpthread_mutexattr_settype \
190 xpthread_rwlock_destroy \
191 xpthread_rwlock_init \
192 xpthread_rwlock_rdlock \
193 xpthread_rwlock_unlock \
194 xpthread_rwlock_wrlock \
195 xpthread_rwlockattr_init \
196 xpthread_rwlockattr_setkind_np \
199 xpthread_spin_unlock \
221 # libsupport-routines
223 libsupport-static-only-routines
:= $(libsupport-routines
)
224 # Only build one variant of the library.
225 libsupport-inhibit-o
:= .os
226 ifeq ($(build-shared
),yes
)
227 libsupport-inhibit-o
+= .o
230 CFLAGS-support_paths.c
= \
231 -DSRCDIR_PATH
=\"`cd .. ; pwd`\" \
232 -DOBJDIR_PATH
=\"`cd $(objpfx)/..; pwd`\" \
233 -DOBJDIR_ELF_LDSO_PATH
=\"`cd $(objpfx)/..; pwd`/elf
/$(rtld-installed-name
)\" \
234 -DINSTDIR_PATH
=\"$(prefix)\" \
235 -DLIBDIR_PATH
=\"$(libdir)\" \
236 -DBINDIR_PATH
=\"$(bindir)\" \
237 -DSBINDIR_PATH
=\"$(sbindir
)\" \
238 -DSLIBDIR_PATH
=\"$(slibdir
)\" \
239 -DROOTSBINDIR_PATH
=\"$(rootsbindir
)\" \
240 -DCOMPLOCALEDIR_PATH
=\"$(complocaledir
)\" \
241 -DSYSCONFDIR_PATH
=\"$(sysconfdir
)\"
243 # Build with exception handling and asynchronous unwind table support.
244 CFLAGS-.oS
+= -fexceptions
-fasynchronous-unwind-tables
246 # In support_timespec_check_in_range we may be passed a very tight
247 # range for which we should produce a correct result for expected
248 # being within the observed range. The code uses double internally
249 # in support_timespec_check_in_range and for that computation we use
250 # -fexcess-precision=standard.
251 CFLAGS-timespec.c
+= -fexcess-precision
=standard
252 CFLAGS-timespec-time64.c
+= -fexcess-precision
=standard
254 # Ensure that general support files use 64-bit time_t
255 CFLAGS-delayed_exit.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
256 CFLAGS-shell-container.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
257 CFLAGS-support_can_chroot.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
258 CFLAGS-support_copy_file.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
259 CFLAGS-support_copy_file_range.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
260 CFLAGS-support_descriptor_supports_holes.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
261 CFLAGS-support_descriptors.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
262 CFLAGS-support_process_state.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
263 CFLAGS-support_stat_nanoseconds.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
264 CFLAGS-support_subprocess.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
265 CFLAGS-support_test_main.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
266 CFLAGS-test-container.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
267 CFLAGS-xmkdirp.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
268 # This is required to get an mkstemp which can create large files on some
270 CFLAGS-temp_file.c
+= -D_FILE_OFFSET_BITS
=64 -D_TIME_BITS
=64
273 LINKS_DSO_PROGRAM
= links-dso-program-c
275 LINKS_DSO_PROGRAM
= links-dso-program
276 LDLIBS-links-dso-program
= -lstdc
++ -lgcc
-lgcc_s
$(libunwind
)
279 ifeq (yes
,$(have-selinux
))
280 LDLIBS-
$(LINKS_DSO_PROGRAM
) += -lselinux
284 LDLIBS-test-container
= $(libsupport
)
286 others
+= test-container
287 others-noinstall
+= test-container
294 others-noinstall
+= \
300 others
+= $(LINKS_DSO_PROGRAM
)
301 others-noinstall
+= $(LINKS_DSO_PROGRAM
)
303 others
+= test-run-command
304 others-static
+= test-run-command
305 others-noinstall
+= test-run-command
306 LDLIBS-test-run-command
= $(libsupport
)
308 $(objpfx
)test-container
: $(libsupport
)
309 $(objpfx
)shell-container
: $(libsupport
)
310 $(objpfx
)echo-container
: $(libsupport
)
311 $(objpfx
)true-container
: $(libsupport
)
312 $(objpfx
)test-run-command
: $(libsupport
) $(common-objpfx
)elf
/static-stubs.o
316 tst-support-namespace \
317 tst-support-open-dev-null-range \
318 tst-support-process_state \
319 tst-support_blob_repeat \
320 tst-support_capture_subprocess \
321 tst-support_descriptors \
322 tst-support_format_dns_packet \
323 tst-support_quote_blob \
324 tst-support_quote_blob_wide \
325 tst-support_quote_string \
326 tst-support_record_failure \
328 tst-test_compare_blob \
329 tst-test_compare_string \
330 tst-test_compare_string_wide \
336 ifeq ($(run-built-tests
),yes
)
338 $(objpfx
)tst-support_record_failure-2.out
340 $(objpfx
)tst-support_record_failure-2.out
: tst-support_record_failure-2.sh \
341 $(objpfx
)tst-support_record_failure
342 $(SHELL
) $< $(common-objpfx
) '$(test-program-prefix-before-env)' \
343 '$(run-program-env)' '$(test-program-prefix-after-env)' \
348 tests-special
+= $(objpfx
)tst-glibcpp.out
350 $(objpfx
)tst-glibcpp.out
: tst-glibcpp.py
$(..
)scripts
/glibcpp.py
351 PYTHONPATH
=$(..
)scripts
$(PYTHON
) tst-glibcpp.py
> $@
2>&1; \
354 $(objpfx
)tst-support_format_dns_packet
: $(common-objpfx
)resolv
/libresolv.so
356 tst-support_capture_subprocess-ARGS
= -- $(host-test-program-cmd
)