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