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