[libdispatch-dev] updated test results on Solaris
Joakim Johansson
jocke at tbricks.com
Wed Jan 12 05:40:41 PST 2011
Hi,
I thought I’d give an update also on the progress of the Solaris port in the same vein as Mark did for the Linux one.
Thanks to the work of Mark on libkqueue, I’ve now been able to build and run the test suite with proper block support on Solaris using clang 2.8.
I used the most recent versions of libkqueue, libdispatch, libpthread_workqueue and compiler-rt, build and checkout instructions are below for reference if someone else wants to run it - prerequisite is a clang/llvm 2.8 compiler (which for the record builds fine using gcc 4.5.1).
The tests below were run on an 8-core Nehalem machine (16 virtual cores) and built everything for 64-bits.
All tests except one succeed, which is for the average jitter in the dispatch_drift test (perhaps the threshold is just a bit too aggressive, the actual is almost always 0.0002 rather than 0.0001…):
---
Actual: 0.000195
Expected: <0.000100
[FAIL] average jitter (dispatch_drift.c:87)
dispatch_drift.c:87
Actual: 0.000001
Expected: <0.000100
[PASS] average drift
PASS: dispatch_drift
---
There is only two required patches (attached below), one small for libpthread_workqueue (which has been submitted to Mark), but the other one is for disabling __private_extern__ completely while building with clang - the problem is that the linker used by clang (it falls back to the gnu linker AFAICT) does not properly support symbol visibility attributes on Solaris - this was fixed in the private-extern.m4 script previously for the “visibility(“hidden”)” flag, but as “__private_extern__” is supported by clang (but not by the gcc linker), linkage fails for the symbols declared as __private_extern__. I’m trying to figure out how to get clang to use the native Solaris linker instead (without success so far), as that should allow for proper linkage without disabling symbol visibility.
The proper workaround (to check whether __private_extern__ is _really_ supported at link time), is unfortunately difficult to achieve - what is needed is to try AC_TRY_LINK() but with *two* input source files (I do have a perfectly minimized test for it), but there seems to be no way to set up such a ‘complex’ test unfortunately - if anyone knows how to provide two input files to AC_TRY_LINK, I’m all ears...
I’m leaning towards having a manual option for turning the __private_extern__ support off, but it seems a bit heavy-handed.
Cheers,
Joakim
—————————
-bash-3.00$ clang --version
clang version 2.8 (tags/RELEASE_28 123229)
Target: i386-pc-solaris2.10
Thread model: posix
-bash-3.00$
-bash-3.00$ $MAKE check
Making check in dispatch
gmake[1]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk/dispatch'
gmake[1]: Nothing to be done for `check'.
gmake[1]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk/dispatch'
Making check in man
gmake[1]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk/man'
gmake[1]: Nothing to be done for `check'.
gmake[1]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk/man'
Making check in src
gmake[1]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk/src'
/opt/csw/bin/gmake check-am
gmake[2]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk/src'
gmake[2]: Nothing to be done for `check-am'.
gmake[2]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk/src'
gmake[1]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk/src'
Making check in testing
gmake[1]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk/testing'
/opt/csw/bin/gmake check-TESTS
gmake[2]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk/testing'
==================================================
[TEST] Dispatch (Public) API
[PID] 16294
==================================================
Actual: 412950
Expected: 412950
[PASS] dispatch_get_main_queue
PASS: dispatch_api
==================================================
[TEST] Dispatch C99
[PID] 16310
==================================================
Actual: 412950
Expected: 412950
[PASS] dispatch_get_main_queue
PASS: dispatch_c99
==================================================
[TEST] Dispatch Cascade
[PID] 16329
==================================================
maxcount = 3208
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
* * * * * *
** * * * * * * * * * * * * * *
PASS: dispatch_cascade
==================================================
[TEST] Dispatch Debug
[PID] 16345
==================================================
PASS: dispatch_debug
==================================================
[TEST] Dispatch Priority
[PID] 16361
==================================================
LOW: 46
*****************************
DEFAULT: 36
***********************
HIGH: 110
*********************************************************************
Actual: 192
Expected: 192
[PASS] blocks completed
Actual: 46
Expected: <110
[PASS] high priority precedence
PASS: dispatch_priority
==================================================
[TEST] Dispatch Priority (Set Target Queue)
[PID] 16377
==================================================
Actual: 414a60
Expected: 414a60
[PASS] q[i]
Actual: 417560
Expected: 417560
[PASS] q[i]
Actual: 417610
Expected: 417610
[PASS] q[i]
LOW: 55
***********************************
DEFAULT: 64
****************************************
HIGH: 73
**********************************************
Actual: 192
Expected: 192
[PASS] blocks completed
Actual: 55
Expected: <73
[PASS] high priority precedence
PASS: dispatch_priority2
==================================================
[TEST] Dispatch Starfish
[PID] 16393
==================================================
lap: 10
count: 1000
delta: 680694550 ns
math: 340.007268 ns / lap
Actual: 340
Expected: <1000
[PASS] Latency
lap: 9
count: 1000
delta: 587094143 ns
math: 293.253818 ns / lap
Actual: 293
Expected: <1000
[PASS] Latency
lap: 8
count: 1000
delta: 810081631 ns
math: 404.636179 ns / lap
Actual: 404
Expected: <1000
[PASS] Latency
lap: 7
count: 1000
delta: 512007899 ns
math: 255.748201 ns / lap
Actual: 255
Expected: <1000
[PASS] Latency
lap: 6
count: 1000
delta: 462883519 ns
math: 231.210549 ns / lap
Actual: 231
Expected: <1000
[PASS] Latency
lap: 5
count: 1000
delta: 475580888 ns
math: 237.552891 ns / lap
Actual: 237
Expected: <1000
[PASS] Latency
lap: 4
count: 1000
delta: 437686340 ns
math: 218.624545 ns / lap
Actual: 218
Expected: <1000
[PASS] Latency
lap: 3
count: 1000
delta: 834601783 ns
math: 416.884007 ns / lap
Actual: 416
Expected: <1000
[PASS] Latency
lap: 2
count: 1000
delta: 683405606 ns
math: 341.361442 ns / lap
Actual: 341
Expected: <1000
[PASS] Latency
lap: 1
count: 1000
delta: 559356398 ns
math: 279.398800 ns / lap
Actual: 279
Expected: <1000
[PASS] Latency
PASS: dispatch_starfish
==================================================
[TEST] Dispatch Queue Finalizer
[PID] 16434
==================================================
Actual: 414db0
Expected: 414db0
[PASS] dispatch_queue_new
Actual: c59ff648302c6300
Expected: c59ff648302c6300
[PASS] finalizer ran
PASS: queue_finalizer
==================================================
[TEST] Dispatch After
[PID] 16450
==================================================
Actual: 0
Expected: <500073671
[PASS] can't finish faster than 5.5s
Actual: 0
Expected: <499927056
[PASS] must finish faster than 6.5s
Actual: 0
Expected: <500054705
[PASS] can't finish faster than 1.5s
Actual: 0
Expected: <499946039
[PASS] must finish faster than 2.5s
Actual: 0
Expected: <18204
[PASS] can't finish faster than 0s
Actual: 0
Expected: <499982964
[PASS] must finish faster than .5s
PASS: dispatch_after
==================================================
[TEST] Dispatch Apply
[PID] 16466
==================================================
Actual: fffffd7fff290530
Expected: fffffd7fff290530
[PASS] dispatch_get_concurrent_queue
Actual: 32
Expected: 32
[PASS] count
PASS: dispatch_apply
==================================================
[TEST] Timer drift test
[PID] 16482
==================================================
Actual: 414f10
Expected: 414f10
[PASS] DISPATCH_SOURCE_TYPE_TIMER
1: jitter 0.000000, drift 0.000000
2: jitter -0.000205, drift -0.000205
3: jitter -0.000202, drift 0.000003
4: jitter -0.000207, drift -0.000005
5: jitter -0.000204, drift 0.000003
6: jitter -0.000201, drift 0.000003
7: jitter -0.000211, drift -0.000010
8: jitter -0.000201, drift 0.000010
9: jitter -0.000201, drift -0.000000
10: jitter -0.000202, drift -0.000001
11: jitter -0.000200, drift 0.000002
12: jitter -0.000201, drift -0.000001
13: jitter -0.000201, drift 0.000000
14: jitter -0.000208, drift -0.000007
15: jitter -0.000202, drift 0.000006
16: jitter -0.000022, drift 0.000180
17: jitter -0.000008, drift 0.000014
18: jitter -0.000207, drift -0.000199
19: jitter -0.000002, drift 0.000205
20: jitter -0.000203, drift -0.000201
21: jitter -0.000203, drift 0.000000
22: jitter -0.000207, drift -0.000004
23: jitter -0.000206, drift 0.000001
24: jitter -0.000210, drift -0.000004
25: jitter -0.000205, drift 0.000005
26: jitter -0.000002, drift 0.000203
27: jitter -0.000011, drift -0.000009
28: jitter -0.000205, drift -0.000194
29: jitter -0.000004, drift 0.000201
30: jitter -0.000008, drift -0.000004
31: jitter -0.000203, drift -0.000195
32: jitter -0.000206, drift -0.000003
33: jitter -0.000200, drift 0.000006
34: jitter -0.000206, drift -0.000006
35: jitter -0.000203, drift 0.000003
36: jitter -0.000001, drift 0.000202
37: jitter -0.000007, drift -0.000006
38: jitter -0.000202, drift -0.000195
39: jitter -0.000019, drift 0.000183
40: jitter -0.000012, drift 0.000007
41: jitter -0.000201, drift -0.000189
42: jitter -0.000202, drift -0.000001
43: jitter -0.000206, drift -0.000004
44: jitter -0.000210, drift -0.000004
45: jitter -0.000207, drift 0.000003
46: jitter -0.000001, drift 0.000206
47: jitter -0.000006, drift -0.000005
48: jitter -0.000212, drift -0.000206
49: jitter -0.000005, drift 0.000207
50: jitter -0.000006, drift -0.000001
51: jitter -0.000204, drift -0.000198
52: jitter -0.000206, drift -0.000002
53: jitter -0.000206, drift 0.000000
54: jitter -0.000210, drift -0.000004
55: jitter -0.000205, drift 0.000005
56: jitter -0.000205, drift 0.000000
57: jitter -0.000008, drift 0.000197
58: jitter -0.000205, drift -0.000197
59: jitter -0.000208, drift -0.000003
60: jitter -0.000004, drift 0.000204
61: jitter -0.000203, drift -0.000199
62: jitter -0.000208, drift -0.000005
63: jitter -0.000208, drift 0.000000
64: jitter -0.000218, drift -0.000010
65: jitter -0.000204, drift 0.000014
66: jitter -0.000004, drift 0.000200
67: jitter -0.000009, drift -0.000005
68: jitter -0.000207, drift -0.000198
69: jitter -0.000003, drift 0.000204
70: jitter -0.000005, drift -0.000002
71: jitter -0.000206, drift -0.000201
72: jitter -0.000205, drift 0.000001
73: jitter -0.000205, drift 0.000000
74: jitter -0.000196, drift 0.000009
75: jitter -0.000204, drift -0.000008
76: jitter -0.000206, drift -0.000002
77: jitter -0.000207, drift -0.000001
78: jitter -0.000201, drift 0.000006
79: jitter -0.000002, drift 0.000199
80: jitter -0.000019, drift -0.000017
81: jitter -0.000206, drift -0.000187
82: jitter -0.000210, drift -0.000004
83: jitter -0.000213, drift -0.000003
84: jitter -0.000233, drift -0.000020
85: jitter -0.000010, drift 0.000223
86: jitter -0.000205, drift -0.000195
87: jitter -0.000213, drift -0.000008
88: jitter -0.000211, drift 0.000002
89: jitter -0.000216, drift -0.000005
90: jitter -0.000017, drift 0.000199
91: jitter -0.000210, drift -0.000193
92: jitter -0.000026, drift 0.000184
93: jitter -0.000213, drift -0.000187
94: jitter -0.000019, drift 0.000194
95: jitter -0.000207, drift -0.000188
96: jitter -0.000206, drift 0.000001
97: jitter -0.000214, drift -0.000008
98: jitter -0.000208, drift 0.000006
99: jitter -0.000201, drift 0.000007
100: jitter -0.000203, drift -0.000002
101: jitter -0.000201, drift 0.000002
102: jitter -0.000220, drift -0.000019
103: jitter -0.000210, drift 0.000010
104: jitter -0.000039, drift 0.000171
105: jitter -0.000016, drift 0.000023
106: jitter -0.000210, drift -0.000194
107: jitter -0.000214, drift -0.000004
108: jitter -0.000226, drift -0.000012
109: jitter -0.000008, drift 0.000218
110: jitter -0.000012, drift -0.000004
111: jitter -0.000223, drift -0.000211
112: jitter -0.000012, drift 0.000211
113: jitter -0.000210, drift -0.000198
114: jitter -0.000225, drift -0.000015
115: jitter -0.000205, drift 0.000020
116: jitter -0.000206, drift -0.000001
117: jitter -0.000218, drift -0.000012
118: jitter -0.000223, drift -0.000005
119: jitter -0.000212, drift 0.000011
120: jitter -0.000229, drift -0.000017
121: jitter -0.000213, drift 0.000016
122: jitter -0.000019, drift 0.000194
123: jitter -0.000023, drift -0.000004
124: jitter -0.000247, drift -0.000224
125: jitter -0.000208, drift 0.000039
126: jitter -0.000207, drift 0.000001
127: jitter -0.000219, drift -0.000012
128: jitter -0.000209, drift 0.000010
129: jitter 0.000000, drift 0.000209
130: jitter -0.000015, drift -0.000015
131: jitter -0.000207, drift -0.000192
132: jitter -0.000027, drift 0.000180
133: jitter -0.000007, drift 0.000020
134: jitter -0.000235, drift -0.000228
135: jitter -0.000226, drift 0.000009
136: jitter -0.000211, drift 0.000015
137: jitter -0.000219, drift -0.000008
138: jitter -0.000202, drift 0.000017
139: jitter -0.000021, drift 0.000181
140: jitter -0.000205, drift -0.000184
141: jitter -0.000211, drift -0.000006
142: jitter -0.000023, drift 0.000188
143: jitter -0.000012, drift 0.000011
144: jitter -0.000255, drift -0.000243
145: jitter -0.000027, drift 0.000228
146: jitter -0.000216, drift -0.000189
147: jitter -0.000210, drift 0.000006
148: jitter -0.000211, drift -0.000001
149: jitter -0.000208, drift 0.000003
150: jitter -0.000020, drift 0.000188
151: jitter -0.000204, drift -0.000184
152: jitter -0.000220, drift -0.000016
153: jitter -0.000208, drift 0.000012
154: jitter -0.000223, drift -0.000015
155: jitter -0.000209, drift 0.000014
156: jitter -0.000210, drift -0.000001
157: jitter -0.000215, drift -0.000005
158: jitter -0.000210, drift 0.000005
159: jitter -0.000211, drift -0.000001
160: jitter -0.000025, drift 0.000186
161: jitter -0.000207, drift -0.000182
162: jitter -0.000014, drift 0.000193
163: jitter -0.000011, drift 0.000003
164: jitter -0.000227, drift -0.000216
165: jitter -0.000013, drift 0.000214
166: jitter -0.000218, drift -0.000205
167: jitter -0.000213, drift 0.000005
168: jitter -0.000042, drift 0.000171
169: jitter -0.000232, drift -0.000190
170: jitter -0.000011, drift 0.000221
171: jitter -0.000201, drift -0.000190
172: jitter -0.000224, drift -0.000023
173: jitter -0.000203, drift 0.000021
174: jitter -0.000015, drift 0.000188
175: jitter -0.000200, drift -0.000185
176: jitter -0.000017, drift 0.000183
177: jitter -0.000206, drift -0.000189
178: jitter -0.000038, drift 0.000168
179: jitter -0.000222, drift -0.000184
180: jitter -0.000022, drift 0.000200
181: jitter -0.000220, drift -0.000198
182: jitter -0.000016, drift 0.000204
183: jitter -0.000213, drift -0.000197
184: jitter -0.000209, drift 0.000004
185: jitter -0.000217, drift -0.000008
186: jitter -0.000208, drift 0.000009
187: jitter -0.000216, drift -0.000008
188: jitter -0.000030, drift 0.000186
189: jitter -0.000235, drift -0.000205
190: jitter -0.000013, drift 0.000222
191: jitter -0.000208, drift -0.000195
192: jitter -0.000225, drift -0.000017
193: jitter -0.000204, drift 0.000021
194: jitter -0.000235, drift -0.000031
195: jitter -0.000206, drift 0.000029
196: jitter -0.000219, drift -0.000013
197: jitter -0.000220, drift -0.000001
198: jitter -0.000210, drift 0.000010
199: jitter -0.000201, drift 0.000009
200: jitter -0.000027, drift 0.000174
201: jitter -0.000203, drift -0.000176
202: jitter -0.000224, drift -0.000021
203: jitter -0.000215, drift 0.000009
204: jitter -0.000225, drift -0.000010
205: jitter -0.000210, drift 0.000015
206: jitter -0.000209, drift 0.000001
207: jitter -0.000215, drift -0.000006
208: jitter -0.000020, drift 0.000195
209: jitter -0.000221, drift -0.000201
210: jitter -0.000025, drift 0.000196
211: jitter -0.000224, drift -0.000199
212: jitter -0.000227, drift -0.000003
213: jitter -0.000218, drift 0.000009
214: jitter -0.000219, drift -0.000001
215: jitter -0.000214, drift 0.000005
216: jitter -0.000007, drift 0.000207
217: jitter -0.000214, drift -0.000207
218: jitter -0.000207, drift 0.000007
219: jitter -0.008142, drift -0.007935
220: jitter -0.000574, drift 0.007568
221: jitter -0.000061, drift 0.000513
222: jitter -0.000206, drift -0.000145
223: jitter -0.000008, drift 0.000198
224: jitter -0.000216, drift -0.000208
225: jitter -0.000202, drift 0.000014
226: jitter -0.000200, drift 0.000002
227: jitter -0.000201, drift -0.000001
228: jitter -0.000205, drift -0.000004
229: jitter -0.000206, drift -0.000001
230: jitter -0.000204, drift 0.000002
231: jitter -0.000201, drift 0.000003
232: jitter -0.000219, drift -0.000018
233: jitter -0.000214, drift 0.000005
234: jitter -0.000227, drift -0.000013
235: jitter -0.000216, drift 0.000011
236: jitter -0.000204, drift 0.000012
237: jitter -0.000201, drift 0.000003
238: jitter -0.000204, drift -0.000003
239: jitter -0.000216, drift -0.000012
240: jitter -0.000211, drift 0.000005
241: jitter -0.000204, drift 0.000007
242: jitter -0.000208, drift -0.000004
243: jitter -0.000207, drift 0.000001
244: jitter -0.000227, drift -0.000020
245: jitter -0.000215, drift 0.000012
246: jitter -0.000208, drift 0.000007
247: jitter -0.000214, drift -0.000006
248: jitter -0.000228, drift -0.000014
249: jitter -0.000215, drift 0.000013
250: jitter -0.000219, drift -0.000004
Actual: 0.000195
Expected: <0.000100
[FAIL] average jitter (dispatch_drift.c:87)
dispatch_drift.c:87
Actual: 0.000001
Expected: <0.000100
[PASS] average drift
PASS: dispatch_drift
==================================================
[TEST] Dispatch Group
[PID] 16515
==================================================
Actual: 415990
Expected: 415990
[PASS] dispatch_group_async
Actual: 415990
Expected: 415990
[PASS] dispatch_group_async
sleeping...
sleeping...
sleeping...
Actual: 0
Expected: 0
[PASS] dispatch_group_wait
done.
done.
done.
Actual: 0
Expected: 0
[PASS] dispatch_group_wait
Actual: 415990
Expected: 415990
[PASS] dispatch_group_async
Actual: 4134d0
Expected: 4134d0
[PASS] Notification Received
PASS: dispatch_group
==================================================
[TEST] Dispatch Ping Pong
[PID] 16531
==================================================
Actual: 414660
Expected: 414660
[PASS] dispatch_queue_create(ping)
Actual: 414710
Expected: 414710
[PASS] dispatch_queue_create(pong)
Actual: 4147c0
Expected: 4147c0
[PASS] dispatch_group_create
Actual: 1000000
Expected: 1000000
[PASS] count
PASS: dispatch_pingpong
==================================================
[TEST] Dispatch Source Read
[PID] 16547
==================================================
Actual: 4902f0
Expected: 4902f0
[PASS] dispatch_get_main_queue
Actual: 491ce0
Expected: 491ce0
[PASS] DISPATCH_SOURCE_TYPE_READ
bytes available: 1
bytes read: 512000
bytes available: 1
bytes read: 512000
bytes available: 1
bytes read: 512000
bytes available: 1
bytes read: 512000
bytes available: 1
bytes read: 438813
Actual: 0
Expected: 0
[PASS] EOF
Actual: 2486813
Expected: 2486813
[PASS] Bytes read
Actual: 0
Expected: 0
[PASS] close
PASS: dispatch_read
==================================================
[TEST] Dispatch Reader/Writer Queues
[PID] 16563
==================================================
PASS: dispatch_readsync
==================================================
[TEST] Dispatch Semaphore
[PID] 16579
==================================================
Actual: 10000
Expected: 10000
[PASS] count
PASS: dispatch_sema
==================================================
[TEST] Dispatch Source Timer, bit 31
[PID] 16595
==================================================
Actual: 413150
Expected: 413150
[PASS] dispatch_get_main_queue
Actual: 414b30
Expected: 414b30
[PASS] DISPATCH_SOURCE_TYPE_TIMER
Actual: 2
Expected: <4
[PASS] elapsed time < 4s
Actual: 1
Expected: <2
[PASS] elapsed time > 2s
PASS: dispatch_timer_bit31
==================================================
[TEST] Dispatch Source Timer, bit 63
[PID] 16611
==================================================
0
PASS: dispatch_timer_bit63
==================================================
[TEST] Dispatch C++
[PID] 16627
==================================================
Actual: 4128d0
Expected: 4128d0
[PASS] dispatch_get_main_queue
PASS: dispatch_plusplus
===================
All 19 tests passed
===================
gmake[2]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk/testing'
gmake[1]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk/testing'
gmake[1]: Entering directory `/home/jocke/gcd/cb31/libdispatch/trunk'
gmake[1]: Nothing to be done for `check-am'.
gmake[1]: Leaving directory `/home/jocke/gcd/cb31/libdispatch/trunk'
-bash-3.00$
—————————
The complete build was done with (replace the two ‘cp’:s below with applying the patches instead):
——————
export XX_SOURCE_ROOT=/home/jocke/gcd/cb31
export CC=clang
export CXX=clang++
export NM=llvm-nm
export LD=clang
export PKG_CONFIG_PATH=$XX_SOURCE_ROOT/usr/local/lib/pkgconfig
export SVN=/opt/csw/bin/svn
export MAKE=/opt/csw/bin/gmake
export DESTDIR=$XX_SOURCE_ROOT
mkdir $XX_SOURCE_ROOT
mkdir $XX_SOURCE_ROOT/build
cd $XX_SOURCE_ROOT
$SVN co svn://mark.heily.com/libkqueue libkqueue
$SVN co svn://mark.heily.com/libpthread_workqueue libpthread_workqueue
$SVN co http://svn.macosforge.org/repository/libdispatch libdispatch
$SVN co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
cd $XX_SOURCE_ROOT/libpthread_workqueue/trunk/
cp /home/jocke/gcd/cb5/libpthread_workqueue/trunk/pthread_workqueue.c .
./configure DESTDIR=$XX_SOURCE_ROOT
$MAKE
$MAKE install DESTDIR=$XX_SOURCE_ROOT
cd $XX_SOURCE_ROOT/libkqueue/trunk/
./configure
$MAKE -j16 CFLAGS="-I./include -I./src/common -fpic -Wall -Werror -g -std=c99 -D_XOPEN_SOURCE=600 -m64 -D__EXTENSIONS__"
$MAKE install DESTDIR=$XX_SOURCE_ROOT
cd $XX_SOURCE_ROOT/build
cmake -DCMAKE_C_FLAGS=-m64 -DCMAKE_CXX_FLAGS=-m64 ../compiler-rt/
$MAKE -j16
$MAKE install DESTDIR=$XX_SOURCE_ROOT
cd $XX_SOURCE_ROOT/libdispatch/trunk/
cp /home/jocke/gcd/cb21/libdispatch/trunk/m4/private-extern.m4 m4/private-extern.m4
sh autogen.sh
./configure CFLAGS="-m64 -I$XX_SOURCE_ROOT/usr/local/include -L$XX_SOURCE_ROOT/usr/local/lib -R$XX_SOURCE_ROOT/usr/local/lib" CXXFLAGS=-m64 --with-blocks-runtime=$XX_SOURCE_ROOT/usr/local/lib
$MAKE install -j16 CFLAGS="-m64 -I$XX_SOURCE_ROOT/usr/local/include/kqueue -I$XX_SOURCE_ROOT/usr/local/include -L$XX_SOURCE_ROOT/usr/local/lib -R$XX_SOURCE_ROOT/usr/local/lib -fblocks" CXXFLAGS="-m64 -fblocks"
———
Following diffs;
libpthread_workqueue (due to RLIMIT_NPROC unavailability on Solaris, fix provided to Mark);
===================================================================
--- pthread_workqueue.c (revision 36)
+++ pthread_workqueue.c (working copy)
@@ -78,6 +78,9 @@
#define PTHREAD_WORKQUEUE_SIG 0xBEBEBEBE
#define PTHREAD_WORKQUEUE_ATTR_SIG 0xBEBEBEBE
+/* The allowed number of threads if RLIMIT_NPROC is not availble */
+#define RLIMIT_NPROC_DEFAULT_THREAD_LIMIT 128
+
struct work {
STAILQ_ENTRY(work) item_entry;
void (*func)(void *);
@@ -413,14 +416,18 @@
static unsigned int
get_process_limit(void)
{
+#ifdef RLIMIT_NPROC
struct rlimit rlim;
if (getrlimit(RLIMIT_NPROC, &rlim) < 0) {
dbg_perror("getrlimit(2)");
- return (50);
+ return (RLIMIT_NPROC_DEFAULT_THREAD_LIMIT);
} else {
return (rlim.rlim_max);
}
+#else
+ return (RLIMIT_NPROC_DEFAULT_THREAD_LIMIT);
+#endif
}
static unsigned int
————————
and for libdispatch, disabling __private_extern__ as described above:
————————
Index: m4/private-extern.m4
===================================================================
--- m4/private-extern.m4 (revision 197)
+++ m4/private-extern.m4 (working copy)
@@ -19,15 +19,7 @@
[dispatch_cv_private_extern=yes],
[dispatch_cv_private_extern=no])])
-if test $dispatch_cv_private_extern = yes; then
- AC_DEFINE(HAVE_PRIVATE_EXTERN, 1, Define if __private_extern__ present)
-elif test $dispatch_cv_hidden_visibility_attribute = yes; then
- AC_DEFINE(HAVE_PRIVATE_EXTERN, 1, Define if __private_extern__ present)
- AC_DEFINE([__private_extern__], [extern __attribute__ ((visibility ("hidden")))],
- [Define to a replacement for __private_extern])
-else
AC_DEFINE([__private_extern__], [extern],
[Define to a replacement for __private_extern])
-fi
])
————————
More information about the libdispatch-dev
mailing list