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