Add NativeClient operating system support.
[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 email address for reporting bugs.
34 AC_INIT([[llvm]],[[3.0svn]],[llvmbugs@cs.uiuc.edu])
35
36 dnl Provide a copyright substitution and ensure the copyright notice is included
37 dnl in the output of --version option of the generated configure script.
38 AC_SUBST(LLVM_COPYRIGHT,["Copyright (c) 2003-2011 University of Illinois at Urbana-Champaign."])
39 AC_COPYRIGHT([Copyright (c) 2003-2011 University of Illinois at Urbana-Champaign.])
40
41 dnl Indicate that we require autoconf 2.59 or later. Ths is needed because we
42 dnl use some autoconf macros only available in 2.59.
43 AC_PREREQ(2.59)
44
45 dnl Verify that the source directory is valid. This makes sure that we are
46 dnl configuring LLVM and not some other package (it validates --srcdir argument)
47 AC_CONFIG_SRCDIR([lib/VMCore/Module.cpp])
48
49 dnl Place all of the extra autoconf files into the config subdirectory. Tell
50 dnl various tools where the m4 autoconf macros are.
51 AC_CONFIG_AUX_DIR([autoconf])
52
53 dnl Quit if the source directory has already been configured.
54 dnl NOTE: This relies upon undocumented autoconf behavior.
55 if test ${srcdir} != "." ; then
56   if test -f ${srcdir}/include/llvm/Config/config.h ; then
57     AC_MSG_ERROR([Already configured in ${srcdir}])
58   fi
59 fi
60
61 dnl Configure all of the projects present in our source tree. While we could
62 dnl just AC_CONFIG_SUBDIRS on the set of directories in projects that have a
63 dnl configure script, that usage of the AC_CONFIG_SUBDIRS macro is deprecated.
64 dnl Instead we match on the known projects.
65
66 dnl
67 dnl One tricky part of doing this is that some projects depend upon other
68 dnl projects.  For example, several projects rely upon the LLVM test suite.
69 dnl We want to configure those projects first so that their object trees are
70 dnl created before running the configure scripts of projects that depend upon
71 dnl them.
72 dnl
73
74 dnl Several projects use llvm-gcc, so configure that first
75 if test -d ${srcdir}/projects/llvm-gcc ; then
76   AC_CONFIG_SUBDIRS([projects/llvm-gcc])
77 fi
78
79 dnl Several projects use the LLVM test suite, so configure it next.
80 if test -d ${srcdir}/projects/test-suite ; then
81   AC_CONFIG_SUBDIRS([projects/test-suite])
82 fi
83
84 dnl llvm-test is the old name of the test-suite, kept here for backwards
85 dnl compatibility
86 if test -d ${srcdir}/projects/llvm-test ; then
87   AC_CONFIG_SUBDIRS([projects/llvm-test])
88 fi
89
90 dnl Some projects use poolalloc; configure that next
91 if test -d ${srcdir}/projects/poolalloc ; then
92   AC_CONFIG_SUBDIRS([projects/poolalloc])
93 fi
94
95 if test -d ${srcdir}/projects/llvm-poolalloc ; then
96   AC_CONFIG_SUBDIRS([projects/llvm-poolalloc])
97 fi
98
99 dnl Check for all other projects
100 for i in `ls ${srcdir}/projects`
101 do
102   if test -d ${srcdir}/projects/${i} ; then
103     case ${i} in
104       sample)       AC_CONFIG_SUBDIRS([projects/sample])    ;;
105       privbracket)  AC_CONFIG_SUBDIRS([projects/privbracket]) ;;
106       llvm-stacker) AC_CONFIG_SUBDIRS([projects/llvm-stacker]) ;;
107       llvm-reopt)   AC_CONFIG_SUBDIRS([projects/llvm-reopt]);;
108       llvm-java)    AC_CONFIG_SUBDIRS([projects/llvm-java]) ;;
109       llvm-tv)      AC_CONFIG_SUBDIRS([projects/llvm-tv])   ;;
110       safecode)     AC_CONFIG_SUBDIRS([projects/safecode]) ;;
111       llvm-kernel)  AC_CONFIG_SUBDIRS([projects/llvm-kernel]) ;;
112       llvm-gcc)       ;;
113       test-suite)     ;;
114       llvm-test)      ;;
115       poolalloc)      ;;
116       llvm-poolalloc) ;;
117       *)
118         AC_MSG_WARN([Unknown project (${i}) won't be configured automatically])
119         ;;
120     esac
121   fi
122 done
123
124 dnl Disable the build of polly, even if it is checked out into tools/polly.
125 AC_ARG_ENABLE(polly,
126               AS_HELP_STRING([--enable-polly],
127                              [Use polly if available (default is YES)]),,
128                              enableval=default)
129 case "$enableval" in
130   yes) AC_SUBST(ENABLE_POLLY,[1]) ;;
131   no)  AC_SUBST(ENABLE_POLLY,[0]) ;;
132   default) AC_SUBST(ENABLE_POLLY,[1]) ;;
133   *) AC_MSG_ERROR([Invalid setting for --enable-polly. Use "yes" or "no"]) ;;
134 esac
135
136
137 dnl Check if polly is checked out into tools/polly and configure it if
138 dnl available.
139 if (test -d ${srcdir}/tools/polly) && (test $ENABLE_POLLY -eq 1) ; then
140   AC_SUBST(LLVM_HAS_POLLY,1)
141   AC_CONFIG_SUBDIRS([tools/polly])
142 fi
143
144 dnl===-----------------------------------------------------------------------===
145 dnl===
146 dnl=== SECTION 2: Architecture, target, and host checks
147 dnl===
148 dnl===-----------------------------------------------------------------------===
149
150 dnl Check the target for which we're compiling and the host that will do the
151 dnl compilations. This will tell us which LLVM compiler will be used for
152 dnl compiling SSA into object code. This needs to be done early because
153 dnl following tests depend on it.
154 AC_CANONICAL_TARGET
155
156 dnl Determine the platform type and cache its value. This helps us configure
157 dnl the System library to the correct build platform.
158 AC_CACHE_CHECK([type of operating system we're going to host on],
159                [llvm_cv_os_type],
160 [case $host in
161   *-*-aix*)
162     llvm_cv_link_all_option="-Wl,--whole-archive"
163     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
164     llvm_cv_os_type="AIX"
165     llvm_cv_platform_type="Unix" ;;
166   *-*-irix*)
167     llvm_cv_link_all_option="-Wl,--whole-archive"
168     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
169     llvm_cv_os_type="IRIX"
170     llvm_cv_platform_type="Unix" ;;
171   *-*-cygwin*)
172     llvm_cv_link_all_option="-Wl,--whole-archive"
173     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
174     llvm_cv_os_type="Cygwin"
175     llvm_cv_platform_type="Unix" ;;
176   *-*-darwin*)
177     llvm_cv_link_all_option="-Wl,-all_load"
178     llvm_cv_no_link_all_option="-Wl,-noall_load"
179     llvm_cv_os_type="Darwin"
180     llvm_cv_platform_type="Unix" ;;
181   *-*-minix*)
182     llvm_cv_link_all_option="-Wl,-all_load"
183     llvm_cv_no_link_all_option="-Wl,-noall_load"
184     llvm_cv_os_type="Minix"
185     llvm_cv_platform_type="Unix" ;;
186   *-*-freebsd*)
187     llvm_cv_link_all_option="-Wl,--whole-archive"
188     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
189     llvm_cv_os_type="FreeBSD"
190     llvm_cv_platform_type="Unix" ;;
191   *-*-openbsd*)
192     llvm_cv_link_all_option="-Wl,--whole-archive"
193     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
194     llvm_cv_os_type="OpenBSD"
195     llvm_cv_platform_type="Unix" ;;
196   *-*-netbsd*)
197     llvm_cv_link_all_option="-Wl,--whole-archive"
198     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
199     llvm_cv_os_type="NetBSD"
200     llvm_cv_platform_type="Unix" ;;
201   *-*-dragonfly*)
202     llvm_cv_link_all_option="-Wl,--whole-archive"
203     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
204     llvm_cv_os_type="DragonFly"
205     llvm_cv_platform_type="Unix" ;;
206   *-*-hpux*)
207     llvm_cv_link_all_option="-Wl,--whole-archive"
208     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
209     llvm_cv_os_type="HP-UX"
210     llvm_cv_platform_type="Unix" ;;
211   *-*-interix*)
212     llvm_cv_link_all_option="-Wl,--whole-archive"
213     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
214     llvm_cv_os_type="Interix"
215     llvm_cv_platform_type="Unix" ;;
216   *-*-linux*)
217     llvm_cv_link_all_option="-Wl,--whole-archive"
218     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
219     llvm_cv_os_type="Linux"
220     llvm_cv_platform_type="Unix" ;;
221   *-*-solaris*)
222     llvm_cv_link_all_option="-Wl,-z,allextract"
223     llvm_cv_no_link_all_option="-Wl,-z,defaultextract"
224     llvm_cv_os_type="SunOS"
225     llvm_cv_platform_type="Unix" ;;
226   *-*-auroraux*)
227     llvm_cv_link_all_option="-Wl,-z,allextract"
228     llvm_cv_link_all_option="-Wl,-z,defaultextract"
229     llvm_cv_os_type="AuroraUX"
230     llvm_cv_platform_type="Unix" ;;
231   *-*-win32*)
232     llvm_cv_link_all_option="-Wl,--whole-archive"
233     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
234     llvm_cv_os_type="Win32"
235     llvm_cv_platform_type="Win32" ;;
236   *-*-mingw*)
237     llvm_cv_link_all_option="-Wl,--whole-archive"
238     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
239     llvm_cv_os_type="MingW"
240     llvm_cv_platform_type="Win32" ;;
241   *-*-haiku*)
242     llvm_cv_link_all_option="-Wl,--whole-archive"
243     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
244     llvm_cv_os_type="Haiku"
245     llvm_cv_platform_type="Unix" ;;
246   *-unknown-eabi*)
247     llvm_cv_link_all_option="-Wl,--whole-archive"
248     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
249     llvm_cv_os_type="Freestanding"
250     llvm_cv_platform_type="Unix" ;;
251   *-unknown-elf*)
252     llvm_cv_link_all_option="-Wl,--whole-archive"
253     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
254     llvm_cv_os_type="Freestanding"
255     llvm_cv_platform_type="Unix" ;;
256   *)
257     llvm_cv_link_all_option=""
258     llvm_cv_no_link_all_option=""
259     llvm_cv_os_type="Unknown"
260     llvm_cv_platform_type="Unknown" ;;
261 esac])
262
263 AC_CACHE_CHECK([type of operating system we're going to target],
264                [llvm_cv_target_os_type],
265 [case $target in
266   *-*-aix*)
267     llvm_cv_target_os_type="AIX" ;;
268   *-*-irix*)
269     llvm_cv_target_os_type="IRIX" ;;
270   *-*-cygwin*)
271     llvm_cv_target_os_type="Cygwin" ;;
272   *-*-darwin*)
273     llvm_cv_target_os_type="Darwin" ;;
274   *-*-minix*)
275     llvm_cv_target_os_type="Minix" ;;
276   *-*-freebsd*)
277     llvm_cv_target_os_type="FreeBSD" ;;
278   *-*-openbsd*)
279     llvm_cv_target_os_type="OpenBSD" ;;
280   *-*-netbsd*)
281     llvm_cv_target_os_type="NetBSD" ;;
282   *-*-dragonfly*)
283     llvm_cv_target_os_type="DragonFly" ;;
284   *-*-hpux*)
285     llvm_cv_target_os_type="HP-UX" ;;
286   *-*-interix*)
287     llvm_cv_target_os_type="Interix" ;;
288   *-*-linux*)
289     llvm_cv_target_os_type="Linux" ;;
290   *-*-solaris*)
291     llvm_cv_target_os_type="SunOS" ;;
292   *-*-auroraux*)
293     llvm_cv_target_os_type="AuroraUX" ;;
294   *-*-win32*)
295     llvm_cv_target_os_type="Win32" ;;
296   *-*-mingw*)
297     llvm_cv_target_os_type="MingW" ;;
298   *-*-haiku*)
299     llvm_cv_target_os_type="Haiku" ;;
300   *-*-rtems*)
301     llvm_cv_target_os_type="RTEMS" ;;
302   *-*-nacl*)
303     llvm_cv_target_os_type="NativeClient" ;;
304   *-unknown-eabi*)
305     llvm_cv_target_os_type="Freestanding" ;;
306   *)
307     llvm_cv_target_os_type="Unknown" ;;
308 esac])
309
310 dnl Make sure we aren't attempting to configure for an unknown system
311 if test "$llvm_cv_os_type" = "Unknown" ; then
312   AC_MSG_ERROR([Operating system is unknown, configure can't continue])
313 fi
314
315 dnl Set the "OS" Makefile variable based on the platform type so the
316 dnl makefile can configure itself to specific build hosts
317 AC_SUBST(OS,$llvm_cv_os_type)
318 AC_SUBST(HOST_OS,$llvm_cv_os_type)
319 AC_SUBST(TARGET_OS,$llvm_cv_target_os_type)
320
321 dnl Set the LINKALL and NOLINKALL Makefile variables based on the platform
322 AC_SUBST(LINKALL,$llvm_cv_link_all_option)
323 AC_SUBST(NOLINKALL,$llvm_cv_no_link_all_option)
324
325 dnl Set the "LLVM_ON_*" variables based on llvm_cv_platform_type
326 dnl This is used by lib/Support to determine the basic kind of implementation
327 dnl to use.
328 case $llvm_cv_platform_type in
329   Unix)
330     AC_DEFINE([LLVM_ON_UNIX],[1],[Define if this is Unixish platform])
331     AC_SUBST(LLVM_ON_UNIX,[1])
332     AC_SUBST(LLVM_ON_WIN32,[0])
333     ;;
334   Win32)
335     AC_DEFINE([LLVM_ON_WIN32],[1],[Define if this is Win32ish platform])
336     AC_SUBST(LLVM_ON_UNIX,[0])
337     AC_SUBST(LLVM_ON_WIN32,[1])
338     ;;
339 esac
340
341 dnl Determine what our target architecture is and configure accordingly.
342 dnl This will allow Makefiles to make a distinction between the hardware and
343 dnl the OS.
344 AC_CACHE_CHECK([target architecture],[llvm_cv_target_arch],
345 [case $target in
346   i?86-*)                 llvm_cv_target_arch="x86" ;;
347   amd64-* | x86_64-*)     llvm_cv_target_arch="x86_64" ;;
348   sparc*-*)               llvm_cv_target_arch="Sparc" ;;
349   powerpc*-*)             llvm_cv_target_arch="PowerPC" ;;
350   alpha*-*)               llvm_cv_target_arch="Alpha" ;;
351   arm*-*)                 llvm_cv_target_arch="ARM" ;;
352   mips-*)                 llvm_cv_target_arch="Mips" ;;
353   xcore-*)                llvm_cv_target_arch="XCore" ;;
354   msp430-*)               llvm_cv_target_arch="MSP430" ;;
355   s390x-*)                llvm_cv_target_arch="SystemZ" ;;
356   bfin-*)                 llvm_cv_target_arch="Blackfin" ;;
357   mblaze-*)               llvm_cv_target_arch="MBlaze" ;;
358   ptx-*)                  llvm_cv_target_arch="PTX" ;;
359   *)                      llvm_cv_target_arch="Unknown" ;;
360 esac])
361
362 if test "$llvm_cv_target_arch" = "Unknown" ; then
363   AC_MSG_WARN([Configuring LLVM for an unknown target archicture])
364 fi
365
366 # Determine the LLVM native architecture for the target
367 case "$llvm_cv_target_arch" in
368     x86)     LLVM_NATIVE_ARCH="X86" ;;
369     x86_64)  LLVM_NATIVE_ARCH="X86" ;;
370     *)       LLVM_NATIVE_ARCH="$llvm_cv_target_arch" ;;
371 esac
372
373 dnl Define a substitution, ARCH, for the target architecture
374 AC_SUBST(ARCH,$llvm_cv_target_arch)
375
376 dnl Check for the endianness of the target
377 AC_C_BIGENDIAN(AC_SUBST([ENDIAN],[big]),AC_SUBST([ENDIAN],[little]))
378
379 dnl Check for build platform executable suffix if we're crosscompiling
380 if test "$cross_compiling" = yes; then
381   AC_SUBST(LLVM_CROSS_COMPILING, [1])
382   AC_BUILD_EXEEXT
383   ac_build_prefix=${build_alias}-
384   AC_CHECK_PROG(BUILD_CXX, ${ac_build_prefix}g++, ${ac_build_prefix}g++)
385   if test -z "$BUILD_CXX"; then
386      AC_CHECK_PROG(BUILD_CXX, g++, g++)
387      if test -z "$BUILD_CXX"; then
388        AC_CHECK_PROG(BUILD_CXX, c++, c++, , , /usr/ucb/c++)
389      fi
390   fi
391 else
392   AC_SUBST(LLVM_CROSS_COMPILING, [0])
393 fi
394
395 dnl Check to see if there's a .svn or .git directory indicating that this
396 dnl build is being done from a checkout. This sets up several defaults for
397 dnl the command line switches. When we build with a checkout directory,
398 dnl we get a debug with assertions turned on. Without, we assume a source
399 dnl release and we get an optimized build without assertions.
400 dnl See --enable-optimized and --enable-assertions below
401 if test -d ".svn" -o -d "${srcdir}/.svn" -o -d ".git" -o -d "${srcdir}/.git"; then
402   cvsbuild="yes"
403   optimize="no"
404   AC_SUBST(CVSBUILD,[[CVSBUILD=1]])
405 else
406   cvsbuild="no"
407   optimize="yes"
408 fi
409
410 dnl===-----------------------------------------------------------------------===
411 dnl===
412 dnl=== SECTION 3: Command line arguments for the configure script.
413 dnl===
414 dnl===-----------------------------------------------------------------------===
415
416 dnl --enable-optimized : check whether they want to do an optimized build:
417 AC_ARG_ENABLE(optimized, AS_HELP_STRING(
418  --enable-optimized,[Compile with optimizations enabled (default is NO)]),,enableval=$optimize)
419 if test ${enableval} = "no" ; then
420   AC_SUBST(ENABLE_OPTIMIZED,[[]])
421 else
422   AC_SUBST(ENABLE_OPTIMIZED,[[ENABLE_OPTIMIZED=1]])
423 fi
424
425 dnl --enable-profiling : check whether they want to do a profile build:
426 AC_ARG_ENABLE(profiling, AS_HELP_STRING(
427  --enable-profiling,[Compile with profiling enabled (default is NO)]),,enableval="no")
428 if test ${enableval} = "no" ; then
429   AC_SUBST(ENABLE_PROFILING,[[]])
430 else
431   AC_SUBST(ENABLE_PROFILING,[[ENABLE_PROFILING=1]])
432 fi
433
434 dnl --enable-assertions : check whether they want to turn on assertions or not:
435 AC_ARG_ENABLE(assertions,AS_HELP_STRING(
436   --enable-assertions,[Compile with assertion checks enabled (default is YES)]),, enableval="yes")
437 if test ${enableval} = "yes" ; then
438   AC_SUBST(DISABLE_ASSERTIONS,[[]])
439 else
440   AC_SUBST(DISABLE_ASSERTIONS,[[DISABLE_ASSERTIONS=1]])
441 fi
442
443 dnl --enable-expensive-checks : check whether they want to turn on expensive debug checks:
444 AC_ARG_ENABLE(expensive-checks,AS_HELP_STRING(
445   --enable-expensive-checks,[Compile with expensive debug checks enabled (default is NO)]),, enableval="no")
446 if test ${enableval} = "yes" ; then
447   AC_SUBST(ENABLE_EXPENSIVE_CHECKS,[[ENABLE_EXPENSIVE_CHECKS=1]])
448   AC_SUBST(EXPENSIVE_CHECKS,[[yes]])
449 else
450   AC_SUBST(ENABLE_EXPENSIVE_CHECKS,[[]])
451   AC_SUBST(EXPENSIVE_CHECKS,[[no]])
452 fi
453
454 dnl --enable-debug-runtime : should runtime libraries have debug symbols?
455 AC_ARG_ENABLE(debug-runtime,
456    AS_HELP_STRING(--enable-debug-runtime,[Build runtime libs with debug symbols (default is NO)]),,enableval=no)
457 if test ${enableval} = "no" ; then
458   AC_SUBST(DEBUG_RUNTIME,[[]])
459 else
460   AC_SUBST(DEBUG_RUNTIME,[[DEBUG_RUNTIME=1]])
461 fi
462
463 dnl --enable-debug-symbols : should even optimized compiler libraries
464 dnl have debug symbols?
465 AC_ARG_ENABLE(debug-symbols,
466    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)
467 if test ${enableval} = "no" ; then
468   AC_SUBST(DEBUG_SYMBOLS,[[]])
469 else
470   AC_SUBST(DEBUG_SYMBOLS,[[DEBUG_SYMBOLS=1]])
471 fi
472
473 dnl --enable-jit: check whether they want to enable the jit
474 AC_ARG_ENABLE(jit,
475   AS_HELP_STRING(--enable-jit,
476                  [Enable Just In Time Compiling (default is YES)]),,
477   enableval=default)
478 if test ${enableval} = "no"
479 then
480   AC_SUBST(JIT,[[]])
481 else
482   case "$llvm_cv_target_arch" in
483     x86)         AC_SUBST(TARGET_HAS_JIT,1) ;;
484     Sparc)       AC_SUBST(TARGET_HAS_JIT,0) ;;
485     PowerPC)     AC_SUBST(TARGET_HAS_JIT,1) ;;
486     x86_64)      AC_SUBST(TARGET_HAS_JIT,1) ;;
487     Alpha)       AC_SUBST(TARGET_HAS_JIT,0) ;;
488     ARM)         AC_SUBST(TARGET_HAS_JIT,1) ;;
489     Mips)        AC_SUBST(TARGET_HAS_JIT,1) ;;
490     XCore)       AC_SUBST(TARGET_HAS_JIT,0) ;;
491     MSP430)      AC_SUBST(TARGET_HAS_JIT,0) ;;
492     SystemZ)     AC_SUBST(TARGET_HAS_JIT,0) ;;
493     Blackfin)    AC_SUBST(TARGET_HAS_JIT,0) ;;
494     MBlaze)      AC_SUBST(TARGET_HAS_JIT,0) ;;
495     PTX)         AC_SUBST(TARGET_HAS_JIT,0) ;;
496     *)           AC_SUBST(TARGET_HAS_JIT,0) ;;
497   esac
498 fi
499
500 dnl Allow enablement of building and installing docs
501 AC_ARG_ENABLE(docs,
502               AS_HELP_STRING([--enable-docs],
503                              [Build documents (default is YES)]),,
504                              enableval=default)
505 case "$enableval" in
506   yes) AC_SUBST(ENABLE_DOCS,[1]) ;;
507   no)  AC_SUBST(ENABLE_DOCS,[0]) ;;
508   default) AC_SUBST(ENABLE_DOCS,[1]) ;;
509   *) AC_MSG_ERROR([Invalid setting for --enable-docs. Use "yes" or "no"]) ;;
510 esac
511
512 dnl Allow enablement of doxygen generated documentation
513 AC_ARG_ENABLE(doxygen,
514               AS_HELP_STRING([--enable-doxygen],
515                              [Build doxygen documentation (default is NO)]),,
516                              enableval=default)
517 case "$enableval" in
518   yes) AC_SUBST(ENABLE_DOXYGEN,[1]) ;;
519   no)  AC_SUBST(ENABLE_DOXYGEN,[0]) ;;
520   default) AC_SUBST(ENABLE_DOXYGEN,[0]) ;;
521   *) AC_MSG_ERROR([Invalid setting for --enable-doxygen. Use "yes" or "no"]) ;;
522 esac
523
524 dnl Allow disablement of threads
525 AC_ARG_ENABLE(threads,
526               AS_HELP_STRING([--enable-threads],
527                              [Use threads if available (default is YES)]),,
528                              enableval=default)
529 case "$enableval" in
530   yes) AC_SUBST(ENABLE_THREADS,[1]) ;;
531   no)  AC_SUBST(ENABLE_THREADS,[0]) ;;
532   default) AC_SUBST(ENABLE_THREADS,[1]) ;;
533   *) AC_MSG_ERROR([Invalid setting for --enable-threads. Use "yes" or "no"]) ;;
534 esac
535 AC_DEFINE_UNQUOTED([ENABLE_THREADS],$ENABLE_THREADS,[Define if threads enabled])
536
537 dnl Allow disablement of pthread.h
538 AC_ARG_ENABLE(pthreads,
539               AS_HELP_STRING([--enable-pthreads],
540                              [Use pthreads if available (default is YES)]),,
541                              enableval=default)
542 case "$enableval" in
543   yes) AC_SUBST(ENABLE_PTHREADS,[1]) ;;
544   no)  AC_SUBST(ENABLE_PTHREADS,[0]) ;;
545   default) AC_SUBST(ENABLE_PTHREADS,[1]) ;;
546   *) AC_MSG_ERROR([Invalid setting for --enable-pthreads. Use "yes" or "no"]) ;;
547 esac
548
549 dnl Allow building without position independent code
550 AC_ARG_ENABLE(pic,
551   AS_HELP_STRING([--enable-pic],
552                  [Build LLVM with Position Independent Code (default is YES)]),,
553                  enableval=default)
554 case "$enableval" in
555   yes) AC_SUBST(ENABLE_PIC,[1]) ;;
556   no)  AC_SUBST(ENABLE_PIC,[0]) ;;
557   default) AC_SUBST(ENABLE_PIC,[1]) ;;
558   *) AC_MSG_ERROR([Invalid setting for --enable-pic. Use "yes" or "no"]) ;;
559 esac
560 AC_DEFINE_UNQUOTED([ENABLE_PIC],$ENABLE_PIC,
561                    [Define if position independent code is enabled])
562
563 dnl Allow building a shared library and linking tools against it.
564 AC_ARG_ENABLE(shared,
565   AS_HELP_STRING([--enable-shared],
566                  [Build a shared library and link tools against it (default is NO)]),,
567                  enableval=default)
568 case "$enableval" in
569   yes) AC_SUBST(ENABLE_SHARED,[1]) ;;
570   no)  AC_SUBST(ENABLE_SHARED,[0]) ;;
571   default) AC_SUBST(ENABLE_SHARED,[0]) ;;
572   *) AC_MSG_ERROR([Invalid setting for --enable-shared. Use "yes" or "no"]) ;;
573 esac
574
575 dnl Allow libstdc++ is embedded in LLVM.dll.
576 AC_ARG_ENABLE(embed-stdcxx,
577   AS_HELP_STRING([--enable-embed-stdcxx],
578                  [Build a shared library with embedded libstdc++ for Win32 DLL (default is YES)]),,
579                  enableval=default)
580 case "$enableval" in
581   yes) AC_SUBST(ENABLE_EMBED_STDCXX,[1]) ;;
582   no)  AC_SUBST(ENABLE_EMBED_STDCXX,[0]) ;;
583   default) AC_SUBST(ENABLE_EMBED_STDCXX,[1]) ;;
584   *) AC_MSG_ERROR([Invalid setting for --enable-embed-stdcxx. Use "yes" or "no"]) ;;
585 esac
586
587 dnl Enable embedding timestamp information into build.
588 AC_ARG_ENABLE(timestamps,
589   AS_HELP_STRING([--enable-timestamps],
590                  [Enable embedding timestamp information in build (default is YES)]),,
591                  enableval=default)
592 case "$enableval" in
593   yes) AC_SUBST(ENABLE_TIMESTAMPS,[1]) ;;
594   no)  AC_SUBST(ENABLE_TIMESTAMPS,[0]) ;;
595   default) AC_SUBST(ENABLE_TIMESTAMPS,[1]) ;;
596   *) AC_MSG_ERROR([Invalid setting for --enable-timestamps. Use "yes" or "no"]) ;;
597 esac
598 AC_DEFINE_UNQUOTED([ENABLE_TIMESTAMPS],$ENABLE_TIMESTAMPS,
599                    [Define if timestamp information (e.g., __DATE___) is allowed])
600
601 dnl Allow specific targets to be specified for building (or not)
602 TARGETS_TO_BUILD=""
603 AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-targets],
604     [Build specific host targets: all or target1,target2,... Valid targets are:
605      host, x86, x86_64, sparc, powerpc, alpha, arm, mips, spu,
606      xcore, msp430, systemz, blackfin, ptx, cbe, and cpp (default=all)]),,
607     enableval=all)
608 if test "$enableval" = host-only ; then
609   enableval=host
610 fi
611 case "$enableval" in
612   all) TARGETS_TO_BUILD="X86 Sparc PowerPC Alpha ARM Mips CellSPU XCore MSP430 SystemZ Blackfin CBackend CppBackend MBlaze PTX" ;;
613   *)for a_target in `echo $enableval|sed -e 's/,/ /g' ` ; do
614       case "$a_target" in
615         x86)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
616         x86_64)   TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
617         sparc)    TARGETS_TO_BUILD="Sparc $TARGETS_TO_BUILD" ;;
618         powerpc)  TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
619         alpha)    TARGETS_TO_BUILD="Alpha $TARGETS_TO_BUILD" ;;
620         arm)      TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
621         mips)     TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
622         spu)      TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;;
623         xcore)    TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
624         msp430)   TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
625         systemz)  TARGETS_TO_BUILD="SystemZ $TARGETS_TO_BUILD" ;;
626         blackfin) TARGETS_TO_BUILD="Blackfin $TARGETS_TO_BUILD" ;;
627         cbe)      TARGETS_TO_BUILD="CBackend $TARGETS_TO_BUILD" ;;
628         cpp)      TARGETS_TO_BUILD="CppBackend $TARGETS_TO_BUILD" ;;
629         mblaze)   TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
630         ptx)      TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;;
631         host) case "$llvm_cv_target_arch" in
632             x86)         TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
633             x86_64)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
634             Sparc)       TARGETS_TO_BUILD="Sparc $TARGETS_TO_BUILD" ;;
635             PowerPC)     TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
636             Alpha)       TARGETS_TO_BUILD="Alpha $TARGETS_TO_BUILD" ;;
637             ARM)         TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
638             Mips)        TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
639             MBlaze)      TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
640             CellSPU|SPU) TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;;
641             XCore)       TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
642             MSP430)      TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
643             s390x)       TARGETS_TO_BUILD="SystemZ $TARGETS_TO_BUILD" ;;
644             Blackfin)    TARGETS_TO_BUILD="Blackfin $TARGETS_TO_BUILD" ;;
645             PTX)         TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;;
646             *)       AC_MSG_ERROR([Can not set target to build]) ;;
647           esac ;;
648         *) AC_MSG_ERROR([Unrecognized target $a_target]) ;;
649       esac
650   done
651   ;;
652 esac
653 AC_SUBST(TARGETS_TO_BUILD,$TARGETS_TO_BUILD)
654
655 # Determine whether we are building LLVM support for the native architecture.
656 # If so, define LLVM_NATIVE_ARCH to that LLVM target.
657 for a_target in $TARGETS_TO_BUILD; do
658   if test "$a_target" = "$LLVM_NATIVE_ARCH"; then
659     AC_DEFINE_UNQUOTED(LLVM_NATIVE_ARCH, $LLVM_NATIVE_ARCH,
660       [LLVM architecture name for the native architecture, if available])
661     LLVM_NATIVE_TARGET="LLVMInitialize${LLVM_NATIVE_ARCH}Target"
662     LLVM_NATIVE_TARGETINFO="LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo"
663     LLVM_NATIVE_TARGETMC="LLVMInitialize${LLVM_NATIVE_ARCH}TargetMC"
664     LLVM_NATIVE_ASMPRINTER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter"
665     if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/AsmParser/Makefile ; then
666       LLVM_NATIVE_ASMPARSER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmParser"
667     fi
668     AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGET, $LLVM_NATIVE_TARGET,
669       [LLVM name for the native Target init function, if available])
670     AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGETINFO, $LLVM_NATIVE_TARGETINFO,
671       [LLVM name for the native TargetInfo init function, if available])
672     AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGETMC, $LLVM_NATIVE_TARGETMC,
673       [LLVM name for the native target MC init function, if available])
674     AC_DEFINE_UNQUOTED(LLVM_NATIVE_ASMPRINTER, $LLVM_NATIVE_ASMPRINTER,
675       [LLVM name for the native AsmPrinter init function, if available])
676     if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/AsmParser/Makefile ; then
677       AC_DEFINE_UNQUOTED(LLVM_NATIVE_ASMPARSER, $LLVM_NATIVE_ASMPARSER,
678        [LLVM name for the native AsmParser init function, if available])
679     fi
680   fi
681 done
682
683 # Build the LLVM_TARGET and LLVM_... macros for Targets.def and the individual
684 # target feature def files.
685 LLVM_ENUM_TARGETS=""
686 LLVM_ENUM_ASM_PRINTERS=""
687 LLVM_ENUM_ASM_PARSERS=""
688 LLVM_ENUM_DISASSEMBLERS=""
689 for target_to_build in $TARGETS_TO_BUILD; do
690   LLVM_ENUM_TARGETS="LLVM_TARGET($target_to_build) $LLVM_ENUM_TARGETS"
691   if test -f ${srcdir}/lib/Target/${target_to_build}/*AsmPrinter.cpp ; then
692     LLVM_ENUM_ASM_PRINTERS="LLVM_ASM_PRINTER($target_to_build) $LLVM_ENUM_ASM_PRINTERS";
693   fi
694   if test -f ${srcdir}/lib/Target/${target_to_build}/AsmParser/Makefile ; then
695     LLVM_ENUM_ASM_PARSERS="LLVM_ASM_PARSER($target_to_build) $LLVM_ENUM_ASM_PARSERS";
696   fi
697   if test -f ${srcdir}/lib/Target/${target_to_build}/Disassembler/Makefile ; then
698     LLVM_ENUM_DISASSEMBLERS="LLVM_DISASSEMBLER($target_to_build) $LLVM_ENUM_DISASSEMBLERS";
699   fi
700 done
701 AC_SUBST(LLVM_ENUM_TARGETS)
702 AC_SUBST(LLVM_ENUM_ASM_PRINTERS)
703 AC_SUBST(LLVM_ENUM_ASM_PARSERS)
704 AC_SUBST(LLVM_ENUM_DISASSEMBLERS)
705
706 dnl Prevent the CBackend from using printf("%a") for floating point so older
707 dnl C compilers that cannot deal with the 0x0p+0 hex floating point format
708 dnl can still compile the CBE's output
709 AC_ARG_ENABLE([cbe-printf-a],AS_HELP_STRING([--enable-cbe-printf-a],
710   [Enable C Backend output with hex floating point via %a  (default is YES)]),,
711   enableval=default)
712 case "$enableval" in
713   yes) AC_SUBST(ENABLE_CBE_PRINTF_A,[1]) ;;
714   no)  AC_SUBST(ENABLE_CBE_PRINTF_A,[0]) ;;
715   default)  AC_SUBST(ENABLE_CBE_PRINTF_A,[1]) ;;
716   *) AC_MSG_ERROR([Invalid setting for --enable-cbe-printf-a. Use "yes" or "no"]) ;;
717 esac
718 AC_DEFINE_UNQUOTED([ENABLE_CBE_PRINTF_A],$ENABLE_CBE_PRINTF_A,
719                    [Define if CBE is enabled for printf %a output])
720
721 dnl Allow a specific llvm-gcc/llvm-g++ pair to be used with this LLVM config.
722 AC_ARG_WITH(llvmgccdir,
723   AS_HELP_STRING([--with-llvmgccdir],
724     [Specify location of llvm-gcc install dir (default searches PATH)]),,
725     withval=default)
726 case "$withval" in
727   default) WITH_LLVMGCCDIR=default ;;
728   /* | [[A-Za-z]]:[[\\/]]*)      WITH_LLVMGCCDIR=$withval ;;
729   *) AC_MSG_ERROR([Invalid path for --with-llvmgccdir. Provide full path]) ;;
730 esac
731
732 dnl Allow a specific llvm-gcc compiler to be used with this LLVM config.
733 AC_ARG_WITH(llvmgcc,
734   AS_HELP_STRING([--with-llvmgcc],
735     [Specify location of llvm-gcc driver (default searches PATH)]),
736     LLVMGCC=$with_llvmgcc
737       WITH_LLVMGCCDIR="",)
738
739 dnl Allow a specific llvm-g++ compiler to be used with this LLVM config.
740 AC_ARG_WITH(llvmgxx,
741   AS_HELP_STRING([--with-llvmgxx],
742     [Specify location of llvm-g++ driver (default searches PATH)]),
743     LLVMGXX=$with_llvmgxx
744     WITH_LLVMGCCDIR="",)
745
746 if test -n "$LLVMGCC"; then
747    LLVMGCCCOMMAND="$LLVMGCC"
748 fi
749
750 if test -n "$LLVMGXX"; then
751    LLVMGXXCOMMAND="$LLVMGXX"
752 fi
753
754 if test -n "$LLVMGCC" && test -z "$LLVMGXX"; then
755    AC_MSG_ERROR([Invalid llvm-g++. Use --with-llvmgxx when --with-llvmgcc is used]);
756 fi
757
758 if test -n "$LLVMGXX" && test -z "$LLVMGCC"; then
759    AC_MSG_ERROR([Invalid llvm-gcc. Use --with-llvmgcc when --with-llvmgxx is used]);
760 fi
761
762 dnl Allow a specific Clang compiler to be used with this LLVM config.
763 AC_ARG_WITH(clang,
764   AS_HELP_STRING([--with-clang],
765     [Specify location of clang compiler (default is --with-built-clang)]),
766     [],[with_clang=default])
767
768 dnl Enable use of the built Clang.
769 AC_ARG_WITH(built-clang,
770   AS_HELP_STRING([--with-built-clang],
771     [Use the compiled Clang as the LLVM compiler (default=check)]),
772     [],[with_built_clang=check])
773
774 dnl Select the Clang compiler option.
775 dnl
776 dnl If --with-clang is given, always honor that; otherwise honor
777 dnl --with-built-clang, or check if we have the clang sources.
778 AC_MSG_CHECKING([clang compiler])
779 WITH_CLANGPATH=""
780 WITH_BUILT_CLANG=0
781 if test "$with_clang" != "default"; then
782    WITH_CLANGPATH="$with_clang"
783    if ! test -x "$WITH_CLANGPATH"; then
784      AC_MSG_ERROR([invalid --with-clang, path does not specify an executable])
785    fi
786 elif test "$with_built_clang" = "yes"; then
787    WITH_BUILT_CLANG=1
788 elif test "$with_built_clang" = "no"; then
789    WITH_BUILT_CLANG=0
790 else
791    if test "$with_built_clang" != "check"; then
792       AC_MSG_ERROR([invalid value for --with-built-clang.])
793    fi
794
795    if test -f ${srcdir}/tools/clang/README.txt; then
796      WITH_BUILT_CLANG=1
797    fi
798 fi
799
800 if ! test -z "$WITH_CLANGPATH"; then
801    AC_MSG_RESULT([$WITH_CLANGPATH])
802    WITH_CLANGXXPATH=`"$WITH_CLANGPATH" --print-prog-name=clang++`
803 elif test "$WITH_BUILT_CLANG" = "1"; then
804    AC_MSG_RESULT([built])
805 else
806    AC_MSG_RESULT([none])
807 fi
808 AC_SUBST(CLANGPATH,$WITH_CLANGPATH)
809 AC_SUBST(CLANGXXPATH,$WITH_CLANGXXPATH)
810 AC_SUBST(ENABLE_BUILT_CLANG,$WITH_BUILT_CLANG)
811
812 dnl Override the option to use for optimized builds.
813 AC_ARG_WITH(optimize-option,
814   AS_HELP_STRING([--with-optimize-option],
815                  [Select the compiler options to use for optimized builds]),,
816                  withval=default)
817 AC_MSG_CHECKING([optimization flags])
818 case "$withval" in
819   default)
820     case "$llvm_cv_os_type" in
821     FreeBSD) optimize_option=-O2 ;;
822     MingW) optimize_option=-O2 ;;
823     *)     optimize_option=-O3 ;;
824     esac ;;
825   *) optimize_option="$withval" ;;
826 esac
827 AC_SUBST(OPTIMIZE_OPTION,$optimize_option)
828 AC_MSG_RESULT([$optimize_option])
829
830 dnl Specify extra build options
831 AC_ARG_WITH(extra-options,
832   AS_HELP_STRING([--with-extra-options],
833                  [Specify additional options to compile LLVM with]),,
834                  withval=default)
835 case "$withval" in
836   default) EXTRA_OPTIONS= ;;
837   *) EXTRA_OPTIONS=$withval ;;
838 esac
839 AC_SUBST(EXTRA_OPTIONS,$EXTRA_OPTIONS)
840
841 dnl Specify extra linker build options
842 AC_ARG_WITH(extra-ld-options,
843   AS_HELP_STRING([--with-extra-ld-options],
844                  [Specify additional options to link LLVM with]),,
845                  withval=default)
846 case "$withval" in
847   default) EXTRA_LD_OPTIONS= ;;
848   *) EXTRA_LD_OPTIONS=$withval ;;
849 esac
850 AC_SUBST(EXTRA_LD_OPTIONS,$EXTRA_LD_OPTIONS)
851
852 dnl Allow specific bindings to be specified for building (or not)
853 AC_ARG_ENABLE([bindings],AS_HELP_STRING([--enable-bindings],
854     [Build specific language bindings: all,auto,none,{binding-name} (default=auto)]),,
855     enableval=default)
856 BINDINGS_TO_BUILD=""
857 case "$enableval" in
858   yes | default | auto) BINDINGS_TO_BUILD="auto" ;;
859   all ) BINDINGS_TO_BUILD="ocaml" ;;
860   none | no) BINDINGS_TO_BUILD="" ;;
861   *)for a_binding in `echo $enableval|sed -e 's/,/ /g' ` ; do
862       case "$a_binding" in
863         ocaml) BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD" ;;
864         *) AC_MSG_ERROR([Unrecognized binding $a_binding]) ;;
865       esac
866   done
867   ;;
868 esac
869
870 dnl Allow the ocaml libdir to be overridden. This could go in a configure
871 dnl script for bindings/ocaml/configure, except that its auto value depends on
872 dnl OCAMLC, which is found here to support tests.
873 AC_ARG_WITH([ocaml-libdir],
874   [AS_HELP_STRING([--with-ocaml-libdir],
875     [Specify install location for ocaml bindings (default is stdlib)])],
876   [],
877   [withval=auto])
878 case "$withval" in
879   auto) with_ocaml_libdir="$withval" ;;
880   /* | [[A-Za-z]]:[[\\/]]*) with_ocaml_libdir="$withval" ;;
881   *) AC_MSG_ERROR([Invalid path for --with-ocaml-libdir. Provide full path]) ;;
882 esac
883
884 AC_ARG_WITH(clang-resource-dir,
885   AS_HELP_STRING([--with-clang-resource-dir],
886     [Relative directory from the Clang binary for resource files]),,
887     withval="")
888 AC_DEFINE_UNQUOTED(CLANG_RESOURCE_DIR,"$withval",
889                    [Relative directory for resource files])
890
891 AC_ARG_WITH(c-include-dirs,
892   AS_HELP_STRING([--with-c-include-dirs],
893     [Colon separated list of directories clang will search for headers]),,
894     withval="")
895 AC_DEFINE_UNQUOTED(C_INCLUDE_DIRS,"$withval",
896                    [Directories clang will search for headers])
897
898 AC_ARG_WITH(cxx-include-root,
899   AS_HELP_STRING([--with-cxx-include-root],
900     [Directory with the libstdc++ headers.]),,
901     withval="")
902 AC_DEFINE_UNQUOTED(CXX_INCLUDE_ROOT,"$withval",
903                    [Directory with the libstdc++ headers.])
904
905 AC_ARG_WITH(cxx-include-arch,
906   AS_HELP_STRING([--with-cxx-include-arch],
907     [Architecture of the libstdc++ headers.]),,
908     withval="")
909 AC_DEFINE_UNQUOTED(CXX_INCLUDE_ARCH,"$withval",
910                    [Arch the libstdc++ headers.])
911
912 AC_ARG_WITH(cxx-include-32bit-dir,
913   AS_HELP_STRING([--with-cxx-include-32bit-dir],
914     [32 bit multilib dir.]),,
915     withval="")
916 AC_DEFINE_UNQUOTED(CXX_INCLUDE_32BIT_DIR,"$withval",
917                    [32 bit multilib directory.])
918
919 AC_ARG_WITH(cxx-include-64bit-dir,
920   AS_HELP_STRING([--with-cxx-include-64bit-dir],
921     [64 bit multilib directory.]),,
922     withval="")
923 AC_DEFINE_UNQUOTED(CXX_INCLUDE_64BIT_DIR,"$withval",
924                    [64 bit multilib directory.])
925
926 dnl Allow linking of LLVM with GPLv3 binutils code.
927 AC_ARG_WITH(binutils-include,
928   AS_HELP_STRING([--with-binutils-include],
929     [Specify path to binutils/include/ containing plugin-api.h file for gold plugin.]),,
930   withval=default)
931 case "$withval" in
932   default) WITH_BINUTILS_INCDIR=default ;;
933   /* | [[A-Za-z]]:[[\\/]]*)      WITH_BINUTILS_INCDIR=$withval ;;
934   *) AC_MSG_ERROR([Invalid path for --with-binutils-include. Provide full path]) ;;
935 esac
936 if test "x$WITH_BINUTILS_INCDIR" != xdefault ; then
937   AC_SUBST(BINUTILS_INCDIR,$WITH_BINUTILS_INCDIR)
938   if test ! -f "$WITH_BINUTILS_INCDIR/plugin-api.h"; then
939      echo "$WITH_BINUTILS_INCDIR/plugin-api.h"
940      AC_MSG_ERROR([Invalid path to directory containing plugin-api.h.]);
941   fi
942 fi
943
944 dnl Specify the URL where bug reports should be submitted.
945 AC_ARG_WITH(bug-report-url,
946   AS_HELP_STRING([--with-bug-report-url],
947     [Specify the URL where bug reports should be submitted (default=http://llvm.org/bugs/)]),,
948     withval="http://llvm.org/bugs/")
949 AC_DEFINE_UNQUOTED(BUG_REPORT_URL,"$withval",
950                    [Bug report URL.])
951
952 dnl --enable-libffi : check whether the user wants to turn off libffi:
953 AC_ARG_ENABLE(libffi,AS_HELP_STRING(
954   --enable-libffi,[Check for the presence of libffi (default is NO)]),
955   [case "$enableval" in
956     yes) llvm_cv_enable_libffi="yes" ;;
957     no)  llvm_cv_enable_libffi="no"  ;;
958     *) AC_MSG_ERROR([Invalid setting for --enable-libffi. Use "yes" or "no"]) ;;
959   esac],
960   llvm_cv_enable_libffi=no)
961
962 dnl===-----------------------------------------------------------------------===
963 dnl===
964 dnl=== SECTION 4: Check for programs we need and that they are the right version
965 dnl===
966 dnl===-----------------------------------------------------------------------===
967
968 dnl Check for compilation tools
969 AC_PROG_CPP
970 AC_PROG_CC(gcc)
971 AC_PROG_CXX(g++)
972
973 AC_PROG_NM
974 AC_SUBST(NM)
975
976 dnl Check for the tools that the makefiles require
977 AC_CHECK_GNU_MAKE
978 AC_PROG_LN_S
979 AC_PATH_PROG(CMP, [cmp], [cmp])
980 AC_PATH_PROG(CP, [cp], [cp])
981 AC_PATH_PROG(DATE, [date], [date])
982 AC_PATH_PROG(FIND, [find], [find])
983 AC_PATH_PROG(GREP, [grep], [grep])
984 AC_PATH_PROG(MKDIR,[mkdir],[mkdir])
985 AC_PATH_PROG(MV,   [mv],   [mv])
986 AC_PROG_RANLIB
987 AC_CHECK_TOOL(AR, ar, false)
988 AC_PATH_PROG(RM,   [rm],   [rm])
989 AC_PATH_PROG(SED,  [sed],  [sed])
990 AC_PATH_PROG(TAR,  [tar],  [gtar])
991 AC_PATH_PROG(BINPWD,[pwd],  [pwd])
992
993 dnl Looking for misc. graph plotting software
994 AC_PATH_PROG(GRAPHVIZ, [Graphviz], [echo Graphviz])
995 if test "$GRAPHVIZ" != "echo Graphviz" ; then
996   AC_DEFINE([HAVE_GRAPHVIZ],[1],[Define if the Graphviz program is available])
997   dnl If we're targeting for mingw we should emit windows paths, not msys
998   if test "$llvm_cv_os_type" = "MingW" ; then
999     GRAPHVIZ=`echo $GRAPHVIZ | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1000   fi
1001   AC_DEFINE_UNQUOTED([LLVM_PATH_GRAPHVIZ],"$GRAPHVIZ${EXEEXT}",
1002    [Define to path to Graphviz program if found or 'echo Graphviz' otherwise])
1003 fi
1004 AC_PATH_PROG(DOT, [dot], [echo dot])
1005 if test "$DOT" != "echo dot" ; then
1006   AC_DEFINE([HAVE_DOT],[1],[Define if the dot program is available])
1007   dnl If we're targeting for mingw we should emit windows paths, not msys
1008   if test "$llvm_cv_os_type" = "MingW" ; then
1009     DOT=`echo $DOT | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1010   fi
1011   AC_DEFINE_UNQUOTED([LLVM_PATH_DOT],"$DOT${EXEEXT}",
1012    [Define to path to dot program if found or 'echo dot' otherwise])
1013 fi
1014 AC_PATH_PROG(FDP, [fdp], [echo fdp])
1015 if test "$FDP" != "echo fdp" ; then
1016   AC_DEFINE([HAVE_FDP],[1],[Define if the neat program is available])
1017   dnl If we're targeting for mingw we should emit windows paths, not msys
1018   if test "$llvm_cv_os_type" = "MingW" ; then
1019     FDP=`echo $FDP | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1020   fi
1021   AC_DEFINE_UNQUOTED([LLVM_PATH_FDP],"$FDP${EXEEXT}",
1022    [Define to path to fdp program if found or 'echo fdp' otherwise])
1023 fi
1024 AC_PATH_PROG(NEATO, [neato], [echo neato])
1025 if test "$NEATO" != "echo neato" ; then
1026   AC_DEFINE([HAVE_NEATO],[1],[Define if the neat program is available])
1027   dnl If we're targeting for mingw we should emit windows paths, not msys
1028   if test "$llvm_cv_os_type" = "MingW" ; then
1029     NEATO=`echo $NEATO | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1030   fi
1031   AC_DEFINE_UNQUOTED([LLVM_PATH_NEATO],"$NEATO${EXEEXT}",
1032    [Define to path to neato program if found or 'echo neato' otherwise])
1033 fi
1034 AC_PATH_PROG(TWOPI, [twopi], [echo twopi])
1035 if test "$TWOPI" != "echo twopi" ; then
1036   AC_DEFINE([HAVE_TWOPI],[1],[Define if the neat program is available])
1037   dnl If we're targeting for mingw we should emit windows paths, not msys
1038   if test "$llvm_cv_os_type" = "MingW" ; then
1039     TWOPI=`echo $TWOPI | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1040   fi
1041   AC_DEFINE_UNQUOTED([LLVM_PATH_TWOPI],"$TWOPI${EXEEXT}",
1042    [Define to path to twopi program if found or 'echo twopi' otherwise])
1043 fi
1044 AC_PATH_PROG(CIRCO, [circo], [echo circo])
1045 if test "$CIRCO" != "echo circo" ; then
1046   AC_DEFINE([HAVE_CIRCO],[1],[Define if the neat program is available])
1047   dnl If we're targeting for mingw we should emit windows paths, not msys
1048   if test "$llvm_cv_os_type" = "MingW" ; then
1049     CIRCO=`echo $CIRCO | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1050   fi
1051   AC_DEFINE_UNQUOTED([LLVM_PATH_CIRCO],"$CIRCO${EXEEXT}",
1052    [Define to path to circo program if found or 'echo circo' otherwise])
1053 fi
1054 AC_PATH_PROGS(GV, [gv gsview32], [echo gv])
1055 if test "$GV" != "echo gv" ; then
1056   AC_DEFINE([HAVE_GV],[1],[Define if the gv program is available])
1057   dnl If we're targeting for mingw we should emit windows paths, not msys
1058   if test "$llvm_cv_os_type" = "MingW" ; then
1059     GV=`echo $GV | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1060   fi
1061   AC_DEFINE_UNQUOTED([LLVM_PATH_GV],"$GV${EXEEXT}",
1062    [Define to path to gv program if found or 'echo gv' otherwise])
1063 fi
1064 AC_PATH_PROG(DOTTY, [dotty], [echo dotty])
1065 if test "$DOTTY" != "echo dotty" ; then
1066   AC_DEFINE([HAVE_DOTTY],[1],[Define if the dotty program is available])
1067   dnl If we're targeting for mingw we should emit windows paths, not msys
1068   if test "$llvm_cv_os_type" = "MingW" ; then
1069     DOTTY=`echo $DOTTY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1070   fi
1071   AC_DEFINE_UNQUOTED([LLVM_PATH_DOTTY],"$DOTTY${EXEEXT}",
1072    [Define to path to dotty program if found or 'echo dotty' otherwise])
1073 fi
1074 AC_PATH_PROG(XDOT_PY, [xdot.py], [echo xdot.py])
1075 if test "$XDOT_PY" != "echo xdot.py" ; then
1076   AC_DEFINE([HAVE_XDOT_PY],[1],[Define if the xdot.py program is available])
1077   dnl If we're targeting for mingw we should emit windows paths, not msys
1078   if test "$llvm_cv_os_type" = "MingW" ; then
1079     XDOT_PY=`echo $XDOT_PY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1080   fi
1081   AC_DEFINE_UNQUOTED([LLVM_PATH_XDOT_PY],"$XDOT_PY${EXEEXT}",
1082    [Define to path to xdot.py program if found or 'echo xdot.py' otherwise])
1083 fi
1084
1085 dnl Look for a sufficiently recent version of Perl.
1086 LLVM_PROG_PERL([5.006])
1087 AC_SUBST(PERL)
1088 if test x"$PERL" = xnone; then
1089    AC_SUBST(HAVE_PERL,0)
1090    AC_MSG_ERROR([perl is required but was not found, please install it])
1091 else
1092    AC_SUBST(HAVE_PERL,1)
1093 fi
1094
1095 dnl Find the install program
1096 AC_PROG_INSTALL
1097 dnl Prepend src dir to install path dir if it's a relative path
1098 dnl This is a hack for installs that take place in something other
1099 dnl than the top level.
1100 case "$INSTALL" in
1101  [[\\/$]]* | ?:[[\\/]]* ) ;;
1102  *)  INSTALL="\\\$(TOPSRCDIR)/$INSTALL" ;;
1103 esac
1104
1105 dnl Checks for documentation and testing tools that we can do without. If these
1106 dnl are not found then they are set to "true" which always succeeds but does
1107 dnl nothing. This just lets the build output show that we could have done
1108 dnl something if the tool was available.
1109 AC_PATH_PROG(BZIP2, [bzip2])
1110 AC_PATH_PROG(CAT, [cat])
1111 AC_PATH_PROG(DOXYGEN, [doxygen])
1112 AC_PATH_PROG(GROFF, [groff])
1113 AC_PATH_PROG(GZIPBIN, [gzip])
1114 AC_PATH_PROG(POD2HTML, [pod2html])
1115 AC_PATH_PROG(POD2MAN, [pod2man])
1116 AC_PATH_PROG(PDFROFF, [pdfroff])
1117 AC_PATH_PROG(RUNTEST, [runtest])
1118 DJ_AC_PATH_TCLSH
1119 AC_PATH_PROG(ZIP, [zip])
1120 AC_PATH_PROGS(OCAMLC, [ocamlc])
1121 AC_PATH_PROGS(OCAMLOPT, [ocamlopt])
1122 AC_PATH_PROGS(OCAMLDEP, [ocamldep])
1123 AC_PATH_PROGS(OCAMLDOC, [ocamldoc])
1124 AC_PATH_PROGS(GAS, [gas as])
1125
1126 dnl Get the version of the linker in use.
1127 AC_LINK_GET_VERSION
1128
1129 dnl Determine whether the linker supports the -R option.
1130 AC_LINK_USE_R
1131
1132 dnl Determine whether the linker supports the -export-dynamic option.
1133 AC_LINK_EXPORT_DYNAMIC
1134
1135 dnl Determine whether the linker supports the --version-script option.
1136 AC_LINK_VERSION_SCRIPT
1137
1138 dnl Check for libtool and the library that has dlopen function (which must come
1139 dnl before the AC_PROG_LIBTOOL check in order to enable dlopening libraries with
1140 dnl libtool).
1141 AC_LIBTOOL_DLOPEN
1142 AC_LIB_LTDL
1143
1144 if test "$WITH_LLVMGCCDIR" = "default" ; then
1145   LLVMGCC="llvm-gcc${EXEEXT}"
1146   LLVMGXX="llvm-g++${EXEEXT}"
1147   LLVMGCCCOMMAND="$LLVMGCC"
1148   LLVMGXXCOMMAND="$LLVMGXX"
1149   AC_SUBST(LLVMGCCCOMMAND,$LLVMGCCCOMMAND)
1150   AC_SUBST(LLVMGXXCOMMAND,$LLVMGXXCOMMAND)
1151   AC_PATH_PROG(LLVMGCC, $LLVMGCC, [])
1152   AC_PATH_PROG(LLVMGXX, $LLVMGXX, [])
1153 else
1154   if test -z "$LLVMGCC"; then
1155     LLVMGCC="$WITH_LLVMGCCDIR/bin/llvm-gcc${EXEEXT}"
1156     LLVMGCCCOMMAND="$LLVMGCC"
1157   fi
1158   if test -z "$LLVMGXX"; then
1159     LLVMGXX="$WITH_LLVMGCCDIR/bin/llvm-g++${EXEEXT}"
1160     LLVMGXXCOMMAND="$LLVMGXX"
1161   fi
1162
1163   AC_SUBST(LLVMGCC,$LLVMGCC)
1164   AC_SUBST(LLVMGXX,$LLVMGXX)
1165   AC_SUBST(LLVMGCCCOMMAND,$LLVMGCCCOMMAND)
1166   AC_SUBST(LLVMGXXCOMMAND,$LLVMGXXCOMMAND)
1167 fi
1168
1169 dnl Select the LLVM capable compiler to use, we default to using llvm-gcc if
1170 dnl found, otherwise clang if available.
1171 AC_ARG_WITH(llvmcc,
1172   AS_HELP_STRING([--with-llvmcc=<name>],
1173     [Choose the LLVM capable compiler to use (llvm-gcc, clang, or none; default=check)]),
1174     [],[with_llvmcc=check])
1175 AC_MSG_CHECKING([LLVM capable compiler])
1176 if test "$with_llvmcc" != "check"; then
1177    if (test "$with_llvmcc" != "llvm-gcc" &&
1178        test "$with_llvmcc" != "clang" &&
1179        test "$with_llvmcc" != "none"); then
1180       AC_MSG_ERROR([invalid value for --with-llvmcc, expected 'llvm-gcc', 'clang', or 'none'.])
1181    fi
1182    WITH_LLVMCC="$with_llvmcc"
1183 elif test -n "$LLVMGCC"; then
1184    WITH_LLVMCC=llvm-gcc
1185 elif test -n "$WITH_CLANGPATH" || test "$WITH_BUILT_CLANG" -ne "0"; then
1186    WITH_LLVMCC=clang
1187 else
1188    WITH_LLVMCC=none
1189 fi
1190 AC_MSG_RESULT([$WITH_LLVMCC])
1191 AC_SUBST(LLVMCC_OPTION,$WITH_LLVMCC)
1192
1193 AC_MSG_CHECKING([tool compatibility])
1194
1195 dnl Ensure that compilation tools are GCC or a GNU compatible compiler such as
1196 dnl ICC; we use GCC specific options in the makefiles so the compiler needs
1197 dnl to support those options.
1198 dnl "icc" emits gcc signatures
1199 dnl "icc -no-gcc" emits no gcc signature BUT is still compatible
1200 ICC=no
1201 IXX=no
1202 case $CC in
1203   icc*|icpc*)
1204     ICC=yes
1205     IXX=yes
1206     ;;
1207    *)
1208     ;;
1209 esac
1210
1211 if test "$GCC" != "yes" && test "$ICC" != "yes"
1212 then
1213   AC_MSG_ERROR([gcc|icc required but not found])
1214 fi
1215
1216 dnl Ensure that compilation tools are compatible with GCC extensions
1217 if test "$GXX" != "yes" && test "$IXX" != "yes"
1218 then
1219   AC_MSG_ERROR([g++|clang++|icc required but not found])
1220 fi
1221
1222 dnl Verify that GCC is version 3.0 or higher
1223 if test "$GCC" = "yes"
1224 then
1225   AC_COMPILE_IFELSE([[#if !defined(__GNUC__) || __GNUC__ < 3
1226 #error Unsupported GCC version
1227 #endif
1228 ]], [], [AC_MSG_ERROR([gcc 3.x required, but you have a lower version])])
1229 fi
1230
1231 dnl Check for GNU Make.  We use its extensions, so don't build without it
1232 if test -z "$llvm_cv_gnu_make_command"
1233 then
1234   AC_MSG_ERROR([GNU Make required but not found])
1235 fi
1236
1237 dnl Tool compatibility is okay if we make it here.
1238 AC_MSG_RESULT([ok])
1239
1240 dnl Check optional compiler flags.
1241 AC_MSG_CHECKING([optional compiler flags])
1242 CXX_FLAG_CHECK(NO_VARIADIC_MACROS, [-Wno-variadic-macros])
1243 CXX_FLAG_CHECK(NO_MISSING_FIELD_INITIALIZERS, [-Wno-missing-field-initializers])
1244 AC_MSG_RESULT([$NO_VARIADIC_MACROS $NO_MISSING_FIELD_INITIALIZERS])
1245
1246 dnl===-----------------------------------------------------------------------===
1247 dnl===
1248 dnl=== SECTION 5: Check for libraries
1249 dnl===
1250 dnl===-----------------------------------------------------------------------===
1251
1252 AC_CHECK_LIB(m,sin)
1253 if test "$llvm_cv_os_type" = "MingW" ; then
1254   AC_CHECK_LIB(imagehlp, main)
1255   AC_CHECK_LIB(psapi, main)
1256 fi
1257
1258 dnl dlopen() is required for plugin support.
1259 AC_SEARCH_LIBS(dlopen,dl,AC_DEFINE([HAVE_DLOPEN],[1],
1260                [Define if dlopen() is available on this platform.]),
1261                AC_MSG_WARN([dlopen() not found - disabling plugin support]))
1262
1263 dnl libffi is optional; used to call external functions from the interpreter
1264 if test "$llvm_cv_enable_libffi" = "yes" ; then
1265   AC_SEARCH_LIBS(ffi_call,ffi,AC_DEFINE([HAVE_FFI_CALL],[1],
1266                  [Define if libffi is available on this platform.]),
1267                  AC_MSG_ERROR([libffi not found - configure without --enable-libffi to compile without it]))
1268 fi
1269
1270 dnl mallinfo is optional; the code can compile (minus features) without it
1271 AC_SEARCH_LIBS(mallinfo,malloc,AC_DEFINE([HAVE_MALLINFO],[1],
1272                [Define if mallinfo() is available on this platform.]))
1273
1274 dnl pthread locking functions are optional - but llvm will not be thread-safe
1275 dnl without locks.
1276 if test "$ENABLE_THREADS" -eq 1 && test "$ENABLE_PTHREADS" -eq 1 ; then
1277   AC_CHECK_LIB(pthread, pthread_mutex_init)
1278   AC_SEARCH_LIBS(pthread_mutex_lock,pthread,
1279                  AC_DEFINE([HAVE_PTHREAD_MUTEX_LOCK],[1],
1280                            [Have pthread_mutex_lock]))
1281   AC_SEARCH_LIBS(pthread_rwlock_init,pthread,
1282                  AC_DEFINE([HAVE_PTHREAD_RWLOCK_INIT],[1],
1283                  [Have pthread_rwlock_init]))
1284   AC_SEARCH_LIBS(pthread_getspecific,pthread,
1285                  AC_DEFINE([HAVE_PTHREAD_GETSPECIFIC],[1],
1286                  [Have pthread_getspecific]))
1287 fi
1288
1289 dnl Allow extra x86-disassembler library
1290 AC_ARG_WITH(udis86,
1291   AS_HELP_STRING([--with-udis86=<path>],
1292     [Use udis86 external x86 disassembler library]),
1293     [
1294       AC_SUBST(USE_UDIS86, [1])
1295       case "$withval" in
1296         /usr/lib|yes) ;;
1297         *) LDFLAGS="$LDFLAGS -L${withval}" ;;
1298       esac
1299       AC_CHECK_LIB(udis86, ud_init, [], [
1300         echo "Error! You need to have libudis86 around."
1301         exit -1
1302       ])
1303     ],
1304     AC_SUBST(USE_UDIS86, [0]))
1305 AC_DEFINE_UNQUOTED([USE_UDIS86],$USE_UDIS86,
1306                    [Define if use udis86 library])
1307
1308 dnl Allow OProfile support for JIT output.
1309 AC_ARG_WITH(oprofile,
1310   AS_HELP_STRING([--with-oprofile=<prefix>],
1311     [Tell OProfile >= 0.9.4 how to symbolize JIT output]),
1312     [
1313       AC_SUBST(USE_OPROFILE, [1])
1314       case "$withval" in
1315         /usr|yes) llvm_cv_oppath=/usr/lib/oprofile ;;
1316         no) llvm_cv_oppath=
1317             AC_SUBST(USE_OPROFILE, [0]) ;;
1318         *) llvm_cv_oppath="${withval}/lib/oprofile"
1319            CPPFLAGS="-I${withval}/include";;
1320       esac
1321       if test -n "$llvm_cv_oppath" ; then
1322         LIBS="$LIBS -L${llvm_cv_oppath} -Wl,-rpath,${llvm_cv_oppath}"
1323         dnl Work around http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=537744:
1324         dnl libbfd is not included properly in libopagent in some Debian
1325         dnl versions.  If libbfd isn't found at all, we assume opagent works
1326         dnl anyway.
1327         AC_SEARCH_LIBS(bfd_init, bfd, [], [])
1328         AC_SEARCH_LIBS(op_open_agent, opagent, [], [
1329           echo "Error! You need to have libopagent around."
1330           exit -1
1331         ])
1332         AC_CHECK_HEADER([opagent.h], [], [
1333           echo "Error! You need to have opagent.h around."
1334           exit -1
1335           ])
1336       fi
1337     ],
1338     [
1339       AC_SUBST(USE_OPROFILE, [0])
1340     ])
1341 AC_DEFINE_UNQUOTED([USE_OPROFILE],$USE_OPROFILE,
1342                    [Define if we have the oprofile JIT-support library])
1343
1344 dnl===-----------------------------------------------------------------------===
1345 dnl===
1346 dnl=== SECTION 6: Check for header files
1347 dnl===
1348 dnl===-----------------------------------------------------------------------===
1349
1350 dnl First, use autoconf provided macros for specific headers that we need
1351 dnl We don't check for ancient stuff or things that are guaranteed to be there
1352 dnl by the C++ standard. We always use the <cfoo> versions of <foo.h> C headers.
1353 dnl Generally we're looking for POSIX headers.
1354 AC_HEADER_DIRENT
1355 AC_HEADER_MMAP_ANONYMOUS
1356 AC_HEADER_STAT
1357 AC_HEADER_STDC
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 "$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 realpath sbrk setrlimit strdup ])
1427 AC_CHECK_FUNCS([strerror strerror_r setenv ])
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_MULTITHREADED, 1, Build multithreading support into LLVM),
1518   AC_MSG_RESULT(no)
1519   AC_DEFINE(LLVM_MULTITHREADED, 0, Build multithreading support into LLVM)
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 Check wether llvm-gcc is based on dragonegg
1542 AC_CACHE_CHECK([whether llvm-gcc is dragonegg],[llvm_cv_llvmgcc_dragonegg],
1543 [llvm_cv_llvmgcc_dragonegg="no"
1544 if test -n "$LLVMGCC" ; then
1545   cp /dev/null conftest.c
1546   $LLVMGCC -fplugin-arg-dragonegg-emit-ir -S -o - conftest.c > /dev/null 2>&1
1547   if test $? -eq 0 ; then
1548     llvm_cv_llvmgcc_dragonegg="yes"
1549   fi
1550   rm conftest.c
1551 fi])
1552
1553 dnl Set the flags needed to emit LLVM IR and to disable optimizations
1554 dnl in llvmgcc
1555 if test "$llvm_cv_llvmgcc_dragonegg" = "yes" ; then
1556   LLVMCC_EMITIR_FLAG="-fplugin-arg-dragonegg-emit-ir"
1557   LLVMCC_DISABLEOPT_FLAGS="-fplugin-arg-dragonegg-llvm-ir-optimize=0"
1558 else
1559   LLVMCC_EMITIR_FLAG="-emit-llvm"
1560   LLVMCC_DISABLEOPT_FLAGS="-mllvm -disable-llvm-optzns"
1561 fi
1562
1563 AC_SUBST(LLVMCC_EMITIR_FLAG)
1564
1565 dnl See if the llvm-gcc executable can compile to LLVM assembly
1566 AC_CACHE_CHECK([whether llvm-gcc is sane],[llvm_cv_llvmgcc_sanity],
1567 [llvm_cv_llvmgcc_sanity="no"
1568 if test -n "$LLVMGCC" ; then
1569   cp /dev/null conftest.c
1570   $LLVMGCC "$LLVMCC_EMITIR_FLAG" -S -o - conftest.c | \
1571       grep 'target datalayout =' > /dev/null 2>&1
1572   if test $? -eq 0 ; then
1573     llvm_cv_llvmgcc_sanity="yes"
1574   fi
1575   rm conftest.c
1576 fi])
1577
1578 dnl Since we have a sane llvm-gcc, identify it and its sub-tools
1579 dnl Furthermore, add some information about the tools
1580 if test "$llvm_cv_llvmgcc_sanity" = "yes" ; then
1581   AC_MSG_CHECKING([llvm-gcc component support])
1582   llvmcc1path=`$LLVMGCC --print-prog-name=cc1`
1583   AC_SUBST(LLVMCC1,$llvmcc1path)
1584   llvmcc1pluspath=`$LLVMGCC --print-prog-name=cc1plus`
1585   AC_SUBST(LLVMCC1PLUS,$llvmcc1pluspath)
1586   llvmgccdir=`echo "$llvmcc1path" | sed 's,/libexec/.*,,'`
1587   AC_SUBST(LLVMGCCDIR,$llvmgccdir)
1588   llvmgcclangs=[`$LLVMGCC -v --help 2>&1 | grep '^Configured with:' | sed 's/^.*--enable-languages=\([^ ]*\).*/\1/'`]
1589   AC_SUBST(LLVMGCC_LANGS,$llvmgcclangs)
1590   AC_SUBST(LLVMGCC_DRAGONEGG,$llvm_cv_llvmgcc_dragonegg)
1591   AC_SUBST(LLVMCC_DISABLEOPT_FLAGS)
1592   AC_MSG_RESULT([ok])
1593 fi
1594
1595 dnl Propagate the shared library extension that the libltdl checks did to
1596 dnl the Makefiles so we can use it there too
1597 AC_SUBST(SHLIBEXT,$libltdl_cv_shlibext)
1598
1599 dnl Propagate the run-time library path variable that the libltdl
1600 dnl checks found to the Makefiles so we can use it there too
1601 AC_SUBST(SHLIBPATH_VAR,$libltdl_cv_shlibpath_var)
1602
1603 # Translate the various configuration directories and other basic
1604 # information into substitutions that will end up in Makefile.config.in
1605 # that these configured values can be used by the makefiles
1606 if test "${prefix}" = "NONE" ; then
1607   prefix="/usr/local"
1608 fi
1609 eval LLVM_PREFIX="${prefix}";
1610 eval LLVM_BINDIR="${prefix}/bin";
1611 eval LLVM_LIBDIR="${prefix}/lib";
1612 eval LLVM_DATADIR="${prefix}/share/llvm";
1613 eval LLVM_DOCSDIR="${prefix}/share/doc/llvm";
1614 eval LLVM_ETCDIR="${prefix}/etc/llvm";
1615 eval LLVM_INCLUDEDIR="${prefix}/include";
1616 eval LLVM_INFODIR="${prefix}/info";
1617 eval LLVM_MANDIR="${prefix}/man";
1618 LLVM_CONFIGTIME=`date`
1619 AC_SUBST(LLVM_PREFIX)
1620 AC_SUBST(LLVM_BINDIR)
1621 AC_SUBST(LLVM_LIBDIR)
1622 AC_SUBST(LLVM_DATADIR)
1623 AC_SUBST(LLVM_DOCSDIR)
1624 AC_SUBST(LLVM_ETCDIR)
1625 AC_SUBST(LLVM_INCLUDEDIR)
1626 AC_SUBST(LLVM_INFODIR)
1627 AC_SUBST(LLVM_MANDIR)
1628 AC_SUBST(LLVM_CONFIGTIME)
1629
1630 # Place the various directores into the config.h file as #defines so that we
1631 # can know about the installation paths within LLVM.
1632 AC_DEFINE_UNQUOTED(LLVM_PREFIX,"$LLVM_PREFIX",
1633                    [Installation prefix directory])
1634 AC_DEFINE_UNQUOTED(LLVM_BINDIR, "$LLVM_BINDIR",
1635                    [Installation directory for binary executables])
1636 AC_DEFINE_UNQUOTED(LLVM_LIBDIR, "$LLVM_LIBDIR",
1637                    [Installation directory for libraries])
1638 AC_DEFINE_UNQUOTED(LLVM_DATADIR, "$LLVM_DATADIR",
1639                    [Installation directory for data files])
1640 AC_DEFINE_UNQUOTED(LLVM_DOCSDIR, "$LLVM_DOCSDIR",
1641                    [Installation directory for documentation])
1642 AC_DEFINE_UNQUOTED(LLVM_ETCDIR, "$LLVM_ETCDIR",
1643                    [Installation directory for config files])
1644 AC_DEFINE_UNQUOTED(LLVM_INCLUDEDIR, "$LLVM_INCLUDEDIR",
1645                    [Installation directory for include files])
1646 AC_DEFINE_UNQUOTED(LLVM_INFODIR, "$LLVM_INFODIR",
1647                    [Installation directory for .info files])
1648 AC_DEFINE_UNQUOTED(LLVM_MANDIR, "$LLVM_MANDIR",
1649                    [Installation directory for man pages])
1650 AC_DEFINE_UNQUOTED(LLVM_CONFIGTIME, "$LLVM_CONFIGTIME",
1651                    [Time at which LLVM was configured])
1652 AC_DEFINE_UNQUOTED(LLVM_HOSTTRIPLE, "$host",
1653                    [Host triple we were built on])
1654
1655 # Determine which bindings to build.
1656 if test "$BINDINGS_TO_BUILD" = auto ; then
1657   BINDINGS_TO_BUILD=""
1658   if test "x$OCAMLC" != x -a "x$OCAMLDEP" != x ; then
1659     BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD"
1660   fi
1661 fi
1662 AC_SUBST(BINDINGS_TO_BUILD,$BINDINGS_TO_BUILD)
1663
1664 # This isn't really configurey, but it avoids having to repeat the list in
1665 # other files.
1666 AC_SUBST(ALL_BINDINGS,ocaml)
1667
1668 # Do any work necessary to ensure that bindings have what they need.
1669 binding_prereqs_failed=0
1670 for a_binding in $BINDINGS_TO_BUILD ; do
1671   case "$a_binding" in
1672   ocaml)
1673     if test "x$OCAMLC" = x ; then
1674       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlc not found. Try configure OCAMLC=/path/to/ocamlc])
1675       binding_prereqs_failed=1
1676     fi
1677     if test "x$OCAMLDEP" = x ; then
1678       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamldep not found. Try configure OCAMLDEP=/path/to/ocamldep])
1679       binding_prereqs_failed=1
1680     fi
1681     if test "x$OCAMLOPT" = x ; then
1682       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlopt not found. Try configure OCAMLOPT=/path/to/ocamlopt])
1683       dnl ocamlopt is optional!
1684     fi
1685     if test "x$with_ocaml_libdir" != xauto ; then
1686       AC_SUBST(OCAML_LIBDIR,$with_ocaml_libdir)
1687     else
1688       ocaml_stdlib="`"$OCAMLC" -where`"
1689       if test "$LLVM_PREFIX" '<' "$ocaml_stdlib" -a "$ocaml_stdlib" '<' "$LLVM_PREFIX~"
1690       then
1691         # ocaml stdlib is beneath our prefix; use stdlib
1692         AC_SUBST(OCAML_LIBDIR,$ocaml_stdlib)
1693       else
1694         # ocaml stdlib is outside our prefix; use libdir/ocaml
1695         AC_SUBST(OCAML_LIBDIR,$LLVM_LIBDIR/ocaml)
1696       fi
1697     fi
1698     ;;
1699   esac
1700 done
1701 if test "$binding_prereqs_failed" = 1 ; then
1702   AC_MSG_ERROR([Prequisites for bindings not satisfied. Fix them or use configure --disable-bindings.])
1703 fi
1704
1705 dnl Determine whether the compiler supports -fvisibility-inlines-hidden.
1706 AC_CXX_USE_VISIBILITY_INLINES_HIDDEN
1707
1708 dnl Determine linker rpath flag
1709 if test "$llvm_cv_link_use_r" = "yes" ; then
1710   RPATH="-Wl,-R"
1711 else
1712   RPATH="-Wl,-rpath"
1713 fi
1714 AC_SUBST(RPATH)
1715
1716 dnl Determine linker rdynamic flag
1717 if test "$llvm_cv_link_use_export_dynamic" = "yes" ; then
1718   RDYNAMIC="-Wl,-export-dynamic"
1719 else
1720   RDYNAMIC=""
1721 fi
1722 AC_SUBST(RDYNAMIC)
1723
1724 dnl===-----------------------------------------------------------------------===
1725 dnl===
1726 dnl=== SECTION 10: Specify the output files and generate it
1727 dnl===
1728 dnl===-----------------------------------------------------------------------===
1729
1730 dnl Configure header files
1731 dnl WARNING: dnl If you add or remove any of the following config headers, then
1732 dnl you MUST also update Makefile.rules so that the variable FilesToConfig
1733 dnl contains the same list of files as AC_CONFIG_HEADERS below. This ensures the
1734 dnl files can be updated automatically when their *.in sources change.
1735 AC_CONFIG_HEADERS([include/llvm/Config/config.h include/llvm/Config/llvm-config.h])
1736 AH_TOP([#ifndef CONFIG_H
1737 #define CONFIG_H])
1738 AH_BOTTOM([#endif])
1739
1740 AC_CONFIG_FILES([include/llvm/Config/Targets.def])
1741 AC_CONFIG_FILES([include/llvm/Config/AsmPrinters.def])
1742 AC_CONFIG_FILES([include/llvm/Config/AsmParsers.def])
1743 AC_CONFIG_FILES([include/llvm/Config/Disassemblers.def])
1744 AC_CONFIG_HEADERS([include/llvm/Support/DataTypes.h])
1745
1746 dnl Configure the makefile's configuration data
1747 AC_CONFIG_FILES([Makefile.config])
1748
1749 dnl Configure the RPM spec file for LLVM
1750 AC_CONFIG_FILES([llvm.spec])
1751
1752 dnl Configure doxygen's configuration file
1753 AC_CONFIG_FILES([docs/doxygen.cfg])
1754 if test -f ${srcdir}/tools/clang/README.txt; then
1755   AC_CONFIG_FILES([tools/clang/docs/doxygen.cfg])
1756 fi
1757
1758 dnl Configure llvmc's Base plugin
1759 AC_CONFIG_FILES([tools/llvmc/src/Base.td])
1760
1761 dnl Do the first stage of configuration for llvm-config.in.
1762 AC_CONFIG_FILES([tools/llvm-config/llvm-config.in])
1763
1764 dnl Do special configuration of Makefiles
1765 AC_CONFIG_COMMANDS([setup],,[llvm_src="${srcdir}"])
1766 AC_CONFIG_MAKEFILE(Makefile)
1767 AC_CONFIG_MAKEFILE(Makefile.common)
1768 AC_CONFIG_MAKEFILE(examples/Makefile)
1769 AC_CONFIG_MAKEFILE(lib/Makefile)
1770 AC_CONFIG_MAKEFILE(runtime/Makefile)
1771 AC_CONFIG_MAKEFILE(test/Makefile)
1772 AC_CONFIG_MAKEFILE(test/Makefile.tests)
1773 AC_CONFIG_MAKEFILE(unittests/Makefile)
1774 AC_CONFIG_MAKEFILE(tools/Makefile)
1775 AC_CONFIG_MAKEFILE(utils/Makefile)
1776 AC_CONFIG_MAKEFILE(projects/Makefile)
1777 AC_CONFIG_MAKEFILE(bindings/Makefile)
1778 AC_CONFIG_MAKEFILE(bindings/ocaml/Makefile.ocaml)
1779
1780 dnl Finally, crank out the output
1781 AC_OUTPUT