[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