configure.ac revision 5ebee9ea01fb2ac4dab4bbe577363c23e192f362
1dnl === configure.ac --------------------------------------------------------===
2dnl                     The LLVM Compiler Infrastructure
3dnl
4dnl This file is distributed under the University of Illinois Open Source
5dnl License. See LICENSE.TXT for details.
6dnl
7dnl===-----------------------------------------------------------------------===
8dnl This is the LLVM configuration script. It is processed by the autoconf
9dnl program to produce a script named configure. This script contains the
10dnl configuration checks that LLVM needs in order to support multiple platforms.
11dnl This file is composed of 10 sections per the recommended organization of
12dnl autoconf input defined in the autoconf documentation. As this file evolves,
13dnl please keep the various types of checks within their sections. The sections
14dnl are as follows:
15dnl
16dnl SECTION 1: Initialization & Setup
17dnl SECTION 2: Architecture, target, and host checks
18dnl SECTION 3: Command line arguments for the configure script.
19dnl SECTION 4: Check for programs we need and that they are the right version
20dnl SECTION 5: Check for libraries
21dnl SECTION 6: Check for header files
22dnl SECTION 7: Check for types and structures
23dnl SECTION 8: Check for specific functions needed
24dnl SECTION 9: Additional checks, variables, etc.
25dnl SECTION 10: Specify the output files and generate it
26dnl
27dnl===-----------------------------------------------------------------------===
28dnl===
29dnl=== SECTION 1: Initialization & Setup
30dnl===
31dnl===-----------------------------------------------------------------------===
32dnl Initialize autoconf and define the package name, version number and
33dnl address for reporting bugs.
34AC_INIT([LLVM],[3.3svn],[http://llvm.org/bugs/])
35AC_DEFINE([LLVM_VERSION_MAJOR], [3], [Major version of the LLVM API])
36AC_DEFINE([LLVM_VERSION_MINOR], [3], [Minor version of the LLVM API])
37
38dnl Provide a copyright substitution and ensure the copyright notice is included
39dnl in the output of --version option of the generated configure script.
40AC_SUBST(LLVM_COPYRIGHT,["Copyright (c) 2003-2013 University of Illinois at Urbana-Champaign."])
41AC_COPYRIGHT([Copyright (c) 2003-2013 University of Illinois at Urbana-Champaign.])
42
43dnl Indicate that we require autoconf 2.60 or later.
44AC_PREREQ(2.60)
45
46dnl Verify that the source directory is valid. This makes sure that we are
47dnl configuring LLVM and not some other package (it validates --srcdir argument)
48AC_CONFIG_SRCDIR([lib/IR/Module.cpp])
49
50dnl Place all of the extra autoconf files into the config subdirectory. Tell
51dnl various tools where the m4 autoconf macros are.
52AC_CONFIG_AUX_DIR([autoconf])
53
54dnl Quit if the source directory has already been configured.
55dnl NOTE: This relies upon undocumented autoconf behavior.
56if test ${srcdir} != "." ; then
57  if test -f ${srcdir}/include/llvm/Config/config.h ; then
58    AC_MSG_ERROR([Already configured in ${srcdir}])
59  fi
60fi
61
62dnl We need to check for the compiler up here to avoid anything else
63dnl starting with a different one.
64AC_PROG_CC(clang llvm-gcc gcc)
65AC_PROG_CXX(clang++ llvm-g++ g++)
66AC_PROG_CPP
67
68dnl Configure all of the projects present in our source tree. While we could
69dnl just AC_CONFIG_SUBDIRS on the set of directories in projects that have a
70dnl configure script, that usage of the AC_CONFIG_SUBDIRS macro is deprecated.
71dnl Instead we match on the known projects.
72
73dnl
74dnl One tricky part of doing this is that some projects depend upon other
75dnl projects.  For example, several projects rely upon the LLVM test suite.
76dnl We want to configure those projects first so that their object trees are
77dnl created before running the configure scripts of projects that depend upon
78dnl them.
79dnl
80
81dnl Several projects use llvm-gcc, so configure that first
82if test -d ${srcdir}/projects/llvm-gcc ; then
83  AC_CONFIG_SUBDIRS([projects/llvm-gcc])
84fi
85
86dnl Several projects use the LLVM test suite, so configure it next.
87if test -d ${srcdir}/projects/test-suite ; then
88  AC_CONFIG_SUBDIRS([projects/test-suite])
89fi
90
91dnl llvm-test is the old name of the test-suite, kept here for backwards
92dnl compatibility
93if test -d ${srcdir}/projects/llvm-test ; then
94  AC_CONFIG_SUBDIRS([projects/llvm-test])
95fi
96
97dnl Some projects use poolalloc; configure that next
98if test -d ${srcdir}/projects/poolalloc ; then
99  AC_CONFIG_SUBDIRS([projects/poolalloc])
100fi
101
102if test -d ${srcdir}/projects/llvm-poolalloc ; then
103  AC_CONFIG_SUBDIRS([projects/llvm-poolalloc])
104fi
105
106dnl Check for all other projects
107for i in `ls ${srcdir}/projects`
108do
109  if test -d ${srcdir}/projects/${i} ; then
110    case ${i} in
111      sample)       AC_CONFIG_SUBDIRS([projects/sample])    ;;
112      privbracket)  AC_CONFIG_SUBDIRS([projects/privbracket]) ;;
113      llvm-stacker) AC_CONFIG_SUBDIRS([projects/llvm-stacker]) ;;
114      llvm-reopt)   AC_CONFIG_SUBDIRS([projects/llvm-reopt]);;
115      llvm-java)    AC_CONFIG_SUBDIRS([projects/llvm-java]) ;;
116      llvm-tv)      AC_CONFIG_SUBDIRS([projects/llvm-tv])   ;;
117      safecode)     AC_CONFIG_SUBDIRS([projects/safecode]) ;;
118      llvm-kernel)  AC_CONFIG_SUBDIRS([projects/llvm-kernel]) ;;
119      compiler-rt)       ;;
120      llvm-gcc)       ;;
121      test-suite)     ;;
122      llvm-test)      ;;
123      poolalloc)      ;;
124      llvm-poolalloc) ;;
125      *)
126        AC_MSG_WARN([Unknown project (${i}) won't be configured automatically])
127        ;;
128    esac
129  fi
130done
131
132dnl Disable the build of polly, even if it is checked out into tools/polly.
133AC_ARG_ENABLE(polly,
134              AS_HELP_STRING([--enable-polly],
135                             [Use polly if available (default is YES)]),,
136                             enableval=default)
137case "$enableval" in
138  yes) AC_SUBST(ENABLE_POLLY,[1]) ;;
139  no)  AC_SUBST(ENABLE_POLLY,[0]) ;;
140  default) AC_SUBST(ENABLE_POLLY,[1]) ;;
141  *) AC_MSG_ERROR([Invalid setting for --enable-polly. Use "yes" or "no"]) ;;
142esac
143
144
145dnl Check if polly is checked out into tools/polly and configure it if
146dnl available.
147if (test -d ${srcdir}/tools/polly) && (test $ENABLE_POLLY -eq 1) ; then
148  AC_SUBST(LLVM_HAS_POLLY,1)
149  AC_CONFIG_SUBDIRS([tools/polly])
150fi
151
152dnl===-----------------------------------------------------------------------===
153dnl===
154dnl=== SECTION 2: Architecture, target, and host checks
155dnl===
156dnl===-----------------------------------------------------------------------===
157
158dnl Check the target for which we're compiling and the host that will do the
159dnl compilations. This will tell us which LLVM compiler will be used for
160dnl compiling SSA into object code. This needs to be done early because
161dnl following tests depend on it.
162AC_CANONICAL_TARGET
163
164dnl Determine the platform type and cache its value. This helps us configure
165dnl the System library to the correct build platform.
166AC_CACHE_CHECK([type of operating system we're going to host on],
167               [llvm_cv_os_type],
168[case $host in
169  *-*-aix*)
170    llvm_cv_link_all_option="-Wl,--whole-archive"
171    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
172    llvm_cv_os_type="AIX"
173    llvm_cv_platform_type="Unix" ;;
174  *-*-irix*)
175    llvm_cv_link_all_option="-Wl,--whole-archive"
176    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
177    llvm_cv_os_type="IRIX"
178    llvm_cv_platform_type="Unix" ;;
179  *-*-cygwin*)
180    llvm_cv_link_all_option="-Wl,--whole-archive"
181    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
182    llvm_cv_os_type="Cygwin"
183    llvm_cv_platform_type="Unix" ;;
184  *-*-darwin*)
185    llvm_cv_link_all_option="-Wl,-all_load"
186    llvm_cv_no_link_all_option="-Wl,-noall_load"
187    llvm_cv_os_type="Darwin"
188    llvm_cv_platform_type="Unix" ;;
189  *-*-minix*)
190    llvm_cv_link_all_option="-Wl,-all_load"
191    llvm_cv_no_link_all_option="-Wl,-noall_load"
192    llvm_cv_os_type="Minix"
193    llvm_cv_platform_type="Unix" ;;
194  *-*-freebsd* | *-*-kfreebsd-gnu)
195    llvm_cv_link_all_option="-Wl,--whole-archive"
196    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
197    llvm_cv_os_type="FreeBSD"
198    llvm_cv_platform_type="Unix" ;;
199  *-*-openbsd*)
200    llvm_cv_link_all_option="-Wl,--whole-archive"
201    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
202    llvm_cv_os_type="OpenBSD"
203    llvm_cv_platform_type="Unix" ;;
204  *-*-netbsd*)
205    llvm_cv_link_all_option="-Wl,--whole-archive"
206    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
207    llvm_cv_os_type="NetBSD"
208    llvm_cv_platform_type="Unix" ;;
209  *-*-dragonfly*)
210    llvm_cv_link_all_option="-Wl,--whole-archive"
211    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
212    llvm_cv_os_type="DragonFly"
213    llvm_cv_platform_type="Unix" ;;
214  *-*-hpux*)
215    llvm_cv_link_all_option="-Wl,--whole-archive"
216    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
217    llvm_cv_os_type="HP-UX"
218    llvm_cv_platform_type="Unix" ;;
219  *-*-interix*)
220    llvm_cv_link_all_option="-Wl,--whole-archive"
221    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
222    llvm_cv_os_type="Interix"
223    llvm_cv_platform_type="Unix" ;;
224  *-*-linux*)
225    llvm_cv_link_all_option="-Wl,--whole-archive"
226    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
227    llvm_cv_os_type="Linux"
228    llvm_cv_platform_type="Unix" ;;
229  *-*-gnu*)
230    llvm_cv_link_all_option="-Wl,--whole-archive"
231    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
232    llvm_cv_os_type="GNU"
233    llvm_cv_platform_type="Unix" ;;
234  *-*-solaris*)
235    llvm_cv_link_all_option="-Wl,-z,allextract"
236    llvm_cv_no_link_all_option="-Wl,-z,defaultextract"
237    llvm_cv_os_type="SunOS"
238    llvm_cv_platform_type="Unix" ;;
239  *-*-auroraux*)
240    llvm_cv_link_all_option="-Wl,-z,allextract"
241    llvm_cv_link_all_option="-Wl,-z,defaultextract"
242    llvm_cv_os_type="AuroraUX"
243    llvm_cv_platform_type="Unix" ;;
244  *-*-win32*)
245    llvm_cv_link_all_option="-Wl,--whole-archive"
246    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
247    llvm_cv_os_type="Win32"
248    llvm_cv_platform_type="Win32" ;;
249  *-*-mingw*)
250    llvm_cv_link_all_option="-Wl,--whole-archive"
251    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
252    llvm_cv_os_type="MingW"
253    llvm_cv_platform_type="Win32" ;;
254  *-*-haiku*)
255    llvm_cv_link_all_option="-Wl,--whole-archive"
256    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
257    llvm_cv_os_type="Haiku"
258    llvm_cv_platform_type="Unix" ;;
259  *-unknown-eabi*)
260    llvm_cv_link_all_option="-Wl,--whole-archive"
261    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
262    llvm_cv_os_type="Freestanding"
263    llvm_cv_platform_type="Unix" ;;
264  *-unknown-elf*)
265    llvm_cv_link_all_option="-Wl,--whole-archive"
266    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
267    llvm_cv_os_type="Freestanding"
268    llvm_cv_platform_type="Unix" ;;
269  *)
270    llvm_cv_link_all_option=""
271    llvm_cv_no_link_all_option=""
272    llvm_cv_os_type="Unknown"
273    llvm_cv_platform_type="Unknown" ;;
274esac])
275
276AC_CACHE_CHECK([type of operating system we're going to target],
277               [llvm_cv_target_os_type],
278[case $target in
279  *-*-aix*)
280    llvm_cv_target_os_type="AIX" ;;
281  *-*-irix*)
282    llvm_cv_target_os_type="IRIX" ;;
283  *-*-cygwin*)
284    llvm_cv_target_os_type="Cygwin" ;;
285  *-*-darwin*)
286    llvm_cv_target_os_type="Darwin" ;;
287  *-*-minix*)
288    llvm_cv_target_os_type="Minix" ;;
289  *-*-freebsd* | *-*-kfreebsd-gnu)
290    llvm_cv_target_os_type="FreeBSD" ;;
291  *-*-openbsd*)
292    llvm_cv_target_os_type="OpenBSD" ;;
293  *-*-netbsd*)
294    llvm_cv_target_os_type="NetBSD" ;;
295  *-*-dragonfly*)
296    llvm_cv_target_os_type="DragonFly" ;;
297  *-*-hpux*)
298    llvm_cv_target_os_type="HP-UX" ;;
299  *-*-interix*)
300    llvm_cv_target_os_type="Interix" ;;
301  *-*-linux*)
302    llvm_cv_target_os_type="Linux" ;;
303  *-*-gnu*)
304    llvm_cv_target_os_type="GNU" ;;
305  *-*-solaris*)
306    llvm_cv_target_os_type="SunOS" ;;
307  *-*-auroraux*)
308    llvm_cv_target_os_type="AuroraUX" ;;
309  *-*-win32*)
310    llvm_cv_target_os_type="Win32" ;;
311  *-*-mingw*)
312    llvm_cv_target_os_type="MingW" ;;
313  *-*-haiku*)
314    llvm_cv_target_os_type="Haiku" ;;
315  *-*-rtems*)
316    llvm_cv_target_os_type="RTEMS" ;;
317  *-*-nacl*)
318    llvm_cv_target_os_type="NativeClient" ;;
319  *-unknown-eabi*)
320    llvm_cv_target_os_type="Freestanding" ;;
321  *)
322    llvm_cv_target_os_type="Unknown" ;;
323esac])
324
325dnl Make sure we aren't attempting to configure for an unknown system
326if test "$llvm_cv_os_type" = "Unknown" ; then
327  AC_MSG_ERROR([Operating system is unknown, configure can't continue])
328fi
329
330dnl Set the "OS" Makefile variable based on the platform type so the
331dnl makefile can configure itself to specific build hosts
332AC_SUBST(OS,$llvm_cv_os_type)
333AC_SUBST(HOST_OS,$llvm_cv_os_type)
334AC_SUBST(TARGET_OS,$llvm_cv_target_os_type)
335
336dnl Set the LINKALL and NOLINKALL Makefile variables based on the platform
337AC_SUBST(LINKALL,$llvm_cv_link_all_option)
338AC_SUBST(NOLINKALL,$llvm_cv_no_link_all_option)
339
340dnl Set the "LLVM_ON_*" variables based on llvm_cv_platform_type
341dnl This is used by lib/Support to determine the basic kind of implementation
342dnl to use.
343case $llvm_cv_platform_type in
344  Unix)
345    AC_DEFINE([LLVM_ON_UNIX],[1],[Define if this is Unixish platform])
346    AC_SUBST(LLVM_ON_UNIX,[1])
347    AC_SUBST(LLVM_ON_WIN32,[0])
348    ;;
349  Win32)
350    AC_DEFINE([LLVM_ON_WIN32],[1],[Define if this is Win32ish platform])
351    AC_SUBST(LLVM_ON_UNIX,[0])
352    AC_SUBST(LLVM_ON_WIN32,[1])
353    ;;
354esac
355
356dnl Determine what our target architecture is and configure accordingly.
357dnl This will allow Makefiles to make a distinction between the hardware and
358dnl the OS.
359AC_CACHE_CHECK([target architecture],[llvm_cv_target_arch],
360[case $target in
361  i?86-*)                 llvm_cv_target_arch="x86" ;;
362  amd64-* | x86_64-*)     llvm_cv_target_arch="x86_64" ;;
363  sparc*-*)               llvm_cv_target_arch="Sparc" ;;
364  powerpc*-*)             llvm_cv_target_arch="PowerPC" ;;
365  arm*-*)                 llvm_cv_target_arch="ARM" ;;
366  mips-* | mips64-*)      llvm_cv_target_arch="Mips" ;;
367  mipsel-* | mips64el-*)  llvm_cv_target_arch="Mips" ;;
368  xcore-*)                llvm_cv_target_arch="XCore" ;;
369  msp430-*)               llvm_cv_target_arch="MSP430" ;;
370  hexagon-*)              llvm_cv_target_arch="Hexagon" ;;
371  mblaze-*)               llvm_cv_target_arch="MBlaze" ;;
372  nvptx-*)                llvm_cv_target_arch="NVPTX" ;;
373  *)                      llvm_cv_target_arch="Unknown" ;;
374esac])
375
376if test "$llvm_cv_target_arch" = "Unknown" ; then
377  AC_MSG_WARN([Configuring LLVM for an unknown target archicture])
378fi
379
380dnl Determine the LLVM native architecture for the target
381case "$llvm_cv_target_arch" in
382    x86)     LLVM_NATIVE_ARCH="X86" ;;
383    x86_64)  LLVM_NATIVE_ARCH="X86" ;;
384    *)       LLVM_NATIVE_ARCH="$llvm_cv_target_arch" ;;
385esac
386
387dnl Define a substitution, ARCH, for the target architecture
388AC_SUBST(ARCH,$llvm_cv_target_arch)
389
390dnl Determine what our host architecture.
391dnl This will allow MCJIT regress tests runs only for supported
392dnl platforms.
393case $host in
394  i?86-*)                 host_arch="x86" ;;
395  amd64-* | x86_64-*)     host_arch="x86_64" ;;
396  sparc*-*)               host_arch="Sparc" ;;
397  powerpc*-*)             host_arch="PowerPC" ;;
398  arm*-*)                 host_arch="ARM" ;;
399  mips-* | mips64-*)      host_arch="Mips" ;;
400  mipsel-* | mips64el-*)  host_arch="Mips" ;;
401  xcore-*)                host_arch="XCore" ;;
402  msp430-*)               host_arch="MSP430" ;;
403  hexagon-*)              host_arch="Hexagon" ;;
404  mblaze-*)               host_arch="MBlaze" ;;
405  *)                      host_arch="Unknown" ;;
406esac
407
408if test "$host_arch" = "Unknown" ; then
409  AC_MSG_WARN([Configuring LLVM for an unknown host archicture])
410fi
411
412AC_SUBST(HOST_ARCH,$host_arch)
413
414dnl Check for the endianness of the target
415AC_C_BIGENDIAN(AC_SUBST([ENDIAN],[big]),AC_SUBST([ENDIAN],[little]))
416
417dnl Check for build platform executable suffix if we're cross-compiling
418if test "$cross_compiling" = yes; then
419  AC_SUBST(LLVM_CROSS_COMPILING, [1])
420  AC_BUILD_EXEEXT
421  ac_build_prefix=${build_alias}-
422  AC_CHECK_PROG(BUILD_CXX, ${ac_build_prefix}g++, ${ac_build_prefix}g++)
423  if test -z "$BUILD_CXX"; then
424     AC_CHECK_PROG(BUILD_CXX, g++, g++)
425     if test -z "$BUILD_CXX"; then
426       AC_CHECK_PROG(BUILD_CXX, c++, c++, , , /usr/ucb/c++)
427     fi
428  fi
429else
430  AC_SUBST(LLVM_CROSS_COMPILING, [0])
431fi
432
433dnl Check to see if there's a .svn or .git directory indicating that this
434dnl build is being done from a checkout. This sets up several defaults for
435dnl the command line switches. When we build with a checkout directory,
436dnl we get a debug with assertions turned on. Without, we assume a source
437dnl release and we get an optimized build without assertions.
438dnl See --enable-optimized and --enable-assertions below
439if test -d ".svn" -o -d "${srcdir}/.svn" -o -d ".git" -o -d "${srcdir}/.git"; then
440  cvsbuild="yes"
441  optimize="no"
442  AC_SUBST(CVSBUILD,[[CVSBUILD=1]])
443else
444  cvsbuild="no"
445  optimize="yes"
446fi
447
448dnl===-----------------------------------------------------------------------===
449dnl===
450dnl=== SECTION 3: Command line arguments for the configure script.
451dnl===
452dnl===-----------------------------------------------------------------------===
453
454dnl --enable-libcpp : check whether or not to use libc++ on the command line
455AC_ARG_ENABLE(libcpp,
456              AS_HELP_STRING([--enable-libcpp],
457                             [Use libc++ if available (default is NO)]),,
458                             enableval=default)
459case "$enableval" in
460  yes) AC_SUBST(ENABLE_LIBCPP,[1]) ;;
461  no)  AC_SUBST(ENABLE_LIBCPP,[0]) ;;
462  default) AC_SUBST(ENABLE_LIBCPP,[0]);;
463  *) AC_MSG_ERROR([Invalid setting for --enable-libcpp. Use "yes" or "no"]) ;;
464esac
465
466dnl --enable-cxx11 : check whether or not to use -std=c++11 on the command line
467AC_ARG_ENABLE(cxx11,
468              AS_HELP_STRING([--enable-cxx11],
469                             [Use c++11 if available (default is NO)]),,
470                             enableval=default)
471case "$enableval" in
472  yes) AC_SUBST(ENABLE_CXX11,[1]) ;;
473  no)  AC_SUBST(ENABLE_CXX11,[0]) ;;
474  default) AC_SUBST(ENABLE_CXX11,[0]);;
475  *) AC_MSG_ERROR([Invalid setting for --enable-cxx11. Use "yes" or "no"]) ;;
476esac
477
478dnl --enable-clang-arcmt: check whether to enable clang arcmt
479clang_arcmt="yes"
480AC_ARG_ENABLE(clang-arcmt,
481              AS_HELP_STRING([--enable-clang-arcmt],
482                             [Enable building of clang ARCMT (default is YES)]),
483                             clang_arcmt="$enableval",
484                             enableval="yes")
485case "$enableval" in
486  yes) AC_SUBST(ENABLE_CLANG_ARCMT,[1]) ;;
487  no)  AC_SUBST(ENABLE_CLANG_ARCMT,[0]) ;;
488  default) AC_SUBST(ENABLE_CLANG_ARCMT,[1]);;
489  *) AC_MSG_ERROR([Invalid setting for --enable-clang-arcmt. Use "yes" or "no"]) ;;
490esac
491
492dnl --enable-clang-static-analyzer: check whether to enable static-analyzer
493clang_static_analyzer="yes"
494AC_ARG_ENABLE(clang-static-analyzer,
495              AS_HELP_STRING([--enable-clang-static-analyzer],
496                             [Enable building of clang Static Analyzer (default is YES)]),
497                             clang_static_analyzer="$enableval",
498                             enableval="yes")
499case "$enableval" in
500  yes) AC_SUBST(ENABLE_CLANG_STATIC_ANALYZER,[1]) ;;
501  no)  AC_SUBST(ENABLE_CLANG_STATIC_ANALYZER,[0]) ;;
502  default) AC_SUBST(ENABLE_CLANG_STATIC_ANALYZER,[1]);;
503  *) AC_MSG_ERROR([Invalid setting for --enable-clang-static-analyzer. Use "yes" or "no"]) ;;
504esac
505
506dnl --enable-clang-rewriter: check whether to enable clang rewriter
507AC_ARG_ENABLE(clang-rewriter,
508              AS_HELP_STRING([--enable-clang-rewriter],
509                             [Enable building of clang rewriter (default is YES)]),,
510                             enableval="yes")
511case "$enableval" in
512  yes) AC_SUBST(ENABLE_CLANG_REWRITER,[1]) ;;
513  no)  
514    if test ${clang_arcmt} != "no" ; then
515      AC_MSG_ERROR([Cannot enable clang ARC Migration Tool while disabling rewriter.])
516    fi
517    if test ${clang_static_analyzer} != "no" ; then
518      AC_MSG_ERROR([Cannot enable clang static analyzer while disabling rewriter.])
519    fi
520    AC_SUBST(ENABLE_CLANG_REWRITER,[0]) 
521    ;;
522  default) AC_SUBST(ENABLE_CLANG_REWRITER,[1]);;
523  *) AC_MSG_ERROR([Invalid setting for --enable-clang-rewriter. Use "yes" or "no"]) ;;
524esac
525
526dnl --enable-optimized : check whether they want to do an optimized build:
527AC_ARG_ENABLE(optimized, AS_HELP_STRING(
528 --enable-optimized,[Compile with optimizations enabled (default is NO)]),,enableval=$optimize)
529if test ${enableval} = "no" ; then
530  AC_SUBST(ENABLE_OPTIMIZED,[[]])
531else
532  AC_SUBST(ENABLE_OPTIMIZED,[[ENABLE_OPTIMIZED=1]])
533fi
534
535dnl --enable-profiling : check whether they want to do a profile build:
536AC_ARG_ENABLE(profiling, AS_HELP_STRING(
537 --enable-profiling,[Compile with profiling enabled (default is NO)]),,enableval="no")
538if test ${enableval} = "no" ; then
539  AC_SUBST(ENABLE_PROFILING,[[]])
540else
541  AC_SUBST(ENABLE_PROFILING,[[ENABLE_PROFILING=1]])
542fi
543
544dnl --enable-assertions : check whether they want to turn on assertions or not:
545AC_ARG_ENABLE(assertions,AS_HELP_STRING(
546  --enable-assertions,[Compile with assertion checks enabled (default is YES)]),, enableval="yes")
547if test ${enableval} = "yes" ; then
548  AC_SUBST(DISABLE_ASSERTIONS,[[]])
549else
550  AC_SUBST(DISABLE_ASSERTIONS,[[DISABLE_ASSERTIONS=1]])
551fi
552
553dnl --enable-werror : check whether we want Werror on by default
554AC_ARG_ENABLE(werror,AS_HELP_STRING(
555  --enable-werror,[Compile with -Werror enabled (default is NO)]),, enableval="no")
556case "$enableval" in
557  yes) AC_SUBST(ENABLE_WERROR,[1]) ;;
558  no)  AC_SUBST(ENABLE_WERROR,[0]) ;;
559  default) AC_SUBST(ENABLE_WERROR,[0]);;
560  *) AC_MSG_ERROR([Invalid setting for --enable-werror. Use "yes" or "no"]) ;;
561esac
562
563dnl --enable-expensive-checks : check whether they want to turn on expensive debug checks:
564AC_ARG_ENABLE(expensive-checks,AS_HELP_STRING(
565  --enable-expensive-checks,[Compile with expensive debug checks enabled (default is NO)]),, enableval="no")
566if test ${enableval} = "yes" ; then
567  AC_SUBST(ENABLE_EXPENSIVE_CHECKS,[[ENABLE_EXPENSIVE_CHECKS=1]])
568  AC_SUBST(EXPENSIVE_CHECKS,[[yes]])
569else
570  AC_SUBST(ENABLE_EXPENSIVE_CHECKS,[[]])
571  AC_SUBST(EXPENSIVE_CHECKS,[[no]])
572fi
573
574dnl --enable-debug-runtime : should runtime libraries have debug symbols?
575AC_ARG_ENABLE(debug-runtime,
576   AS_HELP_STRING(--enable-debug-runtime,[Build runtime libs with debug symbols (default is NO)]),,enableval=no)
577if test ${enableval} = "no" ; then
578  AC_SUBST(DEBUG_RUNTIME,[[]])
579else
580  AC_SUBST(DEBUG_RUNTIME,[[DEBUG_RUNTIME=1]])
581fi
582
583dnl --enable-debug-symbols : should even optimized compiler libraries
584dnl have debug symbols?
585AC_ARG_ENABLE(debug-symbols,
586   AS_HELP_STRING(--enable-debug-symbols,[Build compiler with debug symbols (default is NO if optimization is on and YES if it's off)]),,enableval=no)
587if test ${enableval} = "no" ; then
588  AC_SUBST(DEBUG_SYMBOLS,[[]])
589else
590  AC_SUBST(DEBUG_SYMBOLS,[[DEBUG_SYMBOLS=1]])
591fi
592
593dnl --enable-keep-symbols : do not strip installed executables
594AC_ARG_ENABLE(keep-symbols,
595   AS_HELP_STRING(--enable-keep-symbols,[Do not strip installed executables)]),,enableval=no)
596if test ${enableval} = "no" ; then
597  AC_SUBST(KEEP_SYMBOLS,[[]])
598else
599  AC_SUBST(KEEP_SYMBOLS,[[KEEP_SYMBOLS=1]])
600fi
601
602dnl --enable-jit: check whether they want to enable the jit
603AC_ARG_ENABLE(jit,
604  AS_HELP_STRING(--enable-jit,
605                 [Enable Just In Time Compiling (default is YES)]),,
606  enableval=default)
607if test ${enableval} = "no"
608then
609  AC_SUBST(JIT,[[]])
610else
611  case "$llvm_cv_target_arch" in
612    x86)         AC_SUBST(TARGET_HAS_JIT,1) ;;
613    Sparc)       AC_SUBST(TARGET_HAS_JIT,0) ;;
614    PowerPC)     AC_SUBST(TARGET_HAS_JIT,1) ;;
615    x86_64)      AC_SUBST(TARGET_HAS_JIT,1) ;;
616    ARM)         AC_SUBST(TARGET_HAS_JIT,1) ;;
617    Mips)        AC_SUBST(TARGET_HAS_JIT,1) ;;
618    XCore)       AC_SUBST(TARGET_HAS_JIT,0) ;;
619    MSP430)      AC_SUBST(TARGET_HAS_JIT,0) ;;
620    Hexagon)     AC_SUBST(TARGET_HAS_JIT,0) ;;
621    MBlaze)      AC_SUBST(TARGET_HAS_JIT,0) ;;
622    NVPTX)       AC_SUBST(TARGET_HAS_JIT,0) ;;
623    *)           AC_SUBST(TARGET_HAS_JIT,0) ;;
624  esac
625fi
626
627dnl Allow enablement of building and installing docs
628AC_ARG_ENABLE(docs,
629              AS_HELP_STRING([--enable-docs],
630                             [Build documents (default is YES)]),,
631                             enableval=default)
632case "$enableval" in
633  yes) AC_SUBST(ENABLE_DOCS,[1]) ;;
634  no)  AC_SUBST(ENABLE_DOCS,[0]) ;;
635  default) AC_SUBST(ENABLE_DOCS,[1]) ;;
636  *) AC_MSG_ERROR([Invalid setting for --enable-docs. Use "yes" or "no"]) ;;
637esac
638
639dnl Allow enablement of doxygen generated documentation
640AC_ARG_ENABLE(doxygen,
641              AS_HELP_STRING([--enable-doxygen],
642                             [Build doxygen documentation (default is NO)]),,
643                             enableval=default)
644case "$enableval" in
645  yes) AC_SUBST(ENABLE_DOXYGEN,[1]) ;;
646  no)  AC_SUBST(ENABLE_DOXYGEN,[0]) ;;
647  default) AC_SUBST(ENABLE_DOXYGEN,[0]) ;;
648  *) AC_MSG_ERROR([Invalid setting for --enable-doxygen. Use "yes" or "no"]) ;;
649esac
650
651dnl Allow disablement of threads
652AC_ARG_ENABLE(threads,
653              AS_HELP_STRING([--enable-threads],
654                             [Use threads if available (default is YES)]),,
655                             enableval=default)
656case "$enableval" in
657  yes) AC_SUBST(LLVM_ENABLE_THREADS,[1]) ;;
658  no)  AC_SUBST(LLVM_ENABLE_THREADS,[0]) ;;
659  default) AC_SUBST(LLVM_ENABLE_THREADS,[1]) ;;
660  *) AC_MSG_ERROR([Invalid setting for --enable-threads. Use "yes" or "no"]) ;;
661esac
662AC_DEFINE_UNQUOTED([LLVM_ENABLE_THREADS],$LLVM_ENABLE_THREADS,
663                   [Define if threads enabled])
664
665dnl Allow disablement of pthread.h
666AC_ARG_ENABLE(pthreads,
667              AS_HELP_STRING([--enable-pthreads],
668                             [Use pthreads if available (default is YES)]),,
669                             enableval=default)
670case "$enableval" in
671  yes) AC_SUBST(ENABLE_PTHREADS,[1]) ;;
672  no)  AC_SUBST(ENABLE_PTHREADS,[0]) ;;
673  default) AC_SUBST(ENABLE_PTHREADS,[1]) ;;
674  *) AC_MSG_ERROR([Invalid setting for --enable-pthreads. Use "yes" or "no"]) ;;
675esac
676
677dnl Allow building without position independent code
678AC_ARG_ENABLE(pic,
679  AS_HELP_STRING([--enable-pic],
680                 [Build LLVM with Position Independent Code (default is YES)]),,
681                 enableval=default)
682case "$enableval" in
683  yes) AC_SUBST(ENABLE_PIC,[1]) ;;
684  no)  AC_SUBST(ENABLE_PIC,[0]) ;;
685  default) AC_SUBST(ENABLE_PIC,[1]) ;;
686  *) AC_MSG_ERROR([Invalid setting for --enable-pic. Use "yes" or "no"]) ;;
687esac
688AC_DEFINE_UNQUOTED([ENABLE_PIC],$ENABLE_PIC,
689                   [Define if position independent code is enabled])
690
691dnl Allow building a shared library and linking tools against it.
692AC_ARG_ENABLE(shared,
693  AS_HELP_STRING([--enable-shared],
694                 [Build a shared library and link tools against it (default is NO)]),,
695                 enableval=default)
696case "$enableval" in
697  yes) AC_SUBST(ENABLE_SHARED,[1]) ;;
698  no)  AC_SUBST(ENABLE_SHARED,[0]) ;;
699  default) AC_SUBST(ENABLE_SHARED,[0]) ;;
700  *) AC_MSG_ERROR([Invalid setting for --enable-shared. Use "yes" or "no"]) ;;
701esac
702
703dnl Allow libstdc++ is embedded in LLVM.dll.
704AC_ARG_ENABLE(embed-stdcxx,
705  AS_HELP_STRING([--enable-embed-stdcxx],
706                 [Build a shared library with embedded libstdc++ for Win32 DLL (default is NO)]),,
707                 enableval=default)
708case "$enableval" in
709  yes) AC_SUBST(ENABLE_EMBED_STDCXX,[1]) ;;
710  no)  AC_SUBST(ENABLE_EMBED_STDCXX,[0]) ;;
711  default) AC_SUBST(ENABLE_EMBED_STDCXX,[0]) ;;
712  *) AC_MSG_ERROR([Invalid setting for --enable-embed-stdcxx. Use "yes" or "no"]) ;;
713esac
714
715dnl Enable embedding timestamp information into build.
716AC_ARG_ENABLE(timestamps,
717  AS_HELP_STRING([--enable-timestamps],
718                 [Enable embedding timestamp information in build (default is YES)]),,
719                 enableval=default)
720case "$enableval" in
721  yes) AC_SUBST(ENABLE_TIMESTAMPS,[1]) ;;
722  no)  AC_SUBST(ENABLE_TIMESTAMPS,[0]) ;;
723  default) AC_SUBST(ENABLE_TIMESTAMPS,[1]) ;;
724  *) AC_MSG_ERROR([Invalid setting for --enable-timestamps. Use "yes" or "no"]) ;;
725esac
726AC_DEFINE_UNQUOTED([ENABLE_TIMESTAMPS],$ENABLE_TIMESTAMPS,
727                   [Define if timestamp information (e.g., __DATE__) is allowed])
728
729dnl Enable embedding timestamp information into build.
730
731AC_ARG_ENABLE(backtraces,
732  AS_HELP_STRING([--enable-backtraces],
733                 [Enable embedding backtraces on crash (default is YES)]),,
734                 enableval=default)
735case "$enableval" in
736  yes) AC_SUBST(ENABLE_BACKTRACES,[1]) ;;
737  no)  AC_SUBST(ENABLE_BACKTRACES,[0]) ;;
738  default) AC_SUBST(ENABLE_BACKTRACES,[1]) ;;
739  *) AC_MSG_ERROR([Invalid setting for --enable-backtraces. Use "yes" or "no"]) ;;
740esac
741AC_DEFINE_UNQUOTED([ENABLE_BACKTRACES],$ENABLE_BACKTRACES,
742                   [Define if you want backtraces on crash])
743
744dnl Allow specific targets to be specified for building (or not)
745TARGETS_TO_BUILD=""
746AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-targets],
747    [Build specific host targets: all or target1,target2,... Valid targets are:
748     host, x86, x86_64, sparc, powerpc, arm, mips, hexagon,
749     xcore, msp430, nvptx, and cpp (default=all)]),,
750    enableval=all)
751if test "$enableval" = host-only ; then
752  enableval=host
753fi
754case "$enableval" in
755  all) TARGETS_TO_BUILD="X86 Sparc PowerPC ARM Mips XCore MSP430 CppBackend MBlaze NVPTX Hexagon" ;;
756  *)for a_target in `echo $enableval|sed -e 's/,/ /g' ` ; do
757      case "$a_target" in
758        x86)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
759        x86_64)   TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
760        sparc)    TARGETS_TO_BUILD="Sparc $TARGETS_TO_BUILD" ;;
761        powerpc)  TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
762        arm)      TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
763        mips)     TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
764        mipsel)   TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
765        mips64)   TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
766        mips64el) TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
767        xcore)    TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
768        msp430)   TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
769        cpp)      TARGETS_TO_BUILD="CppBackend $TARGETS_TO_BUILD" ;;
770        hexagon)  TARGETS_TO_BUILD="Hexagon $TARGETS_TO_BUILD" ;;
771        mblaze)   TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
772        nvptx)    TARGETS_TO_BUILD="NVPTX $TARGETS_TO_BUILD" ;;
773        host) case "$llvm_cv_target_arch" in
774            x86)         TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
775            x86_64)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
776            Sparc)       TARGETS_TO_BUILD="Sparc $TARGETS_TO_BUILD" ;;
777            PowerPC)     TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
778            ARM)         TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
779            Mips)        TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
780            MBlaze)      TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
781            XCore)       TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
782            MSP430)      TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
783            Hexagon)     TARGETS_TO_BUILD="Hexagon $TARGETS_TO_BUILD" ;;
784            NVPTX)       TARGETS_TO_BUILD="NVPTX $TARGETS_TO_BUILD" ;;
785            *)       AC_MSG_ERROR([Can not set target to build]) ;;
786          esac ;;
787        *) AC_MSG_ERROR([Unrecognized target $a_target]) ;;
788      esac
789  done
790  ;;
791esac
792
793AC_ARG_ENABLE([experimental-targets],AS_HELP_STRING([--enable-experimental-targets],
794    [Build experimental host targets: disable or target1,target2,...
795     (default=disable)]),,
796    enableval=disable)
797
798if test ${enableval} != "disable"
799then
800  TARGETS_TO_BUILD="$enableval $TARGETS_TO_BUILD"
801fi
802
803AC_SUBST(TARGETS_TO_BUILD,$TARGETS_TO_BUILD)
804
805dnl Determine whether we are building LLVM support for the native architecture.
806dnl If so, define LLVM_NATIVE_ARCH to that LLVM target.
807for a_target in $TARGETS_TO_BUILD; do
808  if test "$a_target" = "$LLVM_NATIVE_ARCH"; then
809    AC_DEFINE_UNQUOTED(LLVM_NATIVE_ARCH, $LLVM_NATIVE_ARCH,
810      [LLVM architecture name for the native architecture, if available])
811    LLVM_NATIVE_TARGET="LLVMInitialize${LLVM_NATIVE_ARCH}Target"
812    LLVM_NATIVE_TARGETINFO="LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo"
813    LLVM_NATIVE_TARGETMC="LLVMInitialize${LLVM_NATIVE_ARCH}TargetMC"
814    LLVM_NATIVE_ASMPRINTER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter"
815    if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/AsmParser/Makefile ; then
816      LLVM_NATIVE_ASMPARSER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmParser"
817    fi
818    if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/Disassembler/Makefile ; then
819      LLVM_NATIVE_DISASSEMBLER="LLVMInitialize${LLVM_NATIVE_ARCH}Disassembler"
820    fi
821    AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGET, $LLVM_NATIVE_TARGET,
822      [LLVM name for the native Target init function, if available])
823    AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGETINFO, $LLVM_NATIVE_TARGETINFO,
824      [LLVM name for the native TargetInfo init function, if available])
825    AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGETMC, $LLVM_NATIVE_TARGETMC,
826      [LLVM name for the native target MC init function, if available])
827    AC_DEFINE_UNQUOTED(LLVM_NATIVE_ASMPRINTER, $LLVM_NATIVE_ASMPRINTER,
828      [LLVM name for the native AsmPrinter init function, if available])
829    if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/AsmParser/Makefile ; then
830      AC_DEFINE_UNQUOTED(LLVM_NATIVE_ASMPARSER, $LLVM_NATIVE_ASMPARSER,
831       [LLVM name for the native AsmParser init function, if available])
832    fi
833    if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/Disassembler/Makefile ; then
834      AC_DEFINE_UNQUOTED(LLVM_NATIVE_DISASSEMBLER, $LLVM_NATIVE_DISASSEMBLER,
835       [LLVM name for the native Disassembler init function, if available])
836    fi
837  fi
838done
839
840dnl Build the LLVM_TARGET and LLVM_... macros for Targets.def and the individual
841dnl target feature def files.
842LLVM_ENUM_TARGETS=""
843LLVM_ENUM_ASM_PRINTERS=""
844LLVM_ENUM_ASM_PARSERS=""
845LLVM_ENUM_DISASSEMBLERS=""
846for target_to_build in $TARGETS_TO_BUILD; do
847  LLVM_ENUM_TARGETS="LLVM_TARGET($target_to_build) $LLVM_ENUM_TARGETS"
848  if test -f ${srcdir}/lib/Target/${target_to_build}/*AsmPrinter.cpp ; then
849    LLVM_ENUM_ASM_PRINTERS="LLVM_ASM_PRINTER($target_to_build) $LLVM_ENUM_ASM_PRINTERS";
850  fi
851  if test -f ${srcdir}/lib/Target/${target_to_build}/AsmParser/Makefile ; then
852    LLVM_ENUM_ASM_PARSERS="LLVM_ASM_PARSER($target_to_build) $LLVM_ENUM_ASM_PARSERS";
853  fi
854  if test -f ${srcdir}/lib/Target/${target_to_build}/Disassembler/Makefile ; then
855    LLVM_ENUM_DISASSEMBLERS="LLVM_DISASSEMBLER($target_to_build) $LLVM_ENUM_DISASSEMBLERS";
856  fi
857done
858AC_SUBST(LLVM_ENUM_TARGETS)
859AC_SUBST(LLVM_ENUM_ASM_PRINTERS)
860AC_SUBST(LLVM_ENUM_ASM_PARSERS)
861AC_SUBST(LLVM_ENUM_DISASSEMBLERS)
862
863dnl Override the option to use for optimized builds.
864AC_ARG_WITH(optimize-option,
865  AS_HELP_STRING([--with-optimize-option],
866                 [Select the compiler options to use for optimized builds]),,
867                 withval=default)
868AC_MSG_CHECKING([optimization flags])
869case "$withval" in
870  default)
871    case "$llvm_cv_os_type" in
872    FreeBSD) optimize_option=-O2 ;;
873    MingW) optimize_option=-O2 ;;
874    *)     optimize_option=-O3 ;;
875    esac ;;
876  *) optimize_option="$withval" ;;
877esac
878AC_SUBST(OPTIMIZE_OPTION,$optimize_option)
879AC_MSG_RESULT([$optimize_option])
880
881dnl Specify extra build options
882AC_ARG_WITH(extra-options,
883  AS_HELP_STRING([--with-extra-options],
884                 [Specify additional options to compile LLVM with]),,
885                 withval=default)
886case "$withval" in
887  default) EXTRA_OPTIONS= ;;
888  *) EXTRA_OPTIONS=$withval ;;
889esac
890AC_SUBST(EXTRA_OPTIONS,$EXTRA_OPTIONS)
891
892dnl Specify extra linker build options
893AC_ARG_WITH(extra-ld-options,
894  AS_HELP_STRING([--with-extra-ld-options],
895                 [Specify additional options to link LLVM with]),,
896                 withval=default)
897case "$withval" in
898  default) EXTRA_LD_OPTIONS= ;;
899  *) EXTRA_LD_OPTIONS=$withval ;;
900esac
901AC_SUBST(EXTRA_LD_OPTIONS,$EXTRA_LD_OPTIONS)
902
903dnl Allow specific bindings to be specified for building (or not)
904AC_ARG_ENABLE([bindings],AS_HELP_STRING([--enable-bindings],
905    [Build specific language bindings: all,auto,none,{binding-name} (default=auto)]),,
906    enableval=default)
907BINDINGS_TO_BUILD=""
908case "$enableval" in
909  yes | default | auto) BINDINGS_TO_BUILD="auto" ;;
910  all ) BINDINGS_TO_BUILD="ocaml" ;;
911  none | no) BINDINGS_TO_BUILD="" ;;
912  *)for a_binding in `echo $enableval|sed -e 's/,/ /g' ` ; do
913      case "$a_binding" in
914        ocaml) BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD" ;;
915        *) AC_MSG_ERROR([Unrecognized binding $a_binding]) ;;
916      esac
917  done
918  ;;
919esac
920
921dnl Allow the ocaml libdir to be overridden. This could go in a configure
922dnl script for bindings/ocaml/configure, except that its auto value depends on
923dnl OCAMLC, which is found here to support tests.
924AC_ARG_WITH([ocaml-libdir],
925  [AS_HELP_STRING([--with-ocaml-libdir],
926    [Specify install location for ocaml bindings (default is stdlib)])],
927  [],
928  [withval=auto])
929case "$withval" in
930  auto) with_ocaml_libdir="$withval" ;;
931  /* | [[A-Za-z]]:[[\\/]]*) with_ocaml_libdir="$withval" ;;
932  *) AC_MSG_ERROR([Invalid path for --with-ocaml-libdir. Provide full path]) ;;
933esac
934
935AC_ARG_WITH(clang-srcdir,
936  AS_HELP_STRING([--with-clang-srcdir],
937    [Directory to the out-of-tree Clang source]),,
938    withval="-")
939case "$withval" in
940  -) clang_src_root="" ;;
941  /* | [[A-Za-z]]:[[\\/]]*) clang_src_root="$withval" ;;
942  *) clang_src_root="$ac_pwd/$withval" ;;
943esac
944AC_SUBST(CLANG_SRC_ROOT,[$clang_src_root])
945
946AC_ARG_WITH(clang-resource-dir,
947  AS_HELP_STRING([--with-clang-resource-dir],
948    [Relative directory from the Clang binary for resource files]),,
949    withval="")
950AC_DEFINE_UNQUOTED(CLANG_RESOURCE_DIR,"$withval",
951                   [Relative directory for resource files])
952
953AC_ARG_WITH(c-include-dirs,
954  AS_HELP_STRING([--with-c-include-dirs],
955    [Colon separated list of directories clang will search for headers]),,
956    withval="")
957AC_DEFINE_UNQUOTED(C_INCLUDE_DIRS,"$withval",
958                   [Directories clang will search for headers])
959
960# Clang normally uses the system c++ headers and libraries. With this option,
961# clang will use the ones provided by a gcc installation instead. This option should
962# be passed the same value that was used with --prefix when configuring gcc.
963AC_ARG_WITH(gcc-toolchain,
964  AS_HELP_STRING([--with-gcc-toolchain],
965    [Directory where gcc is installed.]),,
966    withval="")
967AC_DEFINE_UNQUOTED(GCC_INSTALL_PREFIX,"$withval",
968                   [Directory where gcc is installed.])
969
970AC_ARG_WITH(default-sysroot,
971  AS_HELP_STRING([--with-default-sysroot],
972    [Add --sysroot=<path> to all compiler invocations.]),,
973    withval="")
974AC_DEFINE_UNQUOTED(DEFAULT_SYSROOT,"$withval",
975                   [Default <path> to all compiler invocations for --sysroot=<path>.])
976
977dnl Allow linking of LLVM with GPLv3 binutils code.
978AC_ARG_WITH(binutils-include,
979  AS_HELP_STRING([--with-binutils-include],
980    [Specify path to binutils/include/ containing plugin-api.h file for gold plugin.]),,
981  withval=default)
982case "$withval" in
983  default) WITH_BINUTILS_INCDIR=default ;;
984  /* | [[A-Za-z]]:[[\\/]]*)      WITH_BINUTILS_INCDIR=$withval ;;
985  *) AC_MSG_ERROR([Invalid path for --with-binutils-include. Provide full path]) ;;
986esac
987if test "x$WITH_BINUTILS_INCDIR" != xdefault ; then
988  AC_SUBST(BINUTILS_INCDIR,$WITH_BINUTILS_INCDIR)
989  if test ! -f "$WITH_BINUTILS_INCDIR/plugin-api.h"; then
990     echo "$WITH_BINUTILS_INCDIR/plugin-api.h"
991     AC_MSG_ERROR([Invalid path to directory containing plugin-api.h.]);
992  fi
993fi
994
995dnl Specify the URL where bug reports should be submitted.
996AC_ARG_WITH(bug-report-url,
997  AS_HELP_STRING([--with-bug-report-url],
998    [Specify the URL where bug reports should be submitted (default=http://llvm.org/bugs/)]),,
999    withval="http://llvm.org/bugs/")
1000AC_DEFINE_UNQUOTED(BUG_REPORT_URL,"$withval",
1001                   [Bug report URL.])
1002
1003dnl --enable-libffi : check whether the user wants to turn off libffi:
1004AC_ARG_ENABLE(libffi,AS_HELP_STRING(
1005  --enable-libffi,[Check for the presence of libffi (default is NO)]),
1006  [case "$enableval" in
1007    yes) llvm_cv_enable_libffi="yes" ;;
1008    no)  llvm_cv_enable_libffi="no"  ;;
1009    *) AC_MSG_ERROR([Invalid setting for --enable-libffi. Use "yes" or "no"]) ;;
1010  esac],
1011  llvm_cv_enable_libffi=no)
1012
1013AC_ARG_WITH(internal-prefix,
1014  AS_HELP_STRING([--with-internal-prefix],
1015    [Installation directory for internal files]),,
1016    withval="")
1017AC_SUBST(INTERNAL_PREFIX,[$withval])
1018
1019dnl===-----------------------------------------------------------------------===
1020dnl===
1021dnl=== SECTION 4: Check for programs we need and that they are the right version
1022dnl===
1023dnl===-----------------------------------------------------------------------===
1024
1025AC_PROG_NM
1026AC_SUBST(NM)
1027
1028dnl Check for the tools that the makefiles require
1029AC_CHECK_GNU_MAKE
1030AC_PROG_LN_S
1031AC_PATH_PROG(CMP, [cmp], [cmp])
1032AC_PATH_PROG(CP, [cp], [cp])
1033AC_PATH_PROG(DATE, [date], [date])
1034AC_PATH_PROG(FIND, [find], [find])
1035AC_PATH_PROG(GREP, [grep], [grep])
1036AC_PATH_PROG(MKDIR,[mkdir],[mkdir])
1037AC_PATH_PROG(MV,   [mv],   [mv])
1038AC_PROG_RANLIB
1039AC_CHECK_TOOL(AR, ar, false)
1040AC_PATH_PROG(RM,   [rm],   [rm])
1041AC_PATH_PROG(SED,  [sed],  [sed])
1042AC_PATH_PROG(TAR,  [tar],  [gtar])
1043AC_PATH_PROG(BINPWD,[pwd],  [pwd])
1044
1045dnl Looking for misc. graph plotting software
1046AC_PATH_PROG(GRAPHVIZ, [Graphviz], [echo Graphviz])
1047if test "$GRAPHVIZ" != "echo Graphviz" ; then
1048  AC_DEFINE([HAVE_GRAPHVIZ],[1],[Define if the Graphviz program is available])
1049  dnl If we're targeting for mingw we should emit windows paths, not msys
1050  if test "$llvm_cv_os_type" = "MingW" ; then
1051    GRAPHVIZ=`echo $GRAPHVIZ | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1052  fi
1053  AC_DEFINE_UNQUOTED([LLVM_PATH_GRAPHVIZ],"$GRAPHVIZ${EXEEXT}",
1054   [Define to path to Graphviz program if found or 'echo Graphviz' otherwise])
1055fi
1056AC_PATH_PROG(DOT, [dot], [echo dot])
1057if test "$DOT" != "echo dot" ; then
1058  AC_DEFINE([HAVE_DOT],[1],[Define if the dot program is available])
1059  dnl If we're targeting for mingw we should emit windows paths, not msys
1060  if test "$llvm_cv_os_type" = "MingW" ; then
1061    DOT=`echo $DOT | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1062  fi
1063  AC_DEFINE_UNQUOTED([LLVM_PATH_DOT],"$DOT${EXEEXT}",
1064   [Define to path to dot program if found or 'echo dot' otherwise])
1065fi
1066AC_PATH_PROG(FDP, [fdp], [echo fdp])
1067if test "$FDP" != "echo fdp" ; then
1068  AC_DEFINE([HAVE_FDP],[1],[Define if the neat program is available])
1069  dnl If we're targeting for mingw we should emit windows paths, not msys
1070  if test "$llvm_cv_os_type" = "MingW" ; then
1071    FDP=`echo $FDP | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1072  fi
1073  AC_DEFINE_UNQUOTED([LLVM_PATH_FDP],"$FDP${EXEEXT}",
1074   [Define to path to fdp program if found or 'echo fdp' otherwise])
1075fi
1076AC_PATH_PROG(NEATO, [neato], [echo neato])
1077if test "$NEATO" != "echo neato" ; then
1078  AC_DEFINE([HAVE_NEATO],[1],[Define if the neat program is available])
1079  dnl If we're targeting for mingw we should emit windows paths, not msys
1080  if test "$llvm_cv_os_type" = "MingW" ; then
1081    NEATO=`echo $NEATO | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1082  fi
1083  AC_DEFINE_UNQUOTED([LLVM_PATH_NEATO],"$NEATO${EXEEXT}",
1084   [Define to path to neato program if found or 'echo neato' otherwise])
1085fi
1086AC_PATH_PROG(TWOPI, [twopi], [echo twopi])
1087if test "$TWOPI" != "echo twopi" ; then
1088  AC_DEFINE([HAVE_TWOPI],[1],[Define if the neat program is available])
1089  dnl If we're targeting for mingw we should emit windows paths, not msys
1090  if test "$llvm_cv_os_type" = "MingW" ; then
1091    TWOPI=`echo $TWOPI | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1092  fi
1093  AC_DEFINE_UNQUOTED([LLVM_PATH_TWOPI],"$TWOPI${EXEEXT}",
1094   [Define to path to twopi program if found or 'echo twopi' otherwise])
1095fi
1096AC_PATH_PROG(CIRCO, [circo], [echo circo])
1097if test "$CIRCO" != "echo circo" ; then
1098  AC_DEFINE([HAVE_CIRCO],[1],[Define if the neat program is available])
1099  dnl If we're targeting for mingw we should emit windows paths, not msys
1100  if test "$llvm_cv_os_type" = "MingW" ; then
1101    CIRCO=`echo $CIRCO | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1102  fi
1103  AC_DEFINE_UNQUOTED([LLVM_PATH_CIRCO],"$CIRCO${EXEEXT}",
1104   [Define to path to circo program if found or 'echo circo' otherwise])
1105fi
1106AC_PATH_PROGS(GV, [gv gsview32], [echo gv])
1107if test "$GV" != "echo gv" ; then
1108  AC_DEFINE([HAVE_GV],[1],[Define if the gv program is available])
1109  dnl If we're targeting for mingw we should emit windows paths, not msys
1110  if test "$llvm_cv_os_type" = "MingW" ; then
1111    GV=`echo $GV | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1112  fi
1113  AC_DEFINE_UNQUOTED([LLVM_PATH_GV],"$GV${EXEEXT}",
1114   [Define to path to gv program if found or 'echo gv' otherwise])
1115fi
1116AC_PATH_PROG(DOTTY, [dotty], [echo dotty])
1117if test "$DOTTY" != "echo dotty" ; then
1118  AC_DEFINE([HAVE_DOTTY],[1],[Define if the dotty program is available])
1119  dnl If we're targeting for mingw we should emit windows paths, not msys
1120  if test "$llvm_cv_os_type" = "MingW" ; then
1121    DOTTY=`echo $DOTTY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1122  fi
1123  AC_DEFINE_UNQUOTED([LLVM_PATH_DOTTY],"$DOTTY${EXEEXT}",
1124   [Define to path to dotty program if found or 'echo dotty' otherwise])
1125fi
1126AC_PATH_PROG(XDOT_PY, [xdot.py], [echo xdot.py])
1127if test "$XDOT_PY" != "echo xdot.py" ; then
1128  AC_DEFINE([HAVE_XDOT_PY],[1],[Define if the xdot.py program is available])
1129  dnl If we're targeting for mingw we should emit windows paths, not msys
1130  if test "$llvm_cv_os_type" = "MingW" ; then
1131    XDOT_PY=`echo $XDOT_PY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1132  fi
1133  AC_DEFINE_UNQUOTED([LLVM_PATH_XDOT_PY],"$XDOT_PY${EXEEXT}",
1134   [Define to path to xdot.py program if found or 'echo xdot.py' otherwise])
1135fi
1136
1137dnl Find the install program
1138AC_PROG_INSTALL
1139dnl Prepend src dir to install path dir if it's a relative path
1140dnl This is a hack for installs that take place in something other
1141dnl than the top level.
1142case "$INSTALL" in
1143 [[\\/$]]* | ?:[[\\/]]* ) ;;
1144 *)  INSTALL="\\\$(TOPSRCDIR)/$INSTALL" ;;
1145esac
1146
1147dnl Checks for documentation and testing tools that we can do without. If these
1148dnl are not found then they are set to "true" which always succeeds but does
1149dnl nothing. This just lets the build output show that we could have done
1150dnl something if the tool was available.
1151AC_PATH_PROG(BZIP2, [bzip2])
1152AC_PATH_PROG(CAT, [cat])
1153AC_PATH_PROG(DOXYGEN, [doxygen])
1154AC_PATH_PROG(GROFF, [groff])
1155AC_PATH_PROG(GZIPBIN, [gzip])
1156AC_PATH_PROG(PDFROFF, [pdfroff])
1157AC_PATH_PROG(ZIP, [zip])
1158AC_PATH_PROGS(OCAMLC, [ocamlc])
1159AC_PATH_PROGS(OCAMLOPT, [ocamlopt])
1160AC_PATH_PROGS(OCAMLDEP, [ocamldep])
1161AC_PATH_PROGS(OCAMLDOC, [ocamldoc])
1162AC_PATH_PROGS(GAS, [gas as])
1163
1164dnl Get the version of the linker in use.
1165AC_LINK_GET_VERSION
1166
1167dnl Determine whether the linker supports the -R option.
1168AC_LINK_USE_R
1169
1170dnl Determine whether the linker supports the -export-dynamic option.
1171AC_LINK_EXPORT_DYNAMIC
1172
1173dnl Determine whether the linker supports the --version-script option.
1174AC_LINK_VERSION_SCRIPT
1175
1176dnl Check for libtool and the library that has dlopen function (which must come
1177dnl before the AC_PROG_LIBTOOL check in order to enable dlopening libraries with
1178dnl libtool).
1179AC_LIBTOOL_DLOPEN
1180AC_LIB_LTDL
1181
1182AC_MSG_CHECKING([tool compatibility])
1183
1184dnl Ensure that compilation tools are GCC or a GNU compatible compiler such as
1185dnl ICC; we use GCC specific options in the makefiles so the compiler needs
1186dnl to support those options.
1187dnl "icc" emits gcc signatures
1188dnl "icc -no-gcc" emits no gcc signature BUT is still compatible
1189ICC=no
1190IXX=no
1191case $CC in
1192  icc*|icpc*)
1193    ICC=yes
1194    IXX=yes
1195    ;;
1196   *)
1197    ;;
1198esac
1199
1200if test "$GCC" != "yes" && test "$ICC" != "yes"
1201then
1202  AC_MSG_ERROR([gcc|icc required but not found])
1203fi
1204
1205dnl Ensure that compilation tools are compatible with GCC extensions
1206if test "$GXX" != "yes" && test "$IXX" != "yes"
1207then
1208  AC_MSG_ERROR([g++|clang++|icc required but not found])
1209fi
1210
1211dnl Verify that GCC is version 3.0 or higher
1212if test "$GCC" = "yes"
1213then
1214  AC_COMPILE_IFELSE([[#if !defined(__GNUC__) || __GNUC__ < 3
1215#error Unsupported GCC version
1216#endif
1217]], [], [AC_MSG_ERROR([gcc 3.x required, but you have a lower version])])
1218fi
1219
1220dnl Check for GNU Make.  We use its extensions, so don't build without it
1221if test -z "$llvm_cv_gnu_make_command"
1222then
1223  AC_MSG_ERROR([GNU Make required but not found])
1224fi
1225
1226dnl Tool compatibility is okay if we make it here.
1227AC_MSG_RESULT([ok])
1228
1229dnl Check optional compiler flags.
1230AC_MSG_CHECKING([optional compiler flags])
1231CXX_FLAG_CHECK(NO_VARIADIC_MACROS, [-Wno-variadic-macros])
1232CXX_FLAG_CHECK(NO_MISSING_FIELD_INITIALIZERS, [-Wno-missing-field-initializers])
1233CXX_FLAG_CHECK(COVERED_SWITCH_DEFAULT, [-Wcovered-switch-default])
1234AC_MSG_RESULT([$NO_VARIADIC_MACROS $NO_MISSING_FIELD_INITIALIZERS $COVERED_SWITCH_DEFAULT])
1235
1236dnl===-----------------------------------------------------------------------===
1237dnl===
1238dnl=== SECTION 5: Check for libraries
1239dnl===
1240dnl===-----------------------------------------------------------------------===
1241
1242AC_CHECK_LIB(m,sin)
1243if test "$llvm_cv_os_type" = "MingW" ; then
1244  AC_CHECK_LIB(imagehlp, main)
1245  AC_CHECK_LIB(psapi, main)
1246fi
1247
1248dnl dlopen() is required for plugin support.
1249AC_SEARCH_LIBS(dlopen,dl,AC_DEFINE([HAVE_DLOPEN],[1],
1250               [Define if dlopen() is available on this platform.]),
1251               AC_MSG_WARN([dlopen() not found - disabling plugin support]))
1252
1253dnl libffi is optional; used to call external functions from the interpreter
1254if test "$llvm_cv_enable_libffi" = "yes" ; then
1255  AC_SEARCH_LIBS(ffi_call,ffi,AC_DEFINE([HAVE_FFI_CALL],[1],
1256                 [Define if libffi is available on this platform.]),
1257                 AC_MSG_ERROR([libffi not found - configure without --enable-libffi to compile without it]))
1258fi
1259
1260dnl mallinfo is optional; the code can compile (minus features) without it
1261AC_SEARCH_LIBS(mallinfo,malloc,AC_DEFINE([HAVE_MALLINFO],[1],
1262               [Define if mallinfo() is available on this platform.]))
1263
1264dnl pthread locking functions are optional - but llvm will not be thread-safe
1265dnl without locks.
1266if test "$LLVM_ENABLE_THREADS" -eq 1 && test "$ENABLE_PTHREADS" -eq 1 ; then
1267  AC_CHECK_LIB(pthread, pthread_mutex_init)
1268  AC_SEARCH_LIBS(pthread_mutex_lock,pthread,
1269                 AC_DEFINE([HAVE_PTHREAD_MUTEX_LOCK],[1],
1270                           [Have pthread_mutex_lock]))
1271  AC_SEARCH_LIBS(pthread_rwlock_init,pthread,
1272                 AC_DEFINE([HAVE_PTHREAD_RWLOCK_INIT],[1],
1273                 [Have pthread_rwlock_init]))
1274  AC_SEARCH_LIBS(pthread_getspecific,pthread,
1275                 AC_DEFINE([HAVE_PTHREAD_GETSPECIFIC],[1],
1276                 [Have pthread_getspecific]))
1277fi
1278
1279dnl Allow extra x86-disassembler library
1280AC_ARG_WITH(udis86,
1281  AS_HELP_STRING([--with-udis86=<path>],
1282    [Use udis86 external x86 disassembler library]),
1283    [
1284      AC_SUBST(USE_UDIS86, [1])
1285      case "$withval" in
1286        /usr/lib|yes) ;;
1287        *) LDFLAGS="$LDFLAGS -L${withval}" ;;
1288      esac
1289      AC_CHECK_LIB(udis86, ud_init, [], [
1290        echo "Error! You need to have libudis86 around."
1291        exit -1
1292      ])
1293    ],
1294    AC_SUBST(USE_UDIS86, [0]))
1295AC_DEFINE_UNQUOTED([USE_UDIS86],$USE_UDIS86,
1296                   [Define if use udis86 library])
1297
1298dnl Allow OProfile support for JIT output.
1299AC_ARG_WITH(oprofile,
1300  AS_HELP_STRING([--with-oprofile=<prefix>],
1301    [Tell OProfile >= 0.9.4 how to symbolize JIT output]),
1302    [
1303      AC_SUBST(USE_OPROFILE, [1])
1304      case "$withval" in
1305        /usr|yes) llvm_cv_oppath=/usr/lib/oprofile ;;
1306        no) llvm_cv_oppath=
1307            AC_SUBST(USE_OPROFILE, [0]) ;;
1308        *) llvm_cv_oppath="${withval}/lib/oprofile"
1309           CPPFLAGS="-I${withval}/include";;
1310      esac
1311      case $llvm_cv_os_type in
1312        Linux)
1313          if test -n "$llvm_cv_oppath" ; then
1314            LIBS="$LIBS -lopagent -L${llvm_cv_oppath} -Wl,-rpath,${llvm_cv_oppath}"
1315            dnl Work around http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=537744:
1316            dnl libbfd is not included properly in libopagent in some Debian
1317            dnl versions.  If libbfd isn't found at all, we assume opagent works
1318            dnl anyway.
1319            AC_SEARCH_LIBS(bfd_init, bfd, [], [])
1320            AC_SEARCH_LIBS(op_open_agent, opagent, [], [
1321              echo "Error! You need to have libopagent around."
1322              exit -1
1323            ])
1324            AC_CHECK_HEADER([opagent.h], [], [
1325              echo "Error! You need to have opagent.h around."
1326              exit -1
1327              ])
1328          fi ;;
1329        *)
1330          AC_MSG_ERROR([OProfile support is available on Linux only.]) ;;
1331      esac 
1332    ],
1333    [
1334      AC_SUBST(USE_OPROFILE, [0])
1335    ])
1336AC_DEFINE_UNQUOTED([LLVM_USE_OPROFILE],$USE_OPROFILE,
1337                   [Define if we have the oprofile JIT-support library])
1338
1339dnl Enable support for Intel JIT Events API.
1340AC_ARG_WITH(intel-jitevents,
1341  AS_HELP_STRING([--with-intel-jitevents  Notify Intel JIT profiling API of generated code]),
1342    [
1343       case "$withval" in
1344          yes) AC_SUBST(USE_INTEL_JITEVENTS,[1]);;
1345          no)  AC_SUBST(USE_INTEL_JITEVENTS,[0]);;
1346          *) AC_MSG_ERROR([Invalid setting for --with-intel-jitevents. Use "yes" or "no"]);;
1347       esac
1348
1349      case $llvm_cv_os_type in
1350        Linux|Win32|Cygwin|MingW) ;;
1351        *) AC_MSG_ERROR([Intel JIT API support is available on Linux and Windows only.]);;
1352      esac
1353
1354      case "$llvm_cv_target_arch" in
1355        x86|x86_64) ;;
1356        *) AC_MSG_ERROR([Target architecture $llvm_cv_target_arch does not support Intel JIT Events API.]);;
1357      esac
1358    ],
1359    [
1360      AC_SUBST(USE_INTEL_JITEVENTS, [0])
1361    ])
1362AC_DEFINE_UNQUOTED([LLVM_USE_INTEL_JITEVENTS],$USE_INTEL_JITEVENTS,
1363                   [Define if we have the Intel JIT API runtime support library])
1364
1365dnl Check for libxml2
1366dnl Right now we're just checking for the existence, we could also check for a
1367dnl particular version via --version on xml2-config
1368AC_CHECK_PROGS(XML2CONFIG, xml2-config)
1369
1370AC_MSG_CHECKING(for libxml2 includes)
1371if test "x$XML2CONFIG" = "x"; then
1372 AC_MSG_RESULT(xml2-config not found)
1373else
1374 LIBXML2_INC=`$XML2CONFIG --cflags`
1375 AC_MSG_RESULT($LIBXML2_INC)
1376 AC_CHECK_LIB(xml2, xmlReadFile,[AC_DEFINE([CLANG_HAVE_LIBXML],1,[Define if we have libxml2])
1377                                LIBXML2_LIBS="-lxml2"])
1378fi
1379AC_SUBST(LIBXML2_LIBS)
1380AC_SUBST(LIBXML2_INC)
1381
1382dnl===-----------------------------------------------------------------------===
1383dnl===
1384dnl=== SECTION 6: Check for header files
1385dnl===
1386dnl===-----------------------------------------------------------------------===
1387
1388dnl First, use autoconf provided macros for specific headers that we need
1389dnl We don't check for ancient stuff or things that are guaranteed to be there
1390dnl by the C++ standard. We always use the <cfoo> versions of <foo.h> C headers.
1391dnl Generally we're looking for POSIX headers.
1392AC_HEADER_DIRENT
1393AC_HEADER_MMAP_ANONYMOUS
1394AC_HEADER_STAT
1395AC_HEADER_SYS_WAIT
1396AC_HEADER_TIME
1397
1398AC_CHECK_HEADERS([dlfcn.h execinfo.h fcntl.h inttypes.h limits.h link.h])
1399AC_CHECK_HEADERS([malloc.h setjmp.h signal.h stdint.h termios.h unistd.h])
1400AC_CHECK_HEADERS([utime.h windows.h])
1401AC_CHECK_HEADERS([sys/mman.h sys/param.h sys/resource.h sys/time.h sys/uio.h])
1402AC_CHECK_HEADERS([sys/types.h sys/ioctl.h malloc/malloc.h mach/mach.h])
1403AC_CHECK_HEADERS([valgrind/valgrind.h])
1404AC_CHECK_HEADERS([fenv.h])
1405if test "$LLVM_ENABLE_THREADS" -eq 1 && test "$ENABLE_PTHREADS" -eq 1 ; then
1406  AC_CHECK_HEADERS(pthread.h,
1407                   AC_SUBST(HAVE_PTHREAD, 1),
1408                   AC_SUBST(HAVE_PTHREAD, 0))
1409else
1410  AC_SUBST(HAVE_PTHREAD, 0)
1411fi
1412
1413dnl Try to find ffi.h.
1414if test "$llvm_cv_enable_libffi" = "yes" ; then
1415  AC_CHECK_HEADERS([ffi.h ffi/ffi.h])
1416fi
1417
1418dnl Try to find Darwin specific crash reporting libraries.
1419AC_CHECK_HEADERS([CrashReporterClient.h])
1420
1421dnl Try to find Darwin specific crash reporting global.
1422AC_MSG_CHECKING([__crashreporter_info__])
1423AC_LINK_IFELSE(
1424  AC_LANG_SOURCE(
1425    [[extern const char *__crashreporter_info__;
1426      int main() {
1427        __crashreporter_info__ = "test";
1428        return 0;
1429      }
1430    ]]),
1431  AC_MSG_RESULT(yes)
1432  AC_DEFINE(HAVE_CRASHREPORTER_INFO, 1, Can use __crashreporter_info__),
1433  AC_MSG_RESULT(no)
1434  AC_DEFINE(HAVE_CRASHREPORTER_INFO, 0,
1435            Define if __crashreporter_info__ exists.))
1436
1437dnl===-----------------------------------------------------------------------===
1438dnl===
1439dnl=== SECTION 7: Check for types and structures
1440dnl===
1441dnl===-----------------------------------------------------------------------===
1442
1443AC_HUGE_VAL_CHECK
1444AC_TYPE_PID_T
1445AC_TYPE_SIZE_T
1446AC_DEFINE_UNQUOTED([RETSIGTYPE],[void],[Define as the return type of signal handlers (`int' or `void').])
1447AC_STRUCT_TM
1448AC_CHECK_TYPES([int64_t],,AC_MSG_ERROR([Type int64_t required but not found]))
1449AC_CHECK_TYPES([uint64_t],,
1450         AC_CHECK_TYPES([u_int64_t],,
1451         AC_MSG_ERROR([Type uint64_t or u_int64_t required but not found])))
1452
1453dnl===-----------------------------------------------------------------------===
1454dnl===
1455dnl=== SECTION 8: Check for specific functions needed
1456dnl===
1457dnl===-----------------------------------------------------------------------===
1458
1459AC_CHECK_FUNCS([backtrace ceilf floorf roundf rintf nearbyintf getcwd ])
1460AC_CHECK_FUNCS([powf fmodf strtof round ])
1461AC_CHECK_FUNCS([getpagesize getrusage getrlimit setrlimit gettimeofday ])
1462AC_CHECK_FUNCS([isatty mkdtemp mkstemp ])
1463AC_CHECK_FUNCS([mktemp posix_spawn pread realpath sbrk setrlimit strdup ])
1464AC_CHECK_FUNCS([strerror strerror_r setenv arc4random ])
1465AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])
1466AC_CHECK_FUNCS([setjmp longjmp sigsetjmp siglongjmp writev])
1467AC_C_PRINTF_A
1468AC_FUNC_RAND48
1469
1470dnl Check the declaration "Secure API" on Windows environments.
1471AC_CHECK_DECLS([strerror_s])
1472
1473dnl Check symbols in libgcc.a for JIT on Mingw.
1474if test "$llvm_cv_os_type" = "MingW" ; then
1475  AC_CHECK_LIB(gcc,_alloca,AC_DEFINE([HAVE__ALLOCA],[1],[Have host's _alloca]))
1476  AC_CHECK_LIB(gcc,__alloca,AC_DEFINE([HAVE___ALLOCA],[1],[Have host's __alloca]))
1477  AC_CHECK_LIB(gcc,__chkstk,AC_DEFINE([HAVE___CHKSTK],[1],[Have host's __chkstk]))
1478  AC_CHECK_LIB(gcc,___chkstk,AC_DEFINE([HAVE____CHKSTK],[1],[Have host's ___chkstk]))
1479
1480  AC_CHECK_LIB(gcc,__ashldi3,AC_DEFINE([HAVE___ASHLDI3],[1],[Have host's __ashldi3]))
1481  AC_CHECK_LIB(gcc,__ashrdi3,AC_DEFINE([HAVE___ASHRDI3],[1],[Have host's __ashrdi3]))
1482  AC_CHECK_LIB(gcc,__divdi3,AC_DEFINE([HAVE___DIVDI3],[1],[Have host's __divdi3]))
1483  AC_CHECK_LIB(gcc,__fixdfdi,AC_DEFINE([HAVE___FIXDFDI],[1],[Have host's __fixdfdi]))
1484  AC_CHECK_LIB(gcc,__fixsfdi,AC_DEFINE([HAVE___FIXSFDI],[1],[Have host's __fixsfdi]))
1485  AC_CHECK_LIB(gcc,__floatdidf,AC_DEFINE([HAVE___FLOATDIDF],[1],[Have host's __floatdidf]))
1486  AC_CHECK_LIB(gcc,__lshrdi3,AC_DEFINE([HAVE___LSHRDI3],[1],[Have host's __lshrdi3]))
1487  AC_CHECK_LIB(gcc,__moddi3,AC_DEFINE([HAVE___MODDI3],[1],[Have host's __moddi3]))
1488  AC_CHECK_LIB(gcc,__udivdi3,AC_DEFINE([HAVE___UDIVDI3],[1],[Have host's __udivdi3]))
1489  AC_CHECK_LIB(gcc,__umoddi3,AC_DEFINE([HAVE___UMODDI3],[1],[Have host's __umoddi3]))
1490
1491  AC_CHECK_LIB(gcc,__main,AC_DEFINE([HAVE___MAIN],[1],[Have host's __main]))
1492  AC_CHECK_LIB(gcc,__cmpdi2,AC_DEFINE([HAVE___CMPDI2],[1],[Have host's __cmpdi2]))
1493fi
1494
1495dnl Check Win32 API EnumerateLoadedModules.
1496if test "$llvm_cv_os_type" = "MingW" ; then
1497  AC_MSG_CHECKING([whether EnumerateLoadedModules() accepts new decl])
1498  AC_COMPILE_IFELSE([[#include <windows.h>
1499#include <imagehlp.h>
1500extern void foo(PENUMLOADED_MODULES_CALLBACK);
1501extern void foo(BOOL(CALLBACK*)(PCSTR,ULONG_PTR,ULONG,PVOID));]],
1502[
1503  AC_MSG_RESULT([yes])
1504  llvm_cv_win32_elmcb_pcstr="PCSTR"
1505],
1506[
1507  AC_MSG_RESULT([no])
1508  llvm_cv_win32_elmcb_pcstr="PSTR"
1509])
1510  AC_DEFINE_UNQUOTED([WIN32_ELMCB_PCSTR],$llvm_cv_win32_elmcb_pcstr,[Type of 1st arg on ELM Callback])
1511fi
1512
1513dnl Check for variations in the Standard C++ library and STL. These macros are
1514dnl provided by LLVM in the autoconf/m4 directory.
1515AC_FUNC_ISNAN
1516AC_FUNC_ISINF
1517
1518dnl Check for mmap support.We also need to know if /dev/zero is required to
1519dnl be opened for allocating RWX memory.
1520dnl Make sure we aren't attempting to configure for an unknown system
1521if test "$llvm_cv_platform_type" = "Unix" ; then
1522  AC_FUNC_MMAP
1523  AC_FUNC_MMAP_FILE
1524  AC_NEED_DEV_ZERO_FOR_MMAP
1525
1526  if test "$ac_cv_func_mmap_fixed_mapped" = "no"
1527  then
1528    AC_MSG_WARN([mmap() of a fixed address required but not supported])
1529  fi
1530  if test "$ac_cv_func_mmap_file" = "no"
1531  then
1532    AC_MSG_WARN([mmap() of files required but not found])
1533  fi
1534fi
1535
1536dnl atomic builtins are required for threading support.
1537AC_MSG_CHECKING(for GCC atomic builtins)
1538dnl Since we'll be using these atomic builtins in C++ files we should test
1539dnl the C++ compiler.
1540AC_LANG_PUSH([C++])
1541AC_LINK_IFELSE(
1542  AC_LANG_SOURCE(
1543    [[int main() {
1544        volatile unsigned long val = 1;
1545        __sync_synchronize();
1546        __sync_val_compare_and_swap(&val, 1, 0);
1547        __sync_add_and_fetch(&val, 1);
1548        __sync_sub_and_fetch(&val, 1);
1549        return 0;
1550      }
1551    ]]),
1552  AC_LANG_POP([C++])
1553  AC_MSG_RESULT(yes)
1554  AC_DEFINE(LLVM_HAS_ATOMICS, 1, Has gcc/MSVC atomic intrinsics),
1555  AC_MSG_RESULT(no)
1556  AC_DEFINE(LLVM_HAS_ATOMICS, 0, Has gcc/MSVC atomic intrinsics)
1557  AC_MSG_WARN([LLVM will be built thread-unsafe because atomic builtins are missing]))
1558
1559dnl===-----------------------------------------------------------------------===
1560dnl===
1561dnl=== SECTION 9: Additional checks, variables, etc.
1562dnl===
1563dnl===-----------------------------------------------------------------------===
1564
1565dnl Handle 32-bit linux systems running a 64-bit kernel.
1566dnl This has to come after section 4 because it invokes the compiler.
1567if test "$llvm_cv_os_type" = "Linux" -a "$llvm_cv_target_arch" = "x86_64" ; then
1568  AC_IS_LINUX_MIXED
1569  if test "$llvm_cv_linux_mixed" = "yes"; then
1570    llvm_cv_target_arch="x86"
1571    ARCH="x86"
1572  fi
1573fi
1574
1575dnl Check whether __dso_handle is present
1576AC_CHECK_FUNCS([__dso_handle])
1577
1578dnl Propagate the shared library extension that the libltdl checks did to
1579dnl the Makefiles so we can use it there too
1580AC_SUBST(SHLIBEXT,$libltdl_cv_shlibext)
1581
1582dnl Propagate the run-time library path variable that the libltdl
1583dnl checks found to the Makefiles so we can use it there too
1584AC_SUBST(SHLIBPATH_VAR,$libltdl_cv_shlibpath_var)
1585
1586dnl Translate the various configuration directories and other basic
1587dnl information into substitutions that will end up in Makefile.config.in
1588dnl that these configured values can be used by the makefiles
1589if test "${prefix}" = "NONE" ; then
1590  prefix="/usr/local"
1591fi
1592eval LLVM_PREFIX="${prefix}";
1593eval LLVM_BINDIR="${prefix}/bin";
1594eval LLVM_LIBDIR="${prefix}/lib";
1595eval LLVM_DATADIR="${prefix}/share/llvm";
1596eval LLVM_DOCSDIR="${prefix}/share/doc/llvm";
1597eval LLVM_ETCDIR="${prefix}/etc/llvm";
1598eval LLVM_INCLUDEDIR="${prefix}/include";
1599eval LLVM_INFODIR="${prefix}/info";
1600eval LLVM_MANDIR="${prefix}/man";
1601LLVM_CONFIGTIME=`date`
1602AC_SUBST(LLVM_PREFIX)
1603AC_SUBST(LLVM_BINDIR)
1604AC_SUBST(LLVM_LIBDIR)
1605AC_SUBST(LLVM_DATADIR)
1606AC_SUBST(LLVM_DOCSDIR)
1607AC_SUBST(LLVM_ETCDIR)
1608AC_SUBST(LLVM_INCLUDEDIR)
1609AC_SUBST(LLVM_INFODIR)
1610AC_SUBST(LLVM_MANDIR)
1611AC_SUBST(LLVM_CONFIGTIME)
1612
1613dnl Disable embedding timestamps in the build directory, with ENABLE_TIMESTAMPS.
1614if test "${ENABLE_TIMESTAMPS}" = "0"; then
1615  LLVM_CONFIGTIME="(timestamp not enabled)"
1616fi
1617
1618dnl Place the various directories into the config.h file as #defines so that we
1619dnl can know about the installation paths within LLVM.
1620AC_DEFINE_UNQUOTED(LLVM_PREFIX,"$LLVM_PREFIX",
1621                   [Installation prefix directory])
1622AC_DEFINE_UNQUOTED(LLVM_BINDIR, "$LLVM_BINDIR",
1623                   [Installation directory for binary executables])
1624AC_DEFINE_UNQUOTED(LLVM_LIBDIR, "$LLVM_LIBDIR",
1625                   [Installation directory for libraries])
1626AC_DEFINE_UNQUOTED(LLVM_DATADIR, "$LLVM_DATADIR",
1627                   [Installation directory for data files])
1628AC_DEFINE_UNQUOTED(LLVM_DOCSDIR, "$LLVM_DOCSDIR",
1629                   [Installation directory for documentation])
1630AC_DEFINE_UNQUOTED(LLVM_ETCDIR, "$LLVM_ETCDIR",
1631                   [Installation directory for config files])
1632AC_DEFINE_UNQUOTED(LLVM_INCLUDEDIR, "$LLVM_INCLUDEDIR",
1633                   [Installation directory for include files])
1634AC_DEFINE_UNQUOTED(LLVM_INFODIR, "$LLVM_INFODIR",
1635                   [Installation directory for .info files])
1636AC_DEFINE_UNQUOTED(LLVM_MANDIR, "$LLVM_MANDIR",
1637                   [Installation directory for man pages])
1638AC_DEFINE_UNQUOTED(LLVM_CONFIGTIME, "$LLVM_CONFIGTIME",
1639                   [Time at which LLVM was configured])
1640AC_DEFINE_UNQUOTED(LLVM_HOSTTRIPLE, "$host",
1641                   [Host triple LLVM will be executed on])
1642AC_DEFINE_UNQUOTED(LLVM_DEFAULT_TARGET_TRIPLE, "$target",
1643                   [Target triple LLVM will generate code for by default])
1644
1645dnl Determine which bindings to build.
1646if test "$BINDINGS_TO_BUILD" = auto ; then
1647  BINDINGS_TO_BUILD=""
1648  if test "x$OCAMLC" != x -a "x$OCAMLDEP" != x ; then
1649    BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD"
1650  fi
1651fi
1652AC_SUBST(BINDINGS_TO_BUILD,$BINDINGS_TO_BUILD)
1653
1654dnl This isn't really configurey, but it avoids having to repeat the list in
1655dnl other files.
1656AC_SUBST(ALL_BINDINGS,ocaml)
1657
1658dnl Do any work necessary to ensure that bindings have what they need.
1659binding_prereqs_failed=0
1660for a_binding in $BINDINGS_TO_BUILD ; do
1661  case "$a_binding" in
1662  ocaml)
1663    if test "x$OCAMLC" = x ; then
1664      AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlc not found. Try configure OCAMLC=/path/to/ocamlc])
1665      binding_prereqs_failed=1
1666    fi
1667    if test "x$OCAMLDEP" = x ; then
1668      AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamldep not found. Try configure OCAMLDEP=/path/to/ocamldep])
1669      binding_prereqs_failed=1
1670    fi
1671    if test "x$OCAMLOPT" = x ; then
1672      AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlopt not found. Try configure OCAMLOPT=/path/to/ocamlopt])
1673      dnl ocamlopt is optional!
1674    fi
1675    if test "x$with_ocaml_libdir" != xauto ; then
1676      AC_SUBST(OCAML_LIBDIR,$with_ocaml_libdir)
1677    else
1678      ocaml_stdlib="`"$OCAMLC" -where`"
1679      if test "$LLVM_PREFIX" '<' "$ocaml_stdlib" -a "$ocaml_stdlib" '<' "$LLVM_PREFIX~"
1680      then
1681        # ocaml stdlib is beneath our prefix; use stdlib
1682        AC_SUBST(OCAML_LIBDIR,$ocaml_stdlib)
1683      else
1684        # ocaml stdlib is outside our prefix; use libdir/ocaml
1685        AC_SUBST(OCAML_LIBDIR,$LLVM_LIBDIR/ocaml)
1686      fi
1687    fi
1688    ;;
1689  esac
1690done
1691if test "$binding_prereqs_failed" = 1 ; then
1692  AC_MSG_ERROR([Prequisites for bindings not satisfied. Fix them or use configure --disable-bindings.])
1693fi
1694
1695dnl Determine whether the compiler supports -fvisibility-inlines-hidden.
1696AC_CXX_USE_VISIBILITY_INLINES_HIDDEN
1697
1698dnl Determine linker rpath flag
1699if test "$llvm_cv_link_use_r" = "yes" ; then
1700  RPATH="-Wl,-R"
1701else
1702  RPATH="-Wl,-rpath"
1703fi
1704AC_SUBST(RPATH)
1705
1706dnl Determine linker rdynamic flag
1707if test "$llvm_cv_link_use_export_dynamic" = "yes" ; then
1708  RDYNAMIC="-Wl,-export-dynamic"
1709else
1710  RDYNAMIC=""
1711fi
1712AC_SUBST(RDYNAMIC)
1713
1714dnl===-----------------------------------------------------------------------===
1715dnl===
1716dnl=== SECTION 10: Specify the output files and generate it
1717dnl===
1718dnl===-----------------------------------------------------------------------===
1719
1720dnl Configure header files
1721dnl WARNING: dnl If you add or remove any of the following config headers, then
1722dnl you MUST also update Makefile so that the variable FilesToConfig
1723dnl contains the same list of files as AC_CONFIG_HEADERS below. This ensures the
1724dnl files can be updated automatically when their *.in sources change.
1725AC_CONFIG_HEADERS([include/llvm/Config/config.h include/llvm/Config/llvm-config.h])
1726AH_TOP([#ifndef CONFIG_H
1727#define CONFIG_H])
1728AH_BOTTOM([#endif])
1729
1730AC_CONFIG_FILES([include/llvm/Config/Targets.def])
1731AC_CONFIG_FILES([include/llvm/Config/AsmPrinters.def])
1732AC_CONFIG_FILES([include/llvm/Config/AsmParsers.def])
1733AC_CONFIG_FILES([include/llvm/Config/Disassemblers.def])
1734AC_CONFIG_HEADERS([include/llvm/Support/DataTypes.h])
1735
1736dnl Configure the makefile's configuration data
1737AC_CONFIG_FILES([Makefile.config])
1738
1739dnl Configure the RPM spec file for LLVM
1740AC_CONFIG_FILES([llvm.spec])
1741
1742dnl Configure doxygen's configuration file
1743AC_CONFIG_FILES([docs/doxygen.cfg])
1744
1745dnl Configure clang, if present
1746if test "${clang_src_root}" = ""; then
1747  clang_src_root="$srcdir/tools/clang"
1748fi
1749if test -f ${clang_src_root}/README.txt; then
1750  dnl Use variables to stay under 80 columns.
1751  configh="include/clang/Config/config.h"
1752  doxy="docs/doxygen.cfg"
1753  AC_CONFIG_HEADERS([tools/clang/${configh}:${clang_src_root}/${configh}.in])
1754  AC_CONFIG_FILES([tools/clang/${doxy}:${clang_src_root}/${doxy}.in])
1755fi
1756
1757dnl OCaml findlib META file
1758AC_CONFIG_FILES([bindings/ocaml/llvm/META.llvm])
1759
1760dnl Add --program-prefix value to Makefile.rules. Already an ARG variable.
1761test "x$program_prefix" = "xNONE" && program_prefix=""
1762AC_SUBST([program_prefix])
1763
1764
1765dnl Do special configuration of Makefiles
1766AC_CONFIG_COMMANDS([setup],,[llvm_src="${srcdir}"])
1767AC_CONFIG_MAKEFILE(Makefile)
1768AC_CONFIG_MAKEFILE(Makefile.common)
1769AC_CONFIG_MAKEFILE(examples/Makefile)
1770AC_CONFIG_MAKEFILE(lib/Makefile)
1771AC_CONFIG_MAKEFILE(runtime/Makefile)
1772AC_CONFIG_MAKEFILE(test/Makefile)
1773AC_CONFIG_MAKEFILE(test/Makefile.tests)
1774AC_CONFIG_MAKEFILE(unittests/Makefile)
1775AC_CONFIG_MAKEFILE(tools/Makefile)
1776AC_CONFIG_MAKEFILE(utils/Makefile)
1777AC_CONFIG_MAKEFILE(projects/Makefile)
1778AC_CONFIG_MAKEFILE(bindings/Makefile)
1779AC_CONFIG_MAKEFILE(bindings/ocaml/Makefile.ocaml)
1780
1781dnl Finally, crank out the output
1782AC_OUTPUT
1783