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