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