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