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