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