1#
2#   Copyright (C) 1994-2022 Free Software Foundation, Inc.
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#   <https://www.gnu.org/licenses/>.
17
18subdir := htl
19
20srcdir = .
21
22MICROKERNEL := mach
23SYSDEPS := lockfile
24
25LCLHDRS :=
26
27libpthread-routines := pt-attr pt-attr-destroy pt-attr-getdetachstate	    \
28	pt-attr-getguardsize pt-attr-getinheritsched			    \
29	pt-attr-getschedparam pt-attr-getschedpolicy pt-attr-getscope	    \
30	pt-attr-getstack pt-attr-getstackaddr pt-attr-getstacksize	    \
31	pt-attr-init pt-attr-setdetachstate pt-attr-setguardsize	    \
32	pt-attr-setinheritsched pt-attr-setschedparam			    \
33	pt-attr-setschedpolicy pt-attr-setscope pt-attr-setstack	    \
34	pt-attr-setstackaddr pt-attr-setstacksize			    \
35									    \
36	pt-barrier-destroy pt-barrier-init pt-barrier-wait		    \
37	pt-barrier pt-barrierattr-destroy pt-barrierattr-init		    \
38	pt-barrierattr-getpshared pt-barrierattr-setpshared		    \
39									    \
40	pt-destroy-specific pt-init-specific				    \
41	pt-key-create pt-key-delete					    \
42	pt-getspecific pt-setspecific					    \
43									    \
44	pt-once								    \
45									    \
46	pt-alloc							    \
47	pt-create							    \
48	pt-getattr							    \
49	pt-equal							    \
50	pt-dealloc							    \
51	pt-detach							    \
52	pt-exit								    \
53	pt-initialize							    \
54	pt-join								    \
55	pt-self								    \
56	pt-sigmask							    \
57	pt-spin-inlines							    \
58	pt-cleanup							    \
59	pt-setcancelstate						    \
60	pt-setcanceltype						    \
61	pt-testcancel							    \
62	pt-cancel							    \
63									    \
64	pt-mutexattr-destroy pt-mutexattr-init				    \
65	pt-mutexattr-getprioceiling pt-mutexattr-getprotocol		    \
66	pt-mutexattr-getpshared pt-mutexattr-gettype			    \
67	pt-mutexattr-setprioceiling pt-mutexattr-setprotocol		    \
68	pt-mutexattr-setpshared pt-mutexattr-settype			    \
69	pt-mutexattr-getrobust pt-mutexattr-setrobust			    \
70									    \
71	pt-mutex-init pt-mutex-destroy pt-mutex-checklocked		    \
72	pt-mutex-lock pt-mutex-trylock pt-mutex-timedlock		    \
73	pt-mutex-unlock							    \
74	pt-mutex-transfer-np						    \
75	pt-mutex-getprioceiling pt-mutex-setprioceiling			    \
76	pt-mutex-consistent 						    \
77									    \
78	pt-rwlock-attr							    \
79	pt-rwlockattr-init pt-rwlockattr-destroy			    \
80	pt-rwlockattr-getpshared pt-rwlockattr-setpshared		    \
81									    \
82	pt-rwlock-init pt-rwlock-destroy				    \
83	pt-rwlock-rdlock pt-rwlock-tryrdlock				    \
84	pt-rwlock-trywrlock pt-rwlock-wrlock				    \
85	pt-rwlock-timedrdlock pt-rwlock-timedwrlock			    \
86	pt-rwlock-unlock						    \
87									    \
88	pt-cond								    \
89	pt-condattr-init pt-condattr-destroy				    \
90	pt-condattr-getclock pt-condattr-getpshared			    \
91	pt-condattr-setclock pt-condattr-setpshared			    \
92									    \
93	pt-cond-destroy pt-cond-init					    \
94	pt-cond-brdcast							    \
95	pt-cond-signal							    \
96	pt-cond-wait							    \
97	pt-cond-timedwait						    \
98	pt-hurd-cond-wait						    \
99	pt-hurd-cond-timedwait						    \
100									    \
101	pt-stack-alloc							    \
102	pt-thread-alloc							    \
103	pt-thread-start							    \
104	pt-thread-terminate						    \
105	pt-startup							    \
106									    \
107	pt-getconcurrency pt-setconcurrency				    \
108									    \
109	pt-block							    \
110	pt-timedblock							    \
111	pt-block-intr							    \
112	pt-timedblock-intr						    \
113	pt-wakeup							    \
114	pt-docancel							    \
115	pt-sysdep							    \
116	pt-setup							    \
117	pt-machdep							    \
118	pt-spin								    \
119									    \
120	pt-sigstate-init						    \
121	pt-sigstate-destroy						    \
122	pt-sigstate							    \
123									    \
124	pt-kill								    \
125	pt-getcpuclockid						    \
126									    \
127	pt-getschedparam pt-setschedparam pt-setschedprio		    \
128	pt-yield							    \
129									    \
130	sem_close sem-destroy sem-getvalue sem-init sem_open		    \
131	sem-post sem-timedwait sem-trywait sem_unlink			    \
132	sem-wait sem-waitfast						    \
133	sem_routines							    \
134									    \
135	cancellation							    \
136	cthreads-compat							    \
137	herrno								    \
138	$(SYSDEPS)
139
140headers :=				\
141              pthread.h				\
142	      semaphore.h			\
143						\
144              bits/pthread.h			\
145              bits/pthread-np.h			\
146              bits/pthreadtypes.h		\
147              bits/pthreadtypes-arch.h		\
148              bits/thread-shared-types.h	\
149              bits/types/struct___pthread_mutex.h	\
150              bits/types/struct___pthread_cond.h	\
151              bits/types/struct___pthread_condattr.h	\
152              bits/types/__pthread_spinlock_t.h	\
153              bits/spin-lock-inline.h		\
154              bits/cancelation.h		\
155              bits/types/struct___pthread_attr.h	\
156              bits/types/struct___pthread_barrierattr.h	\
157              bits/types/struct___pthread_barrier.h	\
158              bits/types/__pthread_key.h		\
159              bits/types/struct___pthread_once.h	\
160              bits/types/struct___pthread_mutexattr.h	\
161              bits/types/struct___pthread_rwlock.h	\
162              bits/types/struct___pthread_rwlockattr.h	\
163	      bits/semaphore.h
164
165distribute :=
166
167routines := forward libc_pthread_init alloca_cutoff htlfreeres
168shared-only-routines = forward
169
170extra-libs := libpthread
171extra-libs-others := $(extra-libs)
172install-lib := libpthread.so
173install-lib-ldscripts := libpthread_syms.a
174
175include ../Makeconfig
176
177CFLAGS-lockfile.c = -D_IO_MTSAFE_IO
178
179all: # Make this the default target; it will be defined in Rules.
180
181subdir_install: $(inst_libdir)/libpthread2.a $(inst_libdir)/libpthread_syms.a
182
183# XXX: If $(inst_libdir)/libpthread2.a is installed and
184# $(inst_libdir)/libpthread is not, we can have some issues.
185.PHONY: $(inst_libdir)/libpthread.a $(inst_libdir)/libpthread_pic.a
186
187# XXX: These rules are a hack.  But it is better than messing with
188# ../Makeconf at the moment.  Note that the linker scripts
189# $(srcdir)/libpthread.a and $(srcdir)/libpthread_pic.a get overwritten
190# when building in $(srcdir) and not a seperate build directory.
191$(inst_libdir)/libpthread2.a: $(inst_libdir)/libpthread.a
192	mv $< $@
193	$(INSTALL_DATA) $(srcdir)/libpthread.a $<
194
195$(inst_libdir)/libpthread2_pic.a: $(inst_libdir)/libpthread_pic.a
196	mv $< $@
197	$(INSTALL_DATA) $(srcdir)/libpthread_pic.a $<
198
199$(inst_libdir)/libpthread_syms.a: $(srcdir)/libpthread_syms.a $(+force)
200	$(do-install)
201
202libc-link.so = $(common-objpfx)libc.so
203
204extra-B-pthread.so = -B$(common-objpfx)htl/
205LDFLAGS-pthread.so = -Wl,--enable-new-dtags,-z,nodelete,-z,initfirst
206
207include ../Rules
208
209# Make sure we link with the thread library.
210ifeq ($(build-shared),yes)
211$(addprefix $(objpfx), \
212  $(filter-out $(tests-static) $(xtests-static) $(tests-reverse) \
213    $(tests-nolibpthread), \
214    $(tests) $(tests-internal) $(xtests) $(test-srcs) $(tests-container))): \
215	$(objpfx)libpthread.so
216# $(objpfx)../libc.so is used instead of $(common-objpfx)libc.so,
217# since otherwise libpthread.so comes before libc.so when linking.
218$(addprefix $(objpfx), $(tests-reverse)): \
219  $(objpfx)../libc.so $(objpfx)libpthread.so
220$(objpfx)../libc.so: $(common-objpfx)libc.so ;
221$(addprefix $(objpfx),$(tests-static) $(xtests-static)): $(srcdir)/libpthread_syms.a $(objpfx)libpthread.a
222else
223$(addprefix $(objpfx),$(tests) $(test-srcs)): $(srcdir)/libpthread_syms.a $(objpfx)libpthread.a
224endif
225