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