Skip to content

Commit ab7e16c

Browse files
committed
Merge pull request #37 from dgrove-oss/libpwq-integration-rebase
libpwq as git submodule
2 parents b647aee + c1a8be5 commit ab7e16c

File tree

8 files changed

+53
-14
lines changed

8 files changed

+53
-14
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "libpwq"]
2+
path = libpwq
3+
url = https://github.com/dgrove-oss/libpwq.git

INSTALL

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,17 @@ Prepare your system
109109
2. Install dtrace (to generate provider.h)
110110
sudo apt-get install systemtap-sdt-dev
111111
3. Install libdispatch pre-reqs
112-
sudo apt-get install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev libbsd-dev
112+
sudo apt-get install libblocksruntime-dev libkqueue-dev libbsd-dev
113+
114+
Initialize git submodules:
115+
We are using git submodules to incorporate a specific revision of the
116+
upstream pthread_workqueue library into the build.
117+
git submodule init
118+
git submodule update
113119

114120
Build:
115121
sh autogen.sh
116122
./configure
117-
cd src && dtrace -h -s provider.d
118123
make
119124

120125
Note: the build currently fails building tests, but libdispatch.so should

Makefile.am

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,24 @@
44

55
ACLOCAL_AMFLAGS = -I m4
66

7+
if BUILD_OWN_PTHREAD_WORKQUEUES
78
SUBDIRS= \
89
dispatch \
10+
libpwq \
911
man \
1012
os \
1113
private \
1214
src \
1315
tests
16+
else
17+
SUBDIRS= \
18+
dispatch \
19+
man \
20+
os \
21+
private \
22+
src \
23+
tests
24+
endif
1425

1526
EXTRA_DIST= \
1627
README.md \

configure.ac

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,25 @@ AS_IF([test -n "$apple_libpthread_source_path" -a -n "$apple_xnu_source_osfmk_pa
166166
mkdir -p mach && ln -fsh "$apple_xnu_source_osfmk_path"/mach/coalition.h mach
167167
])
168168
AC_CHECK_HEADERS([pthread_machdep.h pthread/qos.h])
169-
AC_CHECK_HEADERS([pthread/workqueue_private.h pthread_workqueue.h],
170-
[AC_DEFINE(HAVE_PTHREAD_WORKQUEUES, 1, [Define if pthread work queues are present])
169+
170+
# pthread_workqueues.
171+
# Look for own version first, then system version.
172+
AS_IF([test -f libpwq/configure.ac],
173+
[AC_DEFINE(BUILD_OWN_PTHREAD_WORKQUEUES, 1, [Define if building pthread work queues from source])
174+
AC_CONFIG_SUBDIRS([libpwq])
175+
build_own_pthread_workqueue=true,
176+
AC_DEFINE(HAVE_PTHREAD_WORKQUEUES, 1, [Define if pthread work queues are present])
171177
have_pthread_workqueues=true],
172-
[have_pthread_workqueues=false]
178+
[build_own_pthread_workqueue=false
179+
AC_CHECK_HEADERS([pthread/workqueue_private.h pthread_workqueue.h],
180+
[AC_DEFINE(HAVE_PTHREAD_WORKQUEUES, 1, [Define if pthread work queues are present])
181+
have_pthread_workqueues=true],
182+
[have_pthread_workqueues=false]
183+
)]
173184
)
185+
AM_CONDITIONAL(BUILD_OWN_PTHREAD_WORKQUEUES, $build_own_pthread_workqueues)
174186
AM_CONDITIONAL(HAVE_PTHREAD_WORKQUEUES, $have_pthread_workqueues)
187+
175188
AC_CHECK_HEADERS([libproc_internal.h], [], [], [#include <mach/mach.h>])
176189
AC_CHECK_FUNCS([pthread_workqueue_setdispatch_np _pthread_workqueue_init])
177190
AS_IF([test -n "$apple_libpthread_source_path" -a -n "$apple_xnu_source_osfmk_path"], [

libpwq

Submodule libpwq added at 9faa79a

src/Makefile.am

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,18 @@ AM_CPPFLAGS=-I$(top_builddir) -I$(top_srcdir) \
5151

5252
DISPATCH_CFLAGS=-Wall $(VISIBILITY_FLAGS) $(OMIT_LEAF_FP_FLAGS) \
5353
$(MARCH_FLAGS) $(KQUEUE_CFLAGS) $(BSD_OVERLAY_CFLAGS)
54-
AM_CFLAGS=$(DISPATCH_CFLAGS) $(CBLOCKS_FLAGS)
54+
AM_CFLAGS= $(PTHREAD_WORKQUEUE_CFLAGS) $(DISPATCH_CFLAGS) $(CBLOCKS_FLAGS)
5555
AM_OBJCFLAGS=$(DISPATCH_CFLAGS) $(CBLOCKS_FLAGS)
5656
AM_CXXFLAGS=$(DISPATCH_CFLAGS) $(CXXBLOCKS_FLAGS)
5757
AM_OBJCXXFLAGS=$(DISPATCH_CFLAGS) $(CXXBLOCKS_FLAGS)
5858

59-
if HAVE_PTHREAD_WORKQUEUES
60-
PTHREAD_WORKQUEUE_LIBS=-lpthread_workqueue
59+
if BUILD_OWN_PTHREAD_WORKQUEUES
60+
PTHREAD_WORKQUEUE_LIBS=../libpwq/libpthread_workqueue.la
61+
PTHREAD_WORKQUEUE_CFLAGS=-I../libpwq/include
62+
else
63+
if HAVE_PTHREAD_WORKQUEUES
64+
PTHREAD_WORKQUEUE_LIBS=-lpthread_workqueue
65+
endif
6166
endif
6267

6368
libdispatch_la_LDFLAGS=-avoid-version

src/queue.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,12 +200,11 @@ struct dispatch_root_queue_context_s {
200200
typedef struct dispatch_root_queue_context_s *dispatch_root_queue_context_t;
201201

202202
#define WORKQ_PRIO_INVALID (-1)
203-
#ifdef __linux__
203+
#ifndef WORKQ_BG_PRIOQUEUE_CONDITIONAL
204204
#define WORKQ_BG_PRIOQUEUE_CONDITIONAL WORKQ_PRIO_INVALID
205+
#endif
206+
#ifndef WORKQ_HIGH_PRIOQUEUE_CONDITIONAL
205207
#define WORKQ_HIGH_PRIOQUEUE_CONDITIONAL WORKQ_PRIO_INVALID
206-
#else
207-
#define WORKQ_BG_PRIOQUEUE_CONDITIONAL WORKQ_BG_PRIOQUEUE
208-
#define WORKQ_HIGH_PRIOQUEUE_CONDITIONAL WORKQ_HIGH_PRIOQUEUE
209208
#endif
210209

211210
DISPATCH_CACHELINE_ALIGN

tests/Makefile.am

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,10 @@ AM_OBJCFLAGS=$(DISPATCH_TESTS_CFLAGS) $(CBLOCKS_FLAGS)
114114
AM_CXXFLAGS=$(DISPATCH_TESTS_CFLAGS) $(CXXBLOCKS_FLAGS) $(BSD_OVERLAY_CFLAGS)
115115
AM_OBJCXXFLAGS=$(DISPATCH_TESTS_CFLAGS) $(CXXBLOCKS_FLAGS)
116116

117-
if HAVE_PTHREAD_WORKQUEUES
118-
PTHREAD_WORKQUEUE_LIBS=-lpthread_workqueue
117+
if !BUILD_OWN_PTHREAD_WORKQUEUES
118+
if HAVE_PTHREAD_WORKQUEUES
119+
PTHREAD_WORKQUEUE_LIBS=-lpthread_workqueue
120+
endif
119121
endif
120122

121123
LDADD=libbsdtests.la ../src/libdispatch.la $(KQUEUE_LIBS) $(PTHREAD_WORKQUEUE_LIBS) $(BSD_OVERLAY_LIBS)

0 commit comments

Comments
 (0)