]> git.saurik.com Git - apple/libdispatch.git/blame - INSTALL.md
libdispatch-913.30.4.tar.gz
[apple/libdispatch.git] / INSTALL.md
CommitLineData
fa22f35b
A
1## Grand 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. Linux is
8supported, but requires specific packages to be installed (see Linux
9section at the end of the file). Other systems are currently unsupported.
10
11### Configuring and installing libdispatch (general comments)
12
13GCD is built using autoconf, automake, and libtool, and has a number of
14compile-time configuration options that should be reviewed before starting.
15An uncustomized install of the C-API to libdispatch requires:
16
17 sh autogen.sh
18 ./configure
19 make
20 make install
21
22libdispatch can be optionally built to include a Swift API. This requires a
23Swift toolchain to compile the Swift code in libdispatch and can be done
24in two possible scenarios.
25
26If you are building your own Swift toolchain from source, then you should build
27libdispatch simply by giving additional arguments to swift/utils/build-script:
28
29 ./swift/utils/build-script --libdispatch -- --install-libdispatch
30
31To build libdispatch using a pre-built Swift toolchain and install libdispatch
32into that toolchain (to allow that toolchain to compile Swift code containing
33"import Dispatch") requires:
34
35 sh autogen.sh
36 ./configure --with-swift-toolchain=<PATH_TO_SWIFT_TOOLCHAIN> --prefix=<PATH_TO_SWIFT_TOOLCHAIN>
37 make
38 make install
39
40Note that once libdispatch is installed into a Swift toolchain, that
41toolchain cannot be used to compile libdispatch again (you must 'make uninstall'
42libdispatch from the toolchain before using it to rebuild libdispatch).
43
44You can also use the build-toolchain script to create a toolchain
45that includes libdispatch on Linux:
46
471. Add libdispatch and install-libdispatch lines to ./swift/utils/build-presets.ini under `[preset: buildbot_linux]` section, as following:
48
49 ```
50 [preset: buildbot_linux]
51 mixin-preset=mixin_linux_installation
52 build-subdir=buildbot_linux
53 lldb
54 release
55 test
56 validation-test
57 long-test
58 libdispatch
59 foundation
60 lit-args=-v
61 dash-dash
62
63 install-libdispatch
64 install-foundation
65 reconfigure
66 ```
67
682. Run:
69
70 ```
71 ./swift/utils/build-toolchain local.swift
72 ```
73
74Note that adding libdispatch in build-presets.ini is for Linux only as Swift on macOS platforms uses the system installed libdispatch, so its not required.
75
76### Building and installing on OS X
77
78The following configure options may be of general interest:
79
80`--with-apple-libpthread-source`
81
82Specify the path to Apple's libpthread package, so that appropriate headers
83 can be found and used.
84
85`--with-apple-libplatform-source`
86
87Specify the path to Apple's libplatform package, so that appropriate headers
88 can be found and used.
89
fa22f35b
A
90`--with-apple-xnu-source`
91
92Specify the path to Apple's XNU package, so that appropriate headers can be
93 found and used.
94
95`--with-blocks-runtime`
96
97On systems where -fblocks is supported, specify an additional library path in which libBlocksRuntime can be found. This is not required on OS X, where the Blocks runtime is included in libSystem, but is required on FreeBSD.
98
99The following options are likely to only be useful when building libdispatch on
100OS X as a replacement for /usr/lib/system/libdispatch.dylib:
101
fa22f35b
A
102`--disable-libdispatch-init-constructor`
103
104Do not tag libdispatch's init routine as __constructor, in which case it must be run manually before libdispatch routines can be called. This is the default when building on OS X. For /usr/lib/system/libdispatch.dylib the init routine is called automatically during process start.
105
106`--enable-apple-tsd-optimizations`
107
108Use a non-portable allocation scheme for pthread per-thread data (TSD) keys when building libdispatch for /usr/lib/system on OS X. This should not be used on other OS's, or on OS X when building a stand-alone library.
109
110#### Typical configuration commands
111
112The following command lines create the configuration required to build
113libdispatch for /usr/lib/system on OS X El Capitan:
114
115 clangpath=$(dirname `xcrun --find clang`)
116 sudo mkdir -p "$clangpath/../local/lib/clang/enable_objc_gc"
117 LIBTOOLIZE=glibtoolize sh autogen.sh
118 cflags='-arch x86_64 -arch i386 -g -Os'
119 ./configure CFLAGS="$cflags" OBJCFLAGS="$cflags" CXXFLAGS="$cflags" \
120 --prefix=/usr --libdir=/usr/lib/system --disable-static \
121 --enable-apple-tsd-optimizations \
122 --with-apple-libpthread-source=/path/to/10.11.0/libpthread-137.1.1 \
123 --with-apple-libplatform-source=/path/to/10.11.0/libplatform-73.1.1 \
fa22f35b 124 --with-apple-xnu-source=/path/to/10.11.0/xnu-3247.1.106 \
fa22f35b
A
125 make check
126
127### Building and installing for FreeBSD
128
129Typical configuration line for FreeBSD 8.x and 9.x to build libdispatch with
130clang and blocks support:
131
132 sh autogen.sh
133 ./configure CC=clang --with-blocks-runtime=/usr/local/lib
134 make check
135
136### Building and installing for Linux
137
138Note that libdispatch development and testing is done only
139on Ubuntu; currently supported versions are 14.04, 15.10 and 16.04.
140
1411. The first thing to do is install required packages:
142
6b746eb4 143 `sudo apt-get install autoconf libtool pkg-config clang systemtap-sdt-dev libbsd-dev linux-libc-dev`
fa22f35b
A
144
145 Note: compiling libdispatch requires clang 3.8 or better and
146the gold linker. If the default clang on your Ubuntu version is
147too old, see http://apt.llvm.org/ to install a newer version.
148On older Ubuntu releases, you may need to install binutils-gold
149to get the gold linker.
150
6b746eb4 1512. Build (as in the general instructions above)
fa22f35b
A
152
153 ```
154 sh autogen.sh
155 ./configure
156 make
157 make install
158 ```