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