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