INSTALL   [plain text]


Grand Central Dispatch (GCD)

GCD is a concurrent programming framework first shipped with Mac OS X Snow
Leopard.  This package is an open source bundling of libdispatch, the core
user space library implementing GCD.  At the time of writing, support for
the BSD kqueue API, and specifically extensions introduced in Mac OS X Snow
Leopard and FreeBSD 9-CURRENT, are required to use libdispatch.  Support
for Linux is a work in progress (see Linux notes below). Other systems are
currently unsupported.

  Configuring and installing libdispatch

GCD is built using autoconf, automake, and libtool, and has a number of
compile-time configuration options that should be reviewed before starting.
An uncustomized install requires:

	sh autogen.sh
	./configure
	make
	make install

The following configure options may be of general interest:

--with-apple-libpthread-source

	Specify the path to Apple's libpthread package, so that appropriate headers
	can be found and used.

--with-apple-libplatform-source

	Specify the path to Apple's libplatform package, so that appropriate headers
	can be found and used.

--with-apple-libclosure-source

	Specify the path to Apple's Libclosure package, so that appropriate headers
	can be found and used.

--with-apple-xnu-source

	Specify the path to Apple's XNU package, so that appropriate headers can be
	found and used.

--with-blocks-runtime

	On 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.

The following options are likely to only be useful when building libdispatch on
OS X as a replacement for /usr/lib/system/libdispatch.dylib:

--with-apple-objc4-source

	Specify the path to Apple's objc4 package, so that appropriate headers can
	be found and used.

--disable-libdispatch-init-constructor

	Do 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.

--enable-apple-tsd-optimizations

	Use 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.

  Typical configuration commands

The following command lines create the configuration required to build
libdispatch for /usr/lib/system on OS X El Capitan:

	clangpath=$(dirname `xcrun --find clang`)
	sudo mkdir -p "$clangpath/../local/lib/clang/enable_objc_gc"
	LIBTOOLIZE=glibtoolize sh autogen.sh
	cflags='-arch x86_64 -arch i386 -g -Os'
	./configure CFLAGS="$cflags" OBJCFLAGS="$cflags" CXXFLAGS="$cflags" \
		--prefix=/usr --libdir=/usr/lib/system --disable-static \
		--enable-apple-tsd-optimizations \
		--with-apple-libpthread-source=/path/to/10.11.0/libpthread-137.1.1 \
		--with-apple-libplatform-source=/path/to/10.11.0/libplatform-73.1.1 \
		--with-apple-libclosure-source=/path/to/10.11.0/libclosure-65 \
		--with-apple-xnu-source=/path/to/10.11.0/xnu-3247.1.106 \
		--with-apple-objc4-source=/path/to/10.11.0/objc4-680
	make check

Typical configuration line for FreeBSD 8.x and 9.x to build libdispatch with
clang and blocks support:

	sh autogen.sh
	./configure CC=clang --with-blocks-runtime=/usr/local/lib
	make check

Instructions for building on Linux. Initial focus is on ubuntu 15.04.
Prepare your system
 1. Install compiler, autotools
    sudo apt-get install clang
    sudo apt-get install autoconf libtool pkg-config
 2. Install dtrace (to generate provider.h)
    sudo apt-get install systemtap-sdt-dev
 3. Install libdispatch pre-reqs
    sudo apt-get install libblocksruntime-dev libkqueue-dev libbsd-dev

Initialize git submodules:
  We are using git submodules to incorporate a specific revision of the
  upstream pthread_workqueue library into the build.
    git submodule init
    git submodule update

Build:
	sh autogen.sh
	./configure
	make

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