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