1Grand Central Dispatch (GCD)
2
3GCD is a concurrent programming framework first shipped with Mac OS X Snow
4Leopard.  This package is an open source bundling of libdispatch, the core
5user space library implementing GCD.  At the time of writing, support for
6the BSD kqueue API, and specifically extensions introduced in Mac OS X Snow
7Leopard and FreeBSD 9-CURRENT, are required to use libdispatch.  Other
8systems are currently unsupported.
9
10  Configuring and installing libdispatch
11
12GCD is built using autoconf, automake, and libtool, and has a number of
13compile-time configuration options that should be reviewed before starting.
14An uncustomized install requires:
15
16	sh autogen.sh
17	./configure
18	make
19	make install
20
21The following configure options may be of general interest:
22
23--with-apple-libc-source
24
25	Specify the path to Apple's Libc package, so that appropriate headers can
26	be found and used.
27
28--with-apple-libclosure-source
29
30	Specify the path to Apple's Libclosure package, so that appropriate headers
31	can be found and used.
32
33--with-apple-xnu-source
34
35	Specify the path to Apple's XNU package, so that appropriate headers can be
36	found and used.
37
38--with-blocks-runtime
39
40	On systems where -fblocks is supported, specify an additional library path
41	in which libBlocksRuntime can be found.  This is not required on Mac OS X,
42	where the Blocks runtime is included in libSystem, but is required on
43	FreeBSD.
44
45The following options are likely to only be useful when building libdispatch on
46Mac OS X as a replacement for /usr/lib/system/libdispatch.dylib:
47
48--with-apple-objc4-source
49
50	Specify the path to Apple's objc4 package, so that appropriate headers can
51	be found and used.
52
53--with-apple-libauto-source
54
55	Specify the path to Apple's libauto package, so that appropriate headers
56	can be found and used.
57
58--disable-libdispatch-init-constructor
59
60	Do not tag libdispatch's init routine as __constructor, in which case it
61	must be run manually before libdispatch routines can be called. This is the
62	default when building on Mac OS X. For /usr/lib/system/libdispatch.dylib
63	the init routine is called automatically during process start.
64
65--enable-apple-tsd-optimizations
66
67	Use a non-portable allocation scheme for pthread per-thread data (TSD) keys
68	when building libdispatch for /usr/lib/system on Mac OS X.  This should not
69	be used on other OS's, or on Mac OS X when building a stand-alone library.
70
71  Typical configuration commands
72
73The following command lines create the configuration required to build
74libdispatch for /usr/lib/system on OS X MountainLion:
75
76	sh autogen.sh
77	cflags='-arch x86_64 -arch i386 -g -Os'
78	./configure CFLAGS="$cflags" OBJCFLAGS="$cflags" CXXFLAGS="$cflags" \
79		--prefix=/usr --libdir=/usr/lib/system \
80		--disable-dependency-tracking --disable-static \
81		--enable-apple-tsd-optimizations \
82		--with-apple-libc-source=/path/to/10.8.0/Libc-825.24 \
83		--with-apple-libclosure-source=/path/to/10.8.0/libclosure-59 \
84		--with-apple-xnu-source=/path/to/10.8.0/xnu-2050.7.9 \
85		--with-apple-objc4-source=/path/to/10.8.0/objc4-532 \
86		--with-apple-libauto-source=/path/to/10.8.0/libauto-185.1
87	make check
88
89Typical configuration line for FreeBSD 8.x and 9.x to build libdispatch with
90clang and blocks support:
91
92	sh autogen.sh
93	./configure CC=clang --with-blocks-runtime=/usr/local/lib
94	make check
95