summaryrefslogtreecommitdiff
path: root/libpthread/nptl/sysdeps/pthread/Makefile.in
blob: be5c022b15d95e5a4c8c5a34e54ec572f1d9e96b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# Makefile for uClibc NPTL
#
# Copyright (C) 2005-2006 Steven J. Hill <sjhill@uclibc.org>
#
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#

subdirs += libpthread/nptl/sysdeps/pthread
#
# NOTE: glibc puts flockfile.c, ftrylockfile.c, funlockfile.c, and
#       pt-longjmp.c in libc and libpthread. For uClibc, they are
#       in libc only.
#
libpthread_pthread_DIR = $(top_srcdir)libpthread/nptl/sysdeps/pthread
libpthread_pthread_OUT = $(top_builddir)libpthread/nptl/sysdeps/pthread

libpthread_pthread_COBJ = $(patsubst %.c,$(libpthread_pthread_OUT)/%.o,$(libpthread_pthread_CSRC))
libpthread_pthread_CSRC = \
	pthread_barrier_destroy.c \
	pthread_barrier_init.c \
	pthread_barrier_wait.c \
	pthread_cond_broadcast.c \
	pthread_cond_signal.c \
	pthread_cond_timedwait.c \
	pthread_cond_wait.c \
	pthread_rwlock_rdlock.c \
	pthread_rwlock_timedrdlock.c \
	pthread_rwlock_timedwrlock.c \
	pthread_rwlock_unlock.c \
	pthread_rwlock_wrlock.c \
	pthread_sigmask.c \
	pthread_spin_destroy.c \
	pthread_spin_init.c \
	pthread_spin_unlock.c \
	pt-longjmp.c \
	pt-sigaction.c \
	pt-sigfillset.c \
	pt-sigprocmask.c \
	tpp.c
CFLAGS-pthread = $(SSP_ALL_CFLAGS) -DNOT_IN_libc -DIS_IN_libpthread
CFLAGS-pthread_barrier_wait.c = -D_GNU_SOURCE
CFLAGS-pthread_spin_destroy.c = -D_GNU_SOURCE
CFLAGS-pthread_spin_init.c = -D_GNU_SOURCE
CFLAGS-pthread_spin_unlock.c = -D_GNU_SOURCE
CFLAGS-pt-sigaction.c = -I$(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH) \
			-I$(top_srcdir)libc/signal
CFLAGS-pt-sigfillset.c = -I$(top_srcdir)libc/signal
CFLAGS-pt-sigprocmask.c = -I$(top_srcdir)libc/sysdeps/linux/common
CFLAGS-unwind-forcedunwind.c = -fexceptions -fasynchronous-unwind-tables

CFLAGS-OMIT-librt-cancellation.c = -DIS_IN_libpthread
CFLAGS-OMIT-rt-unwind-resume.c = -DIS_IN_libpthread
CFLAGS-librt-cancellation.c = -DIS_IN_librt				\
			      -fexceptions -fasynchronous-unwind-tables
CFLAGS-rt-unwind-resume.c = -DIS_IN_librt				\
			    -fexceptions -fasynchronous-unwind-tables

libpthread-so-y += $(patsubst %,$(libpthread_pthread_OUT)/%.oS, \
	pt-sigaction pt-sigprocmask unwind-forcedunwind)

CFLAGS-OMIT-sigaction.c = $(CFLAGS-pthread)
CFLAGS-sigaction.c = -I$(top_srcdir)libc/signal
libc-y += $(libpthread_pthread_OUT)/sigaction.o

librt-pt-routines-y = librt-cancellation.c
librt-pt-shared-only-routines-y = rt-unwind-resume.c

ifeq ($(UCLIBC_CTOR_DTOR),y)
CFLAGS-OMIT-pt-initfini.c = $(CFLAGS-pthread)
CFLAGS-pt-initfini.c = -S -g0 $(PICFLAG) -fno-inline-functions	\
			$(call check_gcc,-fno-unit-at-a-time,)	\
			$(SSP_DISABLE_FLAGS) \
			-finhibit-size-directive			\
			-fno-asynchronous-unwind-tables -fno-unwind-tables \
			$(patsubst -f%,-fno-%,$(call check_gcc,-fexceptions,))

#ASFLAGS += $(PICFLAG) -I$(top_srcdir)include -I$(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)
ifneq ($(wildcard $(libpthread_pthread_DIR)/../unix/sysv/linux/$(TARGET_ARCH)/pt-initfini.c),)
PTHREAD_INITFINI := $(libpthread_pthread_DIR)/../unix/sysv/linux/$(TARGET_ARCH)/pt-initfini.c
else
PTHREAD_INITFINI := $(libpthread_pthread_DIR)/pt-initfini.c
endif

ASFLAGS-pt-crti.S =  $(PICFLAG)
ASFLAGS-pt-crtn.S =  $(PICFLAG)

$(libpthread_pthread_OUT)/pt-crti.o: $(libpthread_pthread_OUT)/pt-crti.S
	$(compile.S)

$(libpthread_pthread_OUT)/pt-crtn.o: $(libpthread_pthread_OUT)/pt-crtn.S
	$(compile.S)

$(libpthread_pthread_OUT)/pt-initfini.s: $(PTHREAD_INITFINI) | $(top_builddir)include/bits/uClibc_config.h
	$(compile.c)
$(libpthread_pthread_OUT)/defs.h: $(PTHREAD_INITFINI)
	$(do_sed) -n -e '/@TESTS_BEGIN/,/@TESTS_END/p' $< | \
		$(AWK) -f $(top_srcdir)extra/scripts/defs.awk > $@.tmp
	$(Q)mv $@.tmp $@

$(libpthread_pthread_OUT)/pt-crti.S: $(libpthread_pthread_OUT)/pt-initfini.s $(libpthread_pthread_OUT)/defs.h
	$(do_sed) -n -e '/[ 	]*\.file/d' \
		-e '1,/@HEADER_ENDS/p' \
		-e '/@_.*_PROLOG_BEGINS/,/@_.*_PROLOG_ENDS/p' \
		-e '/@TRAILER_BEGINS/,$$p' $< > $@.tmp
	$(Q)mv $@.tmp $@
$(libpthread_pthread_OUT)/pt-crtn.S: $(libpthread_pthread_OUT)/pt-initfini.s $(libpthread_pthread_OUT)/defs.h
	$(do_sed) -n -e '/[ 	]*\.file/d' \
		-e '1,/@HEADER_ENDS/p' \
		-e '/@_.*_EPILOG_BEGINS/,/@_.*_EPILOG_ENDS/p' \
		-e '/@TRAILER_BEGINS/,$$p' $< > $@.tmp
	$(Q)mv $@.tmp $@
endif
# It would have been easier to just add dummy files that include the real
# impl, but ok.
# Special rules needed since we do objdir->objdir compilation for these 3.
# First symlink them, then build them. Rob would freak out on these. Sheesh! ;)
pthread-lc-fwd = sigaction sigfillset sigprocmask
$(patsubst %,$(libpthread_pthread_OUT)/pt-%.c,$(pthread-lc-fwd)): | $(libpthread_pthread_OUT)
	$(do_ln) $(call rel_srcdir)$(patsubst pt-%,$(libpthread_pthread_DIR)/%,$(@F)) $@
$(patsubst %,$(libpthread_pthread_OUT)/pt-%.oS,$(pthread-lc-fwd)): $(libpthread_pthread_OUT)/pt-%.oS: $(libpthread_pthread_OUT)/pt-%.c
	$(compile.c)
$(patsubst %,$(libpthread_pthread_OUT)/pt-%.o,$(pthread-lc-fwd)): $(libpthread_pthread_OUT)/pt-%.o: $(libpthread_pthread_OUT)/pt-%.c
	$(compile.c)
ifeq ($(DOPIC),y)
$(patsubst %,$(libpthread_pthread_OUT)/pt-%.os,$(pthread-lc-fwd)): $(libpthread_pthread_OUT)/pt-%.os: $(libpthread_pthread_OUT)/pt-%.c
	$(compile.c)
endif

objclean-y += CLEAN_libpthread/nptl/sysdeps/pthread

CLEAN_libpthread/nptl/sysdeps/pthread:
	$(do_rm) $(addprefix $(libpthread_pthread_OUT)/*., o os oS s S) \
		$(libpthread_pthread_OUT)/defs.h \
		$(addprefix $(libpthread_pthread_DIR)/,pt-sigaction.c \
			pt-sigfillset.c pt-sigprocmask.c)