Switch branches/tags
version-14_01_1 version-14_01 version-13_05_2 version-13_05_1 version-13_05 version-12_08-branchpoint version-12_08-GIT version-11_07_2 version-11_07_1 version-11_07 version-11_07-branchpoint version-11_01 version-11_01-branchpoint version-10_04_2 version-10_04_1 version-10_04 version-10_04-branchpoint version-0_13_1 version-0_13-branchpoint version-0_12_2 version-0_12_1 version-0_12-branchpoint version-0_11_0 version-0_11-branchpoint version-0_10 version-0_9_1 version-0_9 version-0_9_x-snapshot version-0_9_x-snapshot-19991220 unstable-version-0_13_1-x86_64-unknown-linux-gnu-libc2_3 unstable-version-0_13_1-i686-pc-linux-libc2_3-gnu-O5-intermod unstable-version-0_13-branch-x86_64-unknown-linux-gnu-libc2_3 unstable-version-0_13-branch-i686-pc-linux-libc2_3-gnu-O5-intermod unstable-version-0_12_2-i686-pc-linux-libc2_2-gnu-O5-intermod unstable-version-0_12_2-i386-pc-solaris2_8 unstable-version-0_12_1-i686-pc-linux-libc2_3-gnu-O4-intermod unstable-version-0_12_1-i686-pc-linux-libc2_3-gnu-O2 unstable-version-0_12_1-i686-pc-linux-libc2_2-gnu-O5-intermod unstable-version-0_12_1-i386-pc-solaris2_8 unstable-version-0_12-branch-i686-pc-linux-libc2_3-gnu-O5 unstable-version-0_12-branch-i686-pc-linux-libc2_3-gnu-O4-intermod unstable-version-0_12-branch-i686-pc-linux-libc2_3-gnu-O4-hlc unstable-version-0_12-branch-i686-pc-linux-libc2_3-gnu-O2 unstable-version-0_12-branch-i686-pc-linux-libc2_2-gnu-O5 unstable-version-0_12-branch-i686-pc-linux-libc2_2-gnu-O5-intermod unstable-version-0_12-branch-i686-pc-linux-libc2_2-gnu-O3 unstable-version-0_12-branch-i386-pc-solaris2_8 unstable-version-0_11_0-sparc-sun-solaris2_7 unstable-version-0_11_0-i686-pc-linux-libc2_3-gnu-O5-intermod unstable-version-0_11_0-i686-pc-linux-libc2_2-gnu-O5 unstable-version-0_11_0-i686-pc-linux-libc2_2-gnu-O5-lcc unstable-version-0_11_0-i686-pc-linux-libc2_2-gnu-O5-hlc unstable-version-0_11_0-i686-pc-linux-libc2_1-gnu-O4 unstable-version-0_11_0-i686-pc-linux-libc2_1-gnu-O4-asm unstable-version-0_11_0-i686-pc-linux-libc2_1-gnu-O3 unstable-version-0_11_0-i386-pc-solaris2_8 unstable-version-0_11-branch-i686-pc-linux-libc2_3-gnu-O5-intermod unstable-version-0_11-branch-i686-pc-linux-libc2_2-gnu-O5-intermod unstable-version-0_11-branch-i686-pc-linux-libc2_2-gnu-O5-hlc unstable-version-0_11-branch-i686-pc-linux-libc2_1-gnu-O5 unstable-version-0_11-branch-i686-pc-linux-libc2_1-gnu-O5-lcc unstable-version-0_11-branch-i686-pc-linux-libc2_1-gnu-O5-intermod unstable-version-0_11-branch-i686-pc-linux-libc2_1-gnu-O5-hlc unstable-version-0_11-branch-alpha-dec-osf5_1 unstable-version-0_10_y-sparc-sun-solaris2_7 unstable-version-0_10_y-i686-pc-linux-libc2_1-gnu-O5 unstable-version-0_10_y-i686-pc-linux-libc2_1-gnu-O5-lcc unstable-version-0_10_y-i686-pc-linux-libc2_1-gnu-O5-intermod unstable-version-0_10_y-i686-pc-linux-libc2_1-gnu-O5-hlc unstable-version-0_10_y-i686-pc-linux-libc2_1-gnu-O4 unstable-version-0_10_y-i686-pc-linux-libc2_1-gnu-O4-hlc unstable-version-0_10_y-i686-pc-linux-libc2_1-gnu-O2 unstable-version-0_10_y-i586-pc-linux-libc2_1-gnu-O0 unstable-version-0_10_y-alpha-dec-osf5_1 unstable-version-0_10_y-alpha-dec-osf3_2 unstable-version-0_10_x-sparc-sun-solaris2_7 unstable-version-0_10_x-i686-pc-linux-libc2_1-gnu-O5 unstable-version-0_10_x-i686-pc-linux-libc2_1-gnu-O5-lcc unstable-version-0_10_x-i686-pc-linux-libc2_1-gnu-O4 unstable-version-0_10_x-i686-pc-linux-libc2_1-gnu-O4-hlc unstable-version-0_10_x-i686-pc-linux-libc2_1-gnu-O3 unstable-version-0_10_x-i686-pc-linux-libc2_1-gnu-O2 unstable-version-0_10_x-i586-pc-linux-libc2_1-gnu-O0 unstable-version-0_10_x-alpha-dec-osf3_2 termination2_trunk stable-version-0_11_0-i686-pc-linux-libc2_3-gnu-O5-intermod stable-version-0_11_0-i686-pc-linux-libc2_2-gnu-O5 stable-version-0_11_0-i686-pc-linux-libc2_2-gnu-O5-lcc stable-version-0_11_0-i686-pc-linux-libc2_2-gnu-O5-hlc stable-version-0_11_0-i686-pc-linux-libc2_1-gnu-O4 stable-version-0_11_0-i686-pc-linux-libc2_1-gnu-O4-asm stable-version-0_11_0-i686-pc-linux-libc2_1-gnu-O3 stable-version-0_11-branch-i686-pc-linux-libc2_3-gnu-O5-intermod stable-version-0_11-branch-i686-pc-linux-libc2_2-gnu-O5-lcc stable-version-0_11-branch-i686-pc-linux-libc2_2-gnu-O5-intermod stable-version-0_11-branch-i686-pc-linux-libc2_1-gnu-O5 stable-version-0_11-branch-i686-pc-linux-libc2_1-gnu-O5-lcc stable-version-0_11-branch-i686-pc-linux-libc2_1-gnu-O5-intermod stable-version-0_11-branch-i686-pc-linux-libc2_1-gnu-O5-hlc stable-version-0_11-branch-alpha-dec-osf5_1
Nothing to show
Find file
4bbc1e4 Aug 21, 2015
@juliensf @wangp
231 lines (169 sloc) 9.4 KB
This file documents the port of Mercury to Mac OS X,
i.e. the "*-apple-darwin*" configuration.
* Mercury on Mac OS X 10.5 to 10.9
* Note for users of Xcode 5
* Note for users of Xcode 4
* Mercury on Mac OS X 10.4 and 10.3
* Mercury on older versions of Mac OS X
* Deployment Target Settings
* PowerPC Linking Problems
* Known bugs and unsupported features
* Deep profiling on Mac OS X
Mercury on Mac OS X 10.5 to 10.9
Mercury should build and install "out-of-the-box" on Intel Mac OS X systems
from version 10.5 or later. For information about installing Mercury on
versions of Mac OS X before 10.5, including on PowerPC systems, see the
sections below.
The 'asm_fast*' and 'reg*' grades are only available on 64-bit Intel Mac OS X
systems and only when using GCC version 4.3 or later as the C compiler.
(This has only been tested with the MacPorts builds of GCC however.)
If clang is being used as the C compiler then the only low-level C grades
available are the 'none*' grades. The high-level C, Java, Erlang and C# grades
all work. The 'erlang' grade requires an Erlang installation to be available
and the C# grades require the Mono .NET implementation. (See README.Erlang and
README.CSharp for further details.)
If the 'asm_fast.gc' grade is not available and unless otherwise directed, the
'hlc.gc' grade will be used as the default grade for compiling applications.
By default, 64-bit versions of the executables and libraries in the Mercury
system will be installed on x86-64 machines running Mac OS X 10.6 or later. To
build a 32-bit installation on such a machine, you need to arrange to have the
option "-m32" passed to clang or gcc. This can be done by invoking Mercury's
configure script with the option:
--with-cc="clang -m32"
--with-cc="gcc -m32"
By default, 32-bit versions of the executables and libraries are installed on
x86-64 machines running Mac OS X 10.5. To build and install 64-bit Mercury on
such a system you must pass the "-m64" option to the C compiler.
Mercury cannot be compiled with llvm-gcc on Mac OS X.
If, after installing Mercury, you encounter errors about missing .mih files,
and you have fink installed, then try removing the fink components from your
PATH (these usually start with /sw) and reinstalling.
Note for users of Xcode 5
With Xcode 5.* the executable named "gcc" is actually just a synonym for clang.
Mercury's configure script is aware of this and it should not cause any
problems. If you wish to use actual GCC instead of clang you will need to
install GCC (see the following section for further information).
Note for users of Xcode 4
The default C compiler provided with Xcode 4.* is llvm-gcc.
Mercury does NOT work with llvm-gcc. Note that with Xcode 4.* the executable
named "gcc" is actually a symbolic link for llvm-gcc.
In order to build Mercury you will need to use a C compiler other than
llvm-gcc, for example clang (See README.clang for further details) or actual
GCC. From version 4.2 Xcode no longer includes actual GCC, so if you wish to
use that you will need to install it yourself. Mac OS X packages for GCC are
provided by:
* The MacPorts project <>
* Homebrew <>
* The Fink project <>
As llvm-gcc is no longer supported as of version 3.0 of LLVM, we have no
intention of ever supporting Mercury with it.
Mercury on Mac OS X 10.3 and 10.4
Mercury should work on Mac OS X 10.3 (PowerPC) and 10.4 (both PowerPC and
Intel), although it has not been tested with either of these for some time.
Apple gcc 2.95 does not work with Mercury because it cannot handle the length
of some of the identifier names that the Mercury compiler generates.
Apple gcc 3.3 works with Mercury and there are no known issues (other than the
problem with gcc's powerpc backend described below). We recommend that users
of Mac OS X 10.3 and 10.4 use this version.
Apple gcc 4.0 does not work with Mercury. Users of Mac OS X 10.4 should note
that this version of gcc is the default one on their systems.
On 10.3 and 10.4, if you are using an Apple build of gcc then you must use the
gcc_select command to set the system's default gcc to that version of gcc. It
is not sufficient to just point Mercury to a version of gcc using the configure
script's `--with-cc' option. This restriction applies only to the builds of
gcc supplied by Apple.
Mainline gcc 3.3.X and 3.4.X are known to work with Mercury on 10.3.
Mainline gcc 4.0.X does not.
Mercury on older versions of Mac OS X
There may be problems with building Mercury on versions of Mac OS X less than
10.3. In particular, building shared libraries with Mercury on these systems
is not supported.
The version of tar in /usr/bin/tar on some older versions of Mac OS X (e.g.
10.1) doesn't work properly -- it truncates long path names. Make sure you
use GNU tar, which is available in /sw/bin/gtar, when unpacking the Mercury
source or binary distributions. (Also, make sure to use GNU tar if/when
*building* such distributions!) The version of tar that comes with Mac OS X
10.3.3 does not have this problem.
Also, Apple's version of gcc includes support for precompiled headers.
Unfortunately this support seems to be somewhat buggy, causing it to sometimes
crash with mysterious errors when building Mercury. Furthermore, for the
kinds of C code that the Mercury compiler generates, it results in a very big
slow-down, rather than any speedup. Fortunately this can be disabled by using
the `--traditional-cpp' option. The Mercury configure script should enable
this option automatically if it is needed.
Deployment Target Settings
By default, the Mercury compiler is configured so that the Mac OS X deployment
target (i.e. the value of the MACOSX_DEPLOYMENT_TARGET environment variable)
for code generated by the Mercury compiler is set to the same version as that
of the host system.
You can specify a different deployment target at configuration time using
the configure script's `--with-macosx-deployment-target' option.
(See the ``SDK Compatibility Guide'' in the Apple developer documentation
for further information about the deployment target setting.)
PowerPC Linking Problems
On PowerPC machines, the linker may have problems linking large executables
(particularly in debug grades; technically when the program requires a branch
larger than +/- 32 MB). It complains about relocation displacements being too
large. The only known workaround for this problem is to replace the
system-provided versions of crt1.o (Darwin module 'Csu') and crt2.o (part of
gcc) with versions that are compiled with the gcc options `-mlongcall' and (if
using gcc < ~ 3.4) `-mlong-branch'. C code generated by the Mercury compiler
will also need to be compiled with the above options. This can be achieved by
EXTRA_CFLAGS=-mlongcall -mlong-branch
to your Mercury.options or Mmakefile.
Known bugs and unsupported features
The 'asm_fast' grades will not work on *-apple-darwin machines, primarily
because of a (long-standing) bug in gcc (GCC bug #10901). By default,
the configure script will choose either 'reg' or 'none' as the default base
grade. If you do not intend to use debugging (e.g. with production code), then
you will probably get better performance by using the hlc.gc grade.
Executables created by the Mercury compiler cannot be statically linked against
the system libraries, on Mac OS X. Setting `MLFLAGS=-static' or invoking mmc
with the `--linkage static' option will result in an error message like the
following from the linker:
ld: can't locate file for: -lcrt0.o
The reason that this does not work is that static version of the system
libraries are not installed on OS X systems by default. (See Technical Q&A
QA118 <> for further details.)
This restriction only applies to system libraries. Statically linking against
Mercury libraries is fine.
Deep profiling on Mac OS X
The following discussion assumes a standard installation of Mac OS X. By
default Apache should have been installed as the default webserver.
In order to use the deep profiler you need to ensure that the deep profiling
CGI "script" is installed and that the webserver is running.
The deep profiling CGI script, mdprof_cgi, should be installed in the
directory /Library/WebServer/CGI-Executables. Mercury's normal installation
process should take care of this if deep profiling is enabled.
To ensure the webserver is running:
- Open the Apple Menu and open the System Preferences window.
- In the `System Preferences' window, click on the icon labelled `Sharing'.
- Make sure that `Personal Web Sharing' is enabled. If it is then
the webserver should be running.
The remaining instructions for using the deep profiler are the same as those
found in the ``Mercury User's Guide''. We recommend against using Safari 1.5
as it has been found to be somewhat unstable with the deep profiler. Later
versions of Safari are fine.